diff --git a/App/freertos_action.c b/App/freertos_action.c index 0c09065..d69042e 100644 --- a/App/freertos_action.c +++ b/App/freertos_action.c @@ -1,21 +1,14 @@ -/* - * @Author: your name - * @Date: 2021-06-26 15:37:21 - * @LastEditTime: 2021-07-15 08:36:21 - * @LastEditors: Please set LastEditors - * @Description: In User Settings Edit - * @FilePath: \warter_rader\App\freertos_action.c - */ + #include "freertos_action.h" +void send_uavcan_proximity(uavcan_proximity_t *data); + void task_usart_rev_action(void) { usart_data_t data = {0}; // uint8_t data_uart; osStatus_t os_status; - osDelay(5000); - request_QOAR1271_data(); - active_uasrt_irq(); + for(;;) { if (usart_rev_queueHandle != NULL) @@ -61,7 +54,7 @@ void task_uavcan_send_action(void) uavcan_send_data_t data = {0}; float depth_data=0.0f; osStatus_t status; - + for(;;) { if (uavcan_send_queueHandle != NULL) @@ -96,23 +89,78 @@ void task_default_action(void) osMessageQueuePut(uavcan_send_queueHandle,&send_data,0,10); } } - -// if (last_send_proximity_tick + 200 < HAL_GetTick()) -// { -// last_send_proximity_tick = HAL_GetTick(); -// if (uavcan_send_queueHandle != NULL) -// { -// uavcan_send_data_t send_data = {0}; -// send_data.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID; -// uavcan_proximity_t data = {0}; -// data.d0 = 200; -// data.d45 = 300; -// data.d315 = 400; -// data.d135 = 500; -// memcpy(&send_data.content.node_state, &data, sizeof(uavcan_node_status_t)); -// osMessageQueuePut(uavcan_send_queueHandle, &send_data, 0, 10); -// } -// } osDelay(200); } -} \ No newline at end of file +} + +void task_usart_send(void) +{ + osDelay(5000); + request_QOAR1271_data(); + active_uasrt_irq(1); + active_uasrt_irq(2); + for (;;) + { + osDelay(1000); + } +} + +void task_proximity(void) +{ + proximity_data_t proximity1 ={0}; + proximity_data_t proximity2 ={0}; + osStatus_t os_p1 =osError; + osStatus_t os_p2 =osError; + for (;;) + { + if (proximity1_queueHandle != NULL && proximity2_queueHandle != NULL) + { + os_p1 = osMessageQueueGet(proximity1_queueHandle, &proximity1, NULL, 100); + os_p2 = osMessageQueueGet(proximity2_queueHandle, &proximity2, NULL, 100); + + if ((os_p1 == osOK) && (os_p2 == osOK)) + { + uavcan_proximity_t data = {0}; + data.d0 = min(proximity1.d0, proximity2.d0); + data.d315 = proximity1.d_left; + data.d45 = proximity2.d_left; + send_uavcan_proximity(&data); + } + else + { + if (os_p1 == osOK) //左边的雷达是反的 + { + uavcan_proximity_t data = {0}; + data.d0 = proximity1.d0; + data.d315 = proximity1.d_right; + data.d45 = proximity1.d_left; + send_uavcan_proximity(&data); + } + else if (os_p2 == osOK) + { + uavcan_proximity_t data = {0}; + data.d0 = proximity2.d0; + data.d315 = proximity2.d_left; + data.d45 = proximity2.d_right; + send_uavcan_proximity(&data); + } + } + } + } +} + +uint16_t min(uint16_t one, uint16_t two) +{ + return one < two ? one : two; +} + +void send_uavcan_proximity(uavcan_proximity_t *data) +{ + uavcan_send_data_t msg = {0}; + if (uavcan_send_queueHandle != NULL) + { + msg.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID; + memcpy(&msg.content.proximity, data, sizeof(uavcan_proximity_t)); + osMessageQueuePut(uavcan_send_queueHandle, &msg, NULL, 10U); + } +} diff --git a/App/freertos_action.h b/App/freertos_action.h index f3ec044..7bda8b4 100644 --- a/App/freertos_action.h +++ b/App/freertos_action.h @@ -8,10 +8,26 @@ extern "C" #include "main.h" + +extern osMessageQueueId_t uavcan_rev_queueHandle; +extern osMessageQueueId_t usart_rev_queueHandle; +extern osMessageQueueId_t uavcan_send_queueHandle; +extern osMessageQueueId_t depth_data_queueHandle; +extern osMessageQueueId_t proximity1_queueHandle; +extern osMessageQueueId_t proximity2_queueHandle; + +extern osMutexId_t uavcan_send_mutexHandle; +extern osMutexId_t radar_parse_mutexHandle; + void task_usart_rev_action(void); void task_uavcan_rev_action(void); void task_uavcan_send_action(void); void task_default_action(void); +void task_usart2_rev_action(void); +void task_usart_send(void); +void task_proximity(void); +uint16_t min(uint16_t one, uint16_t two); + #ifdef __cplusplus } #endif diff --git a/BSP/bsp_common.c b/BSP/bsp_common.c index 556e537..30f6613 100644 --- a/BSP/bsp_common.c +++ b/BSP/bsp_common.c @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-06-01 17:04:59 - * @LastEditTime: 2021-07-14 14:39:56 + * @LastEditTime: 2021-08-10 17:28:33 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \flow-radar-convertor\BSP\bsp_common.c @@ -10,6 +10,7 @@ #include "stdarg.h" uint8_t hart1_rev_buff[BUFFER_SIZE]; +uint8_t hart2_rev_buff[BUFFER_SIZE]; uint32_t last_usart1_rev_tick = 0; extern DMA_HandleTypeDef hdma_usart1_rx; extern DMA_HandleTypeDef hdma_usart1_tx; @@ -50,33 +51,42 @@ void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) //-----------usart funtion------- -void active_uasrt_irq(void) +void active_uasrt_irq(uint8_t instance) { - HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)hart1_rev_buff, BUFFER_SIZE); - // __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); - // HAL_UART_Receive_IT(&huart1, &usart_rev_data, 1); + switch (instance) + { + case 1: + HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)hart1_rev_buff, BUFFER_SIZE); + break; + case 2: + HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *)hart2_rev_buff, BUFFER_SIZE); + break; + default: + break; + } } void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart) { - if (huart1.Instance == USART1) + if (huart->Instance == USART1) { - // my_printf("err tick:%u \r\n", HAL_GetTick()); HAL_UARTEx_ReceiveToIdle_DMA(&huart1, (uint8_t *)hart1_rev_buff, BUFFER_SIZE); } + else if (huart->Instance == USART2) + { + HAL_UARTEx_ReceiveToIdle_DMA(&huart2, (uint8_t *)hart2_rev_buff, BUFFER_SIZE); + } } void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { // uint8_t data_length = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx); - // my_printf("tick:%u,rx-size:%u\r\n", HAL_GetTick(), Size); - if (huart->Instance == USART1) { usart_data_t msg = {0}; - + msg.len = Size; - msg.usart_instance =1; + msg.usart_instance = 1; if (Size > BUFFER_SIZE) { @@ -91,20 +101,31 @@ void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) memset(&hart1_rev_buff[0], 0, sizeof(hart1_rev_buff)); - active_uasrt_irq(); + active_uasrt_irq(1); } -} + else if (huart->Instance == USART2) + { + usart_data_t msg = {0}; -void my_printf(const char *format, ...) -{ - static uint8_t _dbg_TXBuff[300]; - memset(&_dbg_TXBuff[0], 0, sizeof(_dbg_TXBuff)); - uint32_t length; - va_list args; - va_start(args, format); - length = vsnprintf((char *)_dbg_TXBuff, sizeof(_dbg_TXBuff) + 1, (char *)format, args); - va_end(args); - HAL_UART_Transmit_DMA(&huart2, _dbg_TXBuff, length); + msg.len = Size; + msg.usart_instance = 2; + + if (Size > BUFFER_SIZE) + { + Size = BUFFER_SIZE; + } + memcpy(&msg.data, &hart2_rev_buff[0], msg.len); + + if (usart_rev_queueHandle != NULL && msg.len > 0) + { + osMessageQueuePut(usart_rev_queueHandle, &msg, NULL, 0U); + } + + memset(&hart2_rev_buff[0], 0, sizeof(hart2_rev_buff)); + + active_uasrt_irq(2); + } } + //-------------------------------------------- diff --git a/BSP/bsp_common.h b/BSP/bsp_common.h index 9681f7a..1a098b2 100644 --- a/BSP/bsp_common.h +++ b/BSP/bsp_common.h @@ -1,7 +1,7 @@ /* * @Author: your name * @Date: 2021-06-01 17:05:15 - * @LastEditTime: 2021-07-14 14:32:04 + * @LastEditTime: 2021-08-10 17:10:46 * @LastEditors: Please set LastEditors * @Description: In User Settings Edit * @FilePath: \flow-radar-convertor\BSP\bsp_common.h @@ -27,13 +27,10 @@ void close_timer(TIM_HandleTypeDef *htim); void USAR_UART_IDLECallback(UART_HandleTypeDef *huart); void USER_UART_IRQHandler(UART_HandleTypeDef *huart); - - void action_do_uasrt1_sigle_data(uint8_t data); void usart1_IRQ_action(void); -void active_uasrt_irq(void); +void active_uasrt_irq(uint8_t instance); void action_rev_usart(uint8_t data); -void my_printf(const char *format, ...); #ifdef __cplusplus } diff --git a/BSP/custom_data_def.h b/BSP/custom_data_def.h index 411ad9a..46d1436 100644 --- a/BSP/custom_data_def.h +++ b/BSP/custom_data_def.h @@ -12,4 +12,12 @@ typedef struct uint8_t data[BUFFER_SIZE]; } usart_data_t; + +typedef struct +{ + uint16_t d0; + uint16_t d_left; + uint16_t d_right; +}proximity_data_t; + #endif /* CUSTOM_DATA_DEF_H */ diff --git a/BSP/insifhtica_QOAR1271.c b/BSP/insifhtica_QOAR1271.c index fa43499..ac45430 100644 --- a/BSP/insifhtica_QOAR1271.c +++ b/BSP/insifhtica_QOAR1271.c @@ -6,6 +6,7 @@ uint16_t ar1271_rev_flag = 0; void parse_ar1271_data(usart_data_t *usart_data) { + osSemaphoreAcquire(radar_parse_mutexHandle,30); uint8_t buffer_count; uint8_t buffer[LIDAR_360_SIZE] = {0}; uint8_t message_count; @@ -32,27 +33,29 @@ void parse_ar1271_data(usart_data_t *usart_data) // check if message has right CRC if (crc_crc8(buffer, 19) == buffer[19]) { + proximity_data_t proximity_data = {0}; + proximity_data.d0 = uint16_value(buffer[2], buffer[3]); + proximity_data.d_right = uint16_value(buffer[4], buffer[5]); + proximity_data.d_left = uint16_value(buffer[16], buffer[17]); + if (usart_data->usart_instance == 1) { - uavcan_send_data_t msg = {0}; - if (uavcan_send_queueHandle != NULL) + if (proximity1_queueHandle != NULL) { - msg.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID; - - uavcan_proximity_t data = {0}; - data.sensor_type = SENSOR_TYPE_RADAR; - - data.d0 = uint16_value(buffer[2], buffer[3]); - data.d45 = uint16_value(buffer[4], buffer[5]); - data.d315 = uint16_value(buffer[16], buffer[17]); - memcpy(&msg.content.proximity, &data, sizeof(uavcan_proximity_t)); - osMessageQueuePut(uavcan_send_queueHandle, &msg, NULL, 10U); + osMessageQueuePut(proximity1_queueHandle, &proximity_data, 0, 10); + } + } + else if (usart_data->usart_instance == 2) + { + if (proximity2_queueHandle != NULL) + { + osMessageQueuePut(proximity2_queueHandle, &proximity_data, 0, 10); } } - //TODO action send_data; } } } + osSemaphoreRelease(radar_parse_mutexHandle); } static const uint8_t crc8_table[] = { @@ -106,11 +109,19 @@ void request_QOAR1271_data(void) uint8_t send_data4[5] = {0x00, 0x52, 0x03, 0x03, 0xC4}; HAL_UART_Transmit_DMA(&huart1, send_data1, 4); - osDelay(1000); + osDelay(500); + HAL_UART_Transmit_DMA(&huart2, send_data1, 4); + osDelay(500); HAL_UART_Transmit_DMA(&huart1, send_data2, 4); - osDelay(1000); + osDelay(500); + HAL_UART_Transmit_DMA(&huart2, send_data2, 4); + osDelay(500); HAL_UART_Transmit_DMA(&huart1, send_data3, 5); - osDelay(1000); + osDelay(500); + HAL_UART_Transmit_DMA(&huart2, send_data3, 5); + osDelay(500); HAL_UART_Transmit_DMA(&huart1, send_data4, 5); - osDelay(1000); + osDelay(500); + HAL_UART_Transmit_DMA(&huart2, send_data4, 5); + osDelay(500); } diff --git a/Core/Inc/main.h b/Core/Inc/main.h index dca58ae..a587e38 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -45,11 +45,7 @@ extern "C" { /* Exported types ------------------------------------------------------------*/ /* USER CODE BEGIN ET */ -extern osMessageQueueId_t uavcan_rev_queueHandle; -extern osMessageQueueId_t usart_rev_queueHandle; -extern osMessageQueueId_t uavcan_send_queueHandle; -extern osMutexId_t uavcan_send_mutexHandle; -extern osMessageQueueId_t depth_data_queueHandle; + /* USER CODE END ET */ /* Exported constants --------------------------------------------------------*/ diff --git a/Core/Inc/stm32f1xx_it.h b/Core/Inc/stm32f1xx_it.h index 4e18baf..3fd409f 100644 --- a/Core/Inc/stm32f1xx_it.h +++ b/Core/Inc/stm32f1xx_it.h @@ -55,6 +55,7 @@ void UsageFault_Handler(void); void DebugMon_Handler(void); void DMA1_Channel4_IRQHandler(void); void DMA1_Channel5_IRQHandler(void); +void DMA1_Channel6_IRQHandler(void); void DMA1_Channel7_IRQHandler(void); void CAN1_RX1_IRQHandler(void); void TIM2_IRQHandler(void); diff --git a/Core/Src/dma.c b/Core/Src/dma.c index 1329340..1c61e80 100644 --- a/Core/Src/dma.c +++ b/Core/Src/dma.c @@ -46,8 +46,11 @@ void MX_DMA_Init(void) HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 9, 0); HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn); /* DMA1_Channel5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 6, 0); + HAL_NVIC_SetPriority(DMA1_Channel5_IRQn, 5, 0); HAL_NVIC_EnableIRQ(DMA1_Channel5_IRQn); + /* DMA1_Channel6_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Channel6_IRQn, 6, 0); + HAL_NVIC_EnableIRQ(DMA1_Channel6_IRQn); /* DMA1_Channel7_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 10, 0); HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn); diff --git a/Core/Src/freertos.c b/Core/Src/freertos.c index cf3f376..175b5c4 100644 --- a/Core/Src/freertos.c +++ b/Core/Src/freertos.c @@ -80,9 +80,16 @@ const osThreadAttr_t UavcanSendTask_attributes = { osThreadId_t UsartRevTaskHandle; const osThreadAttr_t UsartRevTask_attributes = { .name = "UsartRevTask", - .stack_size = 128 * 4, + .stack_size = 256 * 4, .priority = (osPriority_t) osPriorityAboveNormal7, }; +/* Definitions for proximityTask */ +osThreadId_t proximityTaskHandle; +const osThreadAttr_t proximityTask_attributes = { + .name = "proximityTask", + .stack_size = 256 * 4, + .priority = (osPriority_t) osPriorityAboveNormal4, +}; /* Definitions for uavcan_rev_queue */ osMessageQueueId_t uavcan_rev_queueHandle; const osMessageQueueAttr_t uavcan_rev_queue_attributes = { @@ -98,11 +105,26 @@ osMessageQueueId_t usart_rev_queueHandle; const osMessageQueueAttr_t usart_rev_queue_attributes = { .name = "usart_rev_queue" }; +/* Definitions for proximity1_queue */ +osMessageQueueId_t proximity1_queueHandle; +const osMessageQueueAttr_t proximity1_queue_attributes = { + .name = "proximity1_queue" +}; +/* Definitions for proximity2_queue */ +osMessageQueueId_t proximity2_queueHandle; +const osMessageQueueAttr_t proximity2_queue_attributes = { + .name = "proximity2_queue" +}; /* Definitions for uavcan_send_mutex */ osMutexId_t uavcan_send_mutexHandle; const osMutexAttr_t uavcan_send_mutex_attributes = { .name = "uavcan_send_mutex" }; +/* Definitions for radar_parse_mutex */ +osMutexId_t radar_parse_mutexHandle; +const osMutexAttr_t radar_parse_mutex_attributes = { + .name = "radar_parse_mutex" +}; /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN FunctionPrototypes */ @@ -114,6 +136,7 @@ void StartUavcanRevTask(void *argument); void StartTaskUsartSend(void *argument); void StartUavcanSendTask(void *argument); void StartUsartRevTask(void *argument); +void StartProximity(void *argument); void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ @@ -130,6 +153,9 @@ void MX_FREERTOS_Init(void) { /* creation of uavcan_send_mutex */ uavcan_send_mutexHandle = osMutexNew(&uavcan_send_mutex_attributes); + /* creation of radar_parse_mutex */ + radar_parse_mutexHandle = osMutexNew(&radar_parse_mutex_attributes); + /* USER CODE BEGIN RTOS_MUTEX */ /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ @@ -147,11 +173,17 @@ void MX_FREERTOS_Init(void) { uavcan_rev_queueHandle = osMessageQueueNew (10, sizeof(uavcan_rev_t), &uavcan_rev_queue_attributes); /* creation of uavcan_send_queue */ - uavcan_send_queueHandle = osMessageQueueNew (10, sizeof(uavcan_send_data_t), &uavcan_send_queue_attributes); + uavcan_send_queueHandle = osMessageQueueNew (5, sizeof(uavcan_send_data_t), &uavcan_send_queue_attributes); /* creation of usart_rev_queue */ usart_rev_queueHandle = osMessageQueueNew (10, sizeof(usart_data_t), &usart_rev_queue_attributes); + /* creation of proximity1_queue */ + proximity1_queueHandle = osMessageQueueNew (5, sizeof(proximity_data_t), &proximity1_queue_attributes); + + /* creation of proximity2_queue */ + proximity2_queueHandle = osMessageQueueNew (5, sizeof(proximity_data_t), &proximity2_queue_attributes); + /* USER CODE BEGIN RTOS_QUEUES */ /* add queues, ... */ /* USER CODE END RTOS_QUEUES */ @@ -172,6 +204,9 @@ void MX_FREERTOS_Init(void) { /* creation of UsartRevTask */ UsartRevTaskHandle = osThreadNew(StartUsartRevTask, NULL, &UsartRevTask_attributes); + /* creation of proximityTask */ + proximityTaskHandle = osThreadNew(StartProximity, NULL, &proximityTask_attributes); + /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ @@ -223,10 +258,7 @@ void StartTaskUsartSend(void *argument) { /* USER CODE BEGIN StartTaskUsartSend */ /* Infinite loop */ - for(;;) - { - osDelay(1000); - } + task_usart_send(); /* USER CODE END StartTaskUsartSend */ } @@ -260,6 +292,21 @@ void StartUsartRevTask(void *argument) /* USER CODE END StartUsartRevTask */ } +/* USER CODE BEGIN Header_StartProximity */ +/** +* @brief Function implementing the proximityTask thread. +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_StartProximity */ +void StartProximity(void *argument) +{ + /* USER CODE BEGIN StartProximity */ + /* Infinite loop */ + task_proximity(); + /* USER CODE END StartProximity */ +} + /* Private application code --------------------------------------------------*/ /* USER CODE BEGIN Application */ diff --git a/Core/Src/stm32f1xx_it.c b/Core/Src/stm32f1xx_it.c index 648f6bf..2c54534 100644 --- a/Core/Src/stm32f1xx_it.c +++ b/Core/Src/stm32f1xx_it.c @@ -60,6 +60,7 @@ extern CAN_HandleTypeDef hcan; extern DMA_HandleTypeDef hdma_usart1_rx; extern DMA_HandleTypeDef hdma_usart1_tx; extern DMA_HandleTypeDef hdma_usart2_tx; +extern DMA_HandleTypeDef hdma_usart2_rx; extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart2; extern TIM_HandleTypeDef htim2; @@ -194,6 +195,20 @@ void DMA1_Channel5_IRQHandler(void) /* USER CODE END DMA1_Channel5_IRQn 1 */ } +/** + * @brief This function handles DMA1 channel6 global interrupt. + */ +void DMA1_Channel6_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Channel6_IRQn 0 */ + + /* USER CODE END DMA1_Channel6_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_usart2_rx); + /* USER CODE BEGIN DMA1_Channel6_IRQn 1 */ + + /* USER CODE END DMA1_Channel6_IRQn 1 */ +} + /** * @brief This function handles DMA1 channel7 global interrupt. */ diff --git a/Core/Src/usart.c b/Core/Src/usart.c index 659d37f..72bc31f 100644 --- a/Core/Src/usart.c +++ b/Core/Src/usart.c @@ -29,6 +29,7 @@ UART_HandleTypeDef huart2; DMA_HandleTypeDef hdma_usart1_rx; DMA_HandleTypeDef hdma_usart1_tx; DMA_HandleTypeDef hdma_usart2_tx; +DMA_HandleTypeDef hdma_usart2_rx; /* USART1 init function */ @@ -72,7 +73,7 @@ void MX_USART2_UART_Init(void) /* USER CODE END USART2_Init 1 */ huart2.Instance = USART2; - huart2.Init.BaudRate = 115200; + huart2.Init.BaudRate = 921600; huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; @@ -196,8 +197,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle) __HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); + /* USART2_RX Init */ + hdma_usart2_rx.Instance = DMA1_Channel6; + hdma_usart2_rx.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_usart2_rx.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_usart2_rx.Init.MemInc = DMA_MINC_ENABLE; + hdma_usart2_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; + hdma_usart2_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; + hdma_usart2_rx.Init.Mode = DMA_NORMAL; + hdma_usart2_rx.Init.Priority = DMA_PRIORITY_VERY_HIGH; + if (HAL_DMA_Init(&hdma_usart2_rx) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(uartHandle,hdmarx,hdma_usart2_rx); + /* USART2 interrupt Init */ - HAL_NVIC_SetPriority(USART2_IRQn, 8, 0); + HAL_NVIC_SetPriority(USART2_IRQn, 6, 0); HAL_NVIC_EnableIRQ(USART2_IRQn); /* USER CODE BEGIN USART2_MspInit 1 */ @@ -248,6 +265,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle) /* USART2 DMA DeInit */ HAL_DMA_DeInit(uartHandle->hdmatx); + HAL_DMA_DeInit(uartHandle->hdmarx); /* USART2 interrupt Deinit */ HAL_NVIC_DisableIRQ(USART2_IRQn); diff --git a/MDK-ARM/WaterLidar.uvprojx b/MDK-ARM/WaterLidar.uvprojx index fa197e1..b1a52f2 100644 --- a/MDK-ARM/WaterLidar.uvprojx +++ b/MDK-ARM/WaterLidar.uvprojx @@ -189,7 +189,7 @@ 0 0 8 - 1 + 0 0 0 0 @@ -339,7 +339,7 @@ USE_HAL_DRIVER,STM32F103xB - ../Core/Inc; ../Drivers/STM32F1xx_HAL_Driver/Inc; ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM3; ../Drivers/CMSIS/Device/ST/STM32F1xx/Include; ../Drivers/CMSIS/Include; ..\BSP; ..\App; ..\UAVCAN; ..\UAVCAN\libcanard; ..\UAVCAN\libcanard\drivers\stm32 + ../Core/Inc; ../Drivers/STM32F1xx_HAL_Driver/Inc; ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy; ../Middlewares/Third_Party/FreeRTOS/Source/include; ../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2; ../Middlewares/Third_Party/FreeRTOS/Source/portable/RVDS/ARM_CM3; ../Drivers/CMSIS/Device/ST/STM32F1xx/Include; ../Drivers/CMSIS/Include; ..\BSP; ..\App; ..\UAVCAN; ..\UAVCAN\libcanard; ..\UAVCAN\libcanard\drivers\stm32 diff --git a/WaterLidar.ioc b/WaterLidar.ioc index 88b544b..fc42d55 100644 --- a/WaterLidar.ioc +++ b/WaterLidar.ioc @@ -10,7 +10,8 @@ CAN.Prescaler=4 Dma.Request0=USART1_RX Dma.Request1=USART2_TX Dma.Request2=USART1_TX -Dma.RequestsNb=3 +Dma.Request3=USART2_RX +Dma.RequestsNb=4 Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY Dma.USART1_RX.0.Instance=DMA1_Channel5 Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE @@ -29,6 +30,15 @@ Dma.USART1_TX.2.PeriphDataAlignment=DMA_PDATAALIGN_BYTE Dma.USART1_TX.2.PeriphInc=DMA_PINC_DISABLE Dma.USART1_TX.2.Priority=DMA_PRIORITY_MEDIUM Dma.USART1_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority +Dma.USART2_RX.3.Direction=DMA_PERIPH_TO_MEMORY +Dma.USART2_RX.3.Instance=DMA1_Channel6 +Dma.USART2_RX.3.MemDataAlignment=DMA_MDATAALIGN_BYTE +Dma.USART2_RX.3.MemInc=DMA_MINC_ENABLE +Dma.USART2_RX.3.Mode=DMA_NORMAL +Dma.USART2_RX.3.PeriphDataAlignment=DMA_PDATAALIGN_BYTE +Dma.USART2_RX.3.PeriphInc=DMA_PINC_DISABLE +Dma.USART2_RX.3.Priority=DMA_PRIORITY_VERY_HIGH +Dma.USART2_RX.3.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority Dma.USART2_TX.1.Direction=DMA_MEMORY_TO_PERIPH Dma.USART2_TX.1.Instance=DMA1_Channel7 Dma.USART2_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE @@ -40,9 +50,9 @@ Dma.USART2_TX.1.Priority=DMA_PRIORITY_MEDIUM Dma.USART2_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority FREERTOS.FootprintOK=true FREERTOS.IPParameters=Tasks01,Queues01,configTOTAL_HEAP_SIZE,configQUEUE_REGISTRY_SIZE,configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,FootprintOK,Mutexes01 -FREERTOS.Mutexes01=uavcan_send_mutex,Dynamic,NULL -FREERTOS.Queues01=uavcan_rev_queue,10,uavcan_rev_t,0,Dynamic,NULL,NULL;uavcan_send_queue,10,uavcan_send_data_t,0,Dynamic,NULL,NULL;usart_rev_queue,10,usart_data_t,0,Dynamic,NULL,NULL -FREERTOS.Tasks01=DefaultTask,24,256,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;UavcanRevTask,35,256,StartUavcanRevTask,Default,NULL,Dynamic,NULL,NULL;UsartSendTask,18,128,StartTaskUsartSend,Default,NULL,Dynamic,NULL,NULL;UavcanSendTask,36,512,StartUavcanSendTask,Default,NULL,Dynamic,NULL,NULL;UsartRevTask,39,128,StartUsartRevTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.Mutexes01=uavcan_send_mutex,Dynamic,NULL;radar_parse_mutex,Dynamic,NULL +FREERTOS.Queues01=uavcan_rev_queue,10,uavcan_rev_t,0,Dynamic,NULL,NULL;uavcan_send_queue,5,uavcan_send_data_t,0,Dynamic,NULL,NULL;usart_rev_queue,10,usart_data_t,0,Dynamic,NULL,NULL;proximity1_queue,5,proximity_data_t,0,Dynamic,NULL,NULL;proximity2_queue,5,proximity_data_t,0,Dynamic,NULL,NULL +FREERTOS.Tasks01=DefaultTask,24,256,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;UavcanRevTask,35,256,StartUavcanRevTask,Default,NULL,Dynamic,NULL,NULL;UsartSendTask,18,128,StartTaskUsartSend,Default,NULL,Dynamic,NULL,NULL;UavcanSendTask,36,512,StartUavcanSendTask,Default,NULL,Dynamic,NULL,NULL;UsartRevTask,39,256,StartUsartRevTask,Default,NULL,Dynamic,NULL,NULL;proximityTask,36,256,StartProximity,Default,NULL,Dynamic,NULL,NULL FREERTOS.configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY=5 FREERTOS.configQUEUE_REGISTRY_SIZE=40 FREERTOS.configTOTAL_HEAP_SIZE=11264 @@ -82,7 +92,8 @@ MxDb.Version=DB.6.0.30 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.CAN1_RX1_IRQn=true\:7\:0\:true\:false\:true\:true\:true\:true NVIC.DMA1_Channel4_IRQn=true\:9\:0\:true\:false\:true\:true\:false\:true -NVIC.DMA1_Channel5_IRQn=true\:6\:0\:true\:false\:true\:true\:false\:true +NVIC.DMA1_Channel5_IRQn=true\:5\:0\:true\:false\:true\:true\:false\:true +NVIC.DMA1_Channel6_IRQn=true\:6\:0\:true\:false\:true\:true\:false\:true NVIC.DMA1_Channel7_IRQn=true\:10\:0\:true\:false\:true\:true\:false\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.ForceEnableDMAVector=true @@ -100,7 +111,7 @@ NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true NVIC.TimeBase=TIM2_IRQn NVIC.TimeBaseIP=TIM2 NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true -NVIC.USART2_IRQn=true\:8\:0\:true\:false\:true\:true\:true\:true +NVIC.USART2_IRQn=true\:6\:0\:true\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false PA10.Mode=Asynchronous PA10.Signal=USART1_RX @@ -177,7 +188,8 @@ RCC.VCOOutput2Freq_Value=8000000 USART1.BaudRate=921600 USART1.IPParameters=VirtualMode,BaudRate USART1.VirtualMode=VM_ASYNC -USART2.IPParameters=VirtualMode +USART2.BaudRate=921600 +USART2.IPParameters=VirtualMode,BaudRate USART2.VirtualMode=VM_ASYNC VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2