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