Browse Source

两路雷达数据发送

master
binsir 4 years ago
parent
commit
207ec8c06c
  1. 108
      App/freertos_action.c
  2. 16
      App/freertos_action.h
  3. 67
      BSP/bsp_common.c
  4. 7
      BSP/bsp_common.h
  5. 8
      BSP/custom_data_def.h
  6. 45
      BSP/insifhtica_QOAR1271.c
  7. 6
      Core/Inc/main.h
  8. 1
      Core/Inc/stm32f1xx_it.h
  9. 5
      Core/Src/dma.c
  10. 59
      Core/Src/freertos.c
  11. 15
      Core/Src/stm32f1xx_it.c
  12. 22
      Core/Src/usart.c
  13. 4
      MDK-ARM/WaterLidar.uvprojx
  14. 26
      WaterLidar.ioc

108
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" #include "freertos_action.h"
void send_uavcan_proximity(uavcan_proximity_t *data);
void task_usart_rev_action(void) void task_usart_rev_action(void)
{ {
usart_data_t data = {0}; usart_data_t data = {0};
// uint8_t data_uart; // uint8_t data_uart;
osStatus_t os_status; osStatus_t os_status;
osDelay(5000);
request_QOAR1271_data();
active_uasrt_irq();
for(;;) for(;;)
{ {
if (usart_rev_queueHandle != NULL) if (usart_rev_queueHandle != NULL)
@ -61,7 +54,7 @@ void task_uavcan_send_action(void)
uavcan_send_data_t data = {0}; uavcan_send_data_t data = {0};
float depth_data=0.0f; float depth_data=0.0f;
osStatus_t status; osStatus_t status;
for(;;) for(;;)
{ {
if (uavcan_send_queueHandle != NULL) if (uavcan_send_queueHandle != NULL)
@ -96,23 +89,78 @@ void task_default_action(void)
osMessageQueuePut(uavcan_send_queueHandle,&send_data,0,10); 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); osDelay(200);
} }
} }
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);
}
}

16
App/freertos_action.h

@ -8,10 +8,26 @@ extern "C"
#include "main.h" #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_usart_rev_action(void);
void task_uavcan_rev_action(void); void task_uavcan_rev_action(void);
void task_uavcan_send_action(void); void task_uavcan_send_action(void);
void task_default_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 #ifdef __cplusplus
} }
#endif #endif

67
BSP/bsp_common.c

@ -1,7 +1,7 @@
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-06-01 17:04:59 * @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 * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \flow-radar-convertor\BSP\bsp_common.c * @FilePath: \flow-radar-convertor\BSP\bsp_common.c
@ -10,6 +10,7 @@
#include "stdarg.h" #include "stdarg.h"
uint8_t hart1_rev_buff[BUFFER_SIZE]; uint8_t hart1_rev_buff[BUFFER_SIZE];
uint8_t hart2_rev_buff[BUFFER_SIZE];
uint32_t last_usart1_rev_tick = 0; uint32_t last_usart1_rev_tick = 0;
extern DMA_HandleTypeDef hdma_usart1_rx; extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx; extern DMA_HandleTypeDef hdma_usart1_tx;
@ -50,33 +51,42 @@ void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan)
//-----------usart funtion------- //-----------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); switch (instance)
// __HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT); {
// HAL_UART_Receive_IT(&huart1, &usart_rev_data, 1); 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) 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); 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) void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{ {
// uint8_t data_length = BUFFER_SIZE - __HAL_DMA_GET_COUNTER(&hdma_usart1_rx); // 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) if (huart->Instance == USART1)
{ {
usart_data_t msg = {0}; usart_data_t msg = {0};
msg.len = Size; msg.len = Size;
msg.usart_instance =1; msg.usart_instance = 1;
if (Size > BUFFER_SIZE) 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)); 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, ...) msg.len = Size;
{ msg.usart_instance = 2;
static uint8_t _dbg_TXBuff[300];
memset(&_dbg_TXBuff[0], 0, sizeof(_dbg_TXBuff)); if (Size > BUFFER_SIZE)
uint32_t length; {
va_list args; Size = BUFFER_SIZE;
va_start(args, format); }
length = vsnprintf((char *)_dbg_TXBuff, sizeof(_dbg_TXBuff) + 1, (char *)format, args); memcpy(&msg.data, &hart2_rev_buff[0], msg.len);
va_end(args);
HAL_UART_Transmit_DMA(&huart2, _dbg_TXBuff, length); 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);
}
} }
//-------------------------------------------- //--------------------------------------------

7
BSP/bsp_common.h

@ -1,7 +1,7 @@
/* /*
* @Author: your name * @Author: your name
* @Date: 2021-06-01 17:05:15 * @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 * @LastEditors: Please set LastEditors
* @Description: In User Settings Edit * @Description: In User Settings Edit
* @FilePath: \flow-radar-convertor\BSP\bsp_common.h * @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 USAR_UART_IDLECallback(UART_HandleTypeDef *huart);
void USER_UART_IRQHandler(UART_HandleTypeDef *huart); void USER_UART_IRQHandler(UART_HandleTypeDef *huart);
void action_do_uasrt1_sigle_data(uint8_t data); void action_do_uasrt1_sigle_data(uint8_t data);
void usart1_IRQ_action(void); 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 action_rev_usart(uint8_t data);
void my_printf(const char *format, ...);
#ifdef __cplusplus #ifdef __cplusplus
} }

8
BSP/custom_data_def.h

@ -12,4 +12,12 @@ typedef struct
uint8_t data[BUFFER_SIZE]; uint8_t data[BUFFER_SIZE];
} usart_data_t; } usart_data_t;
typedef struct
{
uint16_t d0;
uint16_t d_left;
uint16_t d_right;
}proximity_data_t;
#endif /* CUSTOM_DATA_DEF_H */ #endif /* CUSTOM_DATA_DEF_H */

45
BSP/insifhtica_QOAR1271.c

@ -6,6 +6,7 @@ uint16_t ar1271_rev_flag = 0;
void parse_ar1271_data(usart_data_t *usart_data) void parse_ar1271_data(usart_data_t *usart_data)
{ {
osSemaphoreAcquire(radar_parse_mutexHandle,30);
uint8_t buffer_count; uint8_t buffer_count;
uint8_t buffer[LIDAR_360_SIZE] = {0}; uint8_t buffer[LIDAR_360_SIZE] = {0};
uint8_t message_count; uint8_t message_count;
@ -32,27 +33,29 @@ void parse_ar1271_data(usart_data_t *usart_data)
// check if message has right CRC // check if message has right CRC
if (crc_crc8(buffer, 19) == buffer[19]) 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) if (usart_data->usart_instance == 1)
{ {
uavcan_send_data_t msg = {0}; if (proximity1_queueHandle != NULL)
if (uavcan_send_queueHandle != NULL)
{ {
msg.id = ZRZK_EQUIPMENT_RANGE_SENSOR_PROXIMITY_ID; osMessageQueuePut(proximity1_queueHandle, &proximity_data, 0, 10);
}
uavcan_proximity_t data = {0}; }
data.sensor_type = SENSOR_TYPE_RADAR; else if (usart_data->usart_instance == 2)
{
data.d0 = uint16_value(buffer[2], buffer[3]); if (proximity2_queueHandle != NULL)
data.d45 = uint16_value(buffer[4], buffer[5]); {
data.d315 = uint16_value(buffer[16], buffer[17]); osMessageQueuePut(proximity2_queueHandle, &proximity_data, 0, 10);
memcpy(&msg.content.proximity, &data, sizeof(uavcan_proximity_t));
osMessageQueuePut(uavcan_send_queueHandle, &msg, NULL, 10U);
} }
} }
//TODO action send_data;
} }
} }
} }
osSemaphoreRelease(radar_parse_mutexHandle);
} }
static const uint8_t crc8_table[] = { 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}; uint8_t send_data4[5] = {0x00, 0x52, 0x03, 0x03, 0xC4};
HAL_UART_Transmit_DMA(&huart1, send_data1, 4); 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); 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); 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); HAL_UART_Transmit_DMA(&huart1, send_data4, 5);
osDelay(1000); osDelay(500);
HAL_UART_Transmit_DMA(&huart2, send_data4, 5);
osDelay(500);
} }

6
Core/Inc/main.h

@ -45,11 +45,7 @@ extern "C" {
/* Exported types ------------------------------------------------------------*/ /* Exported types ------------------------------------------------------------*/
/* USER CODE BEGIN ET */ /* 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 */ /* USER CODE END ET */
/* Exported constants --------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/

1
Core/Inc/stm32f1xx_it.h

@ -55,6 +55,7 @@ void UsageFault_Handler(void);
void DebugMon_Handler(void); void DebugMon_Handler(void);
void DMA1_Channel4_IRQHandler(void); void DMA1_Channel4_IRQHandler(void);
void DMA1_Channel5_IRQHandler(void); void DMA1_Channel5_IRQHandler(void);
void DMA1_Channel6_IRQHandler(void);
void DMA1_Channel7_IRQHandler(void); void DMA1_Channel7_IRQHandler(void);
void CAN1_RX1_IRQHandler(void); void CAN1_RX1_IRQHandler(void);
void TIM2_IRQHandler(void); void TIM2_IRQHandler(void);

5
Core/Src/dma.c

@ -46,8 +46,11 @@ void MX_DMA_Init(void)
HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 9, 0); HAL_NVIC_SetPriority(DMA1_Channel4_IRQn, 9, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn); HAL_NVIC_EnableIRQ(DMA1_Channel4_IRQn);
/* DMA1_Channel5_IRQn interrupt configuration */ /* 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); 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 */ /* DMA1_Channel7_IRQn interrupt configuration */
HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 10, 0); HAL_NVIC_SetPriority(DMA1_Channel7_IRQn, 10, 0);
HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn); HAL_NVIC_EnableIRQ(DMA1_Channel7_IRQn);

59
Core/Src/freertos.c

@ -80,9 +80,16 @@ const osThreadAttr_t UavcanSendTask_attributes = {
osThreadId_t UsartRevTaskHandle; osThreadId_t UsartRevTaskHandle;
const osThreadAttr_t UsartRevTask_attributes = { const osThreadAttr_t UsartRevTask_attributes = {
.name = "UsartRevTask", .name = "UsartRevTask",
.stack_size = 128 * 4, .stack_size = 256 * 4,
.priority = (osPriority_t) osPriorityAboveNormal7, .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 */ /* Definitions for uavcan_rev_queue */
osMessageQueueId_t uavcan_rev_queueHandle; osMessageQueueId_t uavcan_rev_queueHandle;
const osMessageQueueAttr_t uavcan_rev_queue_attributes = { const osMessageQueueAttr_t uavcan_rev_queue_attributes = {
@ -98,11 +105,26 @@ osMessageQueueId_t usart_rev_queueHandle;
const osMessageQueueAttr_t usart_rev_queue_attributes = { const osMessageQueueAttr_t usart_rev_queue_attributes = {
.name = "usart_rev_queue" .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 */ /* Definitions for uavcan_send_mutex */
osMutexId_t uavcan_send_mutexHandle; osMutexId_t uavcan_send_mutexHandle;
const osMutexAttr_t uavcan_send_mutex_attributes = { const osMutexAttr_t uavcan_send_mutex_attributes = {
.name = "uavcan_send_mutex" .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 -----------------------------------------------*/ /* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */ /* USER CODE BEGIN FunctionPrototypes */
@ -114,6 +136,7 @@ void StartUavcanRevTask(void *argument);
void StartTaskUsartSend(void *argument); void StartTaskUsartSend(void *argument);
void StartUavcanSendTask(void *argument); void StartUavcanSendTask(void *argument);
void StartUsartRevTask(void *argument); void StartUsartRevTask(void *argument);
void StartProximity(void *argument);
void MX_FREERTOS_Init(void); /* (MISRA C 2004 rule 8.1) */ 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 */ /* creation of uavcan_send_mutex */
uavcan_send_mutexHandle = osMutexNew(&uavcan_send_mutex_attributes); 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 */ /* USER CODE BEGIN RTOS_MUTEX */
/* add mutexes, ... */ /* add mutexes, ... */
/* USER CODE END RTOS_MUTEX */ /* 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); uavcan_rev_queueHandle = osMessageQueueNew (10, sizeof(uavcan_rev_t), &uavcan_rev_queue_attributes);
/* creation of uavcan_send_queue */ /* 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 */ /* creation of usart_rev_queue */
usart_rev_queueHandle = osMessageQueueNew (10, sizeof(usart_data_t), &usart_rev_queue_attributes); 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 */ /* USER CODE BEGIN RTOS_QUEUES */
/* add queues, ... */ /* add queues, ... */
/* USER CODE END RTOS_QUEUES */ /* USER CODE END RTOS_QUEUES */
@ -172,6 +204,9 @@ void MX_FREERTOS_Init(void) {
/* creation of UsartRevTask */ /* creation of UsartRevTask */
UsartRevTaskHandle = osThreadNew(StartUsartRevTask, NULL, &UsartRevTask_attributes); UsartRevTaskHandle = osThreadNew(StartUsartRevTask, NULL, &UsartRevTask_attributes);
/* creation of proximityTask */
proximityTaskHandle = osThreadNew(StartProximity, NULL, &proximityTask_attributes);
/* USER CODE BEGIN RTOS_THREADS */ /* USER CODE BEGIN RTOS_THREADS */
/* add threads, ... */ /* add threads, ... */
/* USER CODE END RTOS_THREADS */ /* USER CODE END RTOS_THREADS */
@ -223,10 +258,7 @@ void StartTaskUsartSend(void *argument)
{ {
/* USER CODE BEGIN StartTaskUsartSend */ /* USER CODE BEGIN StartTaskUsartSend */
/* Infinite loop */ /* Infinite loop */
for(;;) task_usart_send();
{
osDelay(1000);
}
/* USER CODE END StartTaskUsartSend */ /* USER CODE END StartTaskUsartSend */
} }
@ -260,6 +292,21 @@ void StartUsartRevTask(void *argument)
/* USER CODE END StartUsartRevTask */ /* 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 --------------------------------------------------*/ /* Private application code --------------------------------------------------*/
/* USER CODE BEGIN Application */ /* USER CODE BEGIN Application */

15
Core/Src/stm32f1xx_it.c

@ -60,6 +60,7 @@ extern CAN_HandleTypeDef hcan;
extern DMA_HandleTypeDef hdma_usart1_rx; extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx; extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_tx; extern DMA_HandleTypeDef hdma_usart2_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
extern UART_HandleTypeDef huart1; extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2; extern UART_HandleTypeDef huart2;
extern TIM_HandleTypeDef htim2; extern TIM_HandleTypeDef htim2;
@ -194,6 +195,20 @@ void DMA1_Channel5_IRQHandler(void)
/* USER CODE END DMA1_Channel5_IRQn 1 */ /* 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. * @brief This function handles DMA1 channel7 global interrupt.
*/ */

22
Core/Src/usart.c

@ -29,6 +29,7 @@ UART_HandleTypeDef huart2;
DMA_HandleTypeDef hdma_usart1_rx; DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx; DMA_HandleTypeDef hdma_usart1_tx;
DMA_HandleTypeDef hdma_usart2_tx; DMA_HandleTypeDef hdma_usart2_tx;
DMA_HandleTypeDef hdma_usart2_rx;
/* USART1 init function */ /* USART1 init function */
@ -72,7 +73,7 @@ void MX_USART2_UART_Init(void)
/* USER CODE END USART2_Init 1 */ /* USER CODE END USART2_Init 1 */
huart2.Instance = USART2; huart2.Instance = USART2;
huart2.Init.BaudRate = 115200; huart2.Init.BaudRate = 921600;
huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.WordLength = UART_WORDLENGTH_8B;
huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.StopBits = UART_STOPBITS_1;
huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Parity = UART_PARITY_NONE;
@ -196,8 +197,24 @@ void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
__HAL_LINKDMA(uartHandle,hdmatx,hdma_usart2_tx); __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 */ /* USART2 interrupt Init */
HAL_NVIC_SetPriority(USART2_IRQn, 8, 0); HAL_NVIC_SetPriority(USART2_IRQn, 6, 0);
HAL_NVIC_EnableIRQ(USART2_IRQn); HAL_NVIC_EnableIRQ(USART2_IRQn);
/* USER CODE BEGIN USART2_MspInit 1 */ /* USER CODE BEGIN USART2_MspInit 1 */
@ -248,6 +265,7 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
/* USART2 DMA DeInit */ /* USART2 DMA DeInit */
HAL_DMA_DeInit(uartHandle->hdmatx); HAL_DMA_DeInit(uartHandle->hdmatx);
HAL_DMA_DeInit(uartHandle->hdmarx);
/* USART2 interrupt Deinit */ /* USART2 interrupt Deinit */
HAL_NVIC_DisableIRQ(USART2_IRQn); HAL_NVIC_DisableIRQ(USART2_IRQn);

4
MDK-ARM/WaterLidar.uvprojx

@ -189,7 +189,7 @@
<hadIRAM2>0</hadIRAM2> <hadIRAM2>0</hadIRAM2>
<hadIROM2>0</hadIROM2> <hadIROM2>0</hadIROM2>
<StupSel>8</StupSel> <StupSel>8</StupSel>
<useUlib>1</useUlib> <useUlib>0</useUlib>
<EndSel>0</EndSel> <EndSel>0</EndSel>
<uLtcg>0</uLtcg> <uLtcg>0</uLtcg>
<nSecure>0</nSecure> <nSecure>0</nSecure>
@ -339,7 +339,7 @@
<MiscControls></MiscControls> <MiscControls></MiscControls>
<Define>USE_HAL_DRIVER,STM32F103xB</Define> <Define>USE_HAL_DRIVER,STM32F103xB</Define>
<Undefine></Undefine> <Undefine></Undefine>
<IncludePath>../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</IncludePath> <IncludePath>../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</IncludePath>
</VariousControls> </VariousControls>
</Cads> </Cads>
<Aads> <Aads>

26
WaterLidar.ioc

@ -10,7 +10,8 @@ CAN.Prescaler=4
Dma.Request0=USART1_RX Dma.Request0=USART1_RX
Dma.Request1=USART2_TX Dma.Request1=USART2_TX
Dma.Request2=USART1_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.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART1_RX.0.Instance=DMA1_Channel5 Dma.USART1_RX.0.Instance=DMA1_Channel5
Dma.USART1_RX.0.MemDataAlignment=DMA_MDATAALIGN_BYTE 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.PeriphInc=DMA_PINC_DISABLE
Dma.USART1_TX.2.Priority=DMA_PRIORITY_MEDIUM Dma.USART1_TX.2.Priority=DMA_PRIORITY_MEDIUM
Dma.USART1_TX.2.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority 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.Direction=DMA_MEMORY_TO_PERIPH
Dma.USART2_TX.1.Instance=DMA1_Channel7 Dma.USART2_TX.1.Instance=DMA1_Channel7
Dma.USART2_TX.1.MemDataAlignment=DMA_MDATAALIGN_BYTE 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 Dma.USART2_TX.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority
FREERTOS.FootprintOK=true FREERTOS.FootprintOK=true
FREERTOS.IPParameters=Tasks01,Queues01,configTOTAL_HEAP_SIZE,configQUEUE_REGISTRY_SIZE,configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,FootprintOK,Mutexes01 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.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,10,uavcan_send_data_t,0,Dynamic,NULL,NULL;usart_rev_queue,10,usart_data_t,0,Dynamic,NULL,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,128,StartUsartRevTask,Default,NULL,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.configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY=5
FREERTOS.configQUEUE_REGISTRY_SIZE=40 FREERTOS.configQUEUE_REGISTRY_SIZE=40
FREERTOS.configTOTAL_HEAP_SIZE=11264 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.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.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_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.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.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
NVIC.ForceEnableDMAVector=true NVIC.ForceEnableDMAVector=true
@ -100,7 +111,7 @@ NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:true
NVIC.TimeBase=TIM2_IRQn NVIC.TimeBase=TIM2_IRQn
NVIC.TimeBaseIP=TIM2 NVIC.TimeBaseIP=TIM2
NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true 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 NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
PA10.Mode=Asynchronous PA10.Mode=Asynchronous
PA10.Signal=USART1_RX PA10.Signal=USART1_RX
@ -177,7 +188,8 @@ RCC.VCOOutput2Freq_Value=8000000
USART1.BaudRate=921600 USART1.BaudRate=921600
USART1.IPParameters=VirtualMode,BaudRate USART1.IPParameters=VirtualMode,BaudRate
USART1.VirtualMode=VM_ASYNC USART1.VirtualMode=VM_ASYNC
USART2.IPParameters=VirtualMode USART2.BaudRate=921600
USART2.IPParameters=VirtualMode,BaudRate
USART2.VirtualMode=VM_ASYNC USART2.VirtualMode=VM_ASYNC
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2 VP_FREERTOS_VS_CMSIS_V2.Signal=FREERTOS_VS_CMSIS_V2

Loading…
Cancel
Save