我正在尝试使用STM32F3的CAN,但遇到了一些麻烦。我阅读了一些教程并按照说明进行了操作,但是我认为我在犯一些错误。下面的代码作为freeRTOS任务运行,并且应作为对CAN Rx的轮询工作。
#include "FreeRTOS.h"
#include "cmsis_os.h"
#include "stdio.h"
#include "stm32f3xx_hal_can.h"
#include "can.h"
#include "usart.h"
void canRx(void const *argument)
{
/* USER CODE BEGIN canRx */
/* Infinite loop */
uint8_t receivedMessage[8];
CAN_RxHeaderTypeDef RxHeader;
HAL_CAN_Start(&hcan);
for (;;)
{
if(HAL_CAN_GetRxFifoFillLevel(&hcan, CAN_RX_FIFO0) != 0)
{
HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, receivedMessage);
}
HAL_UART_Transmit(&huart2, receivedMessage, 8, portMAX_DELAY);
osDelay(200);
}
/* USER CODE END canRx */
}
我只想读取从作为另一个CAN节点的arduino发送的Rx数据。 arduino循环具有一个计数器,该计数器每200ms递增1,并通过CAN发送到STM。
我想在UART2中从CAN接收器(STM32)接收ID和消息。我将这些数据与发送方的数据进行比较,然后从Arduino串行中获取数据,并检查命中率(我希望100%)。
如何使其运作良好?
答案 0 :(得分:0)
请确保在每次发送之前清除该标志,以免发送不必要的信息。