From 130fe0384e2bd6efa2c63ab00dd71c895f5e0e4e Mon Sep 17 00:00:00 2001 From: Hamza Iqbal <92900102+HamzaIqbal69@users.noreply.github.com> Date: Sun, 4 Feb 2024 14:29:57 -0800 Subject: [PATCH] Receiver (#132) * Disabled outgoing can * Made reciever build * Trying to make CAN work - 1/22 * temp changes * Made CAN Sorta Work * Made interrupts work * Cleaned up dummy changes * fixed typo * Made ioc changes --- Core/Inc/stm32f4xx_hal_conf.h | 2 +- Core/Src/can_handler.c | 10 ++++++++++ Core/Src/main.c | 14 +++++++++----- cerberus.ioc | 15 +++++++++++---- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/Core/Inc/stm32f4xx_hal_conf.h b/Core/Inc/stm32f4xx_hal_conf.h index 184c66f6..7db2db95 100644 --- a/Core/Inc/stm32f4xx_hal_conf.h +++ b/Core/Inc/stm32f4xx_hal_conf.h @@ -155,7 +155,7 @@ #define DATA_CACHE_ENABLE 1U #define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ -#define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ +#define USE_HAL_CAN_REGISTER_CALLBACKS 1U /* CAN register callback disabled */ #define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ #define USE_HAL_CRYP_REGISTER_CALLBACKS 0U /* CRYP register callback disabled */ #define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ diff --git a/Core/Src/can_handler.c b/Core/Src/can_handler.c index e7231c24..0ab68a2e 100644 --- a/Core/Src/can_handler.c +++ b/Core/Src/can_handler.c @@ -123,6 +123,16 @@ void vCanDispatch(void* pv_params) queue_fault(&fault_data); } } + /* Uncomment this if needed for debugging */ + // CAN_RxHeaderTypeDef rx_header; + // can_msg_t new_msg; + // if(HAL_CAN_GetRxMessage(can1->hcan, CAN_RX_FIFO0, &rx_header, new_msg.data) != HAL_OK) + // { + // serial_print("IM SCARED \r\n"); + // } + // else { + // serial_print("MESSAGE CONTENTS\r\nHeader\t%X\r\nData\t%X%X%X%X\r\n", rx_header.StdId, new_msg.data[0], new_msg.data[1], new_msg.data[2], new_msg.data[3]); + // } /* Yield to other tasks */ osDelay(CAN_DISPATCH_DELAY); diff --git a/Core/Src/main.c b/Core/Src/main.c index f7708486..8e689c07 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -159,6 +159,7 @@ int main(void) MX_USART3_UART_Init(); MX_ADC2_Init(); MX_ADC3_Init(); + /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -208,7 +209,7 @@ int main(void) /* Messaging */ /* Note that CAN Router initializes CAN */ dti_router_handle = osThreadNew(vDTIRouter, mc, &dti_router_attributes); - //steeringio_router_handle = osThreadNew(vSteeringIORouter, wheel, &steeringio_router_attributes); + // steeringio_router_handle = osThreadNew(vSteeringIORouter, wheel, &steeringio_router_attributes); can_dispatch_handle = osThreadNew(vCanDispatch, can1, &can_dispatch_attributes); serial_monitor_handle = osThreadNew(vSerialMonitor, NULL, &serial_monitor_attributes); @@ -460,17 +461,17 @@ static void MX_CAN1_Init(void) /* USER CODE END CAN1_Init 1 */ hcan1.Instance = CAN1; - hcan1.Init.Prescaler = 1; + hcan1.Init.Prescaler = 3; hcan1.Init.Mode = CAN_MODE_NORMAL; - hcan1.Init.SyncJumpWidth = CAN_SJW_3TQ; + hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan1.Init.TimeSeg1 = CAN_BS1_13TQ; hcan1.Init.TimeSeg2 = CAN_BS2_2TQ; hcan1.Init.TimeTriggeredMode = DISABLE; hcan1.Init.AutoBusOff = DISABLE; - hcan1.Init.AutoWakeUp = DISABLE; + hcan1.Init.AutoWakeUp = ENABLE; hcan1.Init.AutoRetransmission = DISABLE; hcan1.Init.ReceiveFifoLocked = DISABLE; - hcan1.Init.TransmitFifoPriority = DISABLE; + hcan1.Init.TransmitFifoPriority = ENABLE; if (HAL_CAN_Init(&hcan1) != HAL_OK) { Error_Handler(); @@ -478,6 +479,9 @@ static void MX_CAN1_Init(void) /* USER CODE BEGIN CAN1_Init 2 */ /* USER CODE END CAN1_Init 2 */ + HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn); + HAL_CAN_IRQHandler(&hcan1); } diff --git a/cerberus.ioc b/cerberus.ioc index 6e8a5691..bb505ef2 100644 --- a/cerberus.ioc +++ b/cerberus.ioc @@ -29,10 +29,15 @@ ADC3.ScanConvMode=ENABLE CAD.formats= CAD.pinconfig= CAD.provider= -CAN1.CalculateBaudRate=333333 -CAN1.CalculateTimeBit=3000 -CAN1.CalculateTimeQuantum=1000.0 -CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate +CAN1.AWUM=ENABLE +CAN1.BS1=CAN_BS1_13TQ +CAN1.CalculateBaudRate=355555 +CAN1.CalculateTimeBit=2812 +CAN1.CalculateTimeQuantum=187.5 +CAN1.IPParameters=CalculateTimeQuantum,CalculateTimeBit,CalculateBaudRate,Prescaler,BS1,AWUM,NART,TXFP +CAN1.NART=ENABLE +CAN1.Prescaler=3 +CAN1.TXFP=ENABLE FREERTOS.IPParameters=Tasks01 FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL File.Version=6 @@ -107,6 +112,7 @@ NVIC.SavedSvcallIrqHandlerGenerated=true NVIC.SavedSystickIrqHandlerGenerated=true NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:true\:false\:true\:false NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.CAN1_RX0_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true PA0-WKUP.Locked=true PA0-WKUP.Signal=ADCx_IN0 PA1.Locked=true @@ -250,3 +256,4 @@ VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick board=custom rtos.0.ip=FREERTOS +isbadioc=false