CAN总线如何与STM32中的HAL一起使用?

时间:2019-07-03 20:57:01

标签: stm32 can-bus hal

我正在尝试使用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%)。

如何使其运作良好?

1 个答案:

答案 0 :(得分:0)

请确保在每次发送之前清除该标志,以免发送不必要的信息。