Как шина CAN работает с HAL в STM32? - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь использовать CAN STM32F3, но у меня возникли некоторые проблемы.Я прочитал несколько уроков и следовал инструкциям, но думаю, что делаю некоторые ошибки.Приведенный ниже код работает как задача freeRTOS и должен работать как опрос по каналу 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 */
}

Я просто хочу прочитать данные Rx, отправленные с Arduino, который работает как другой узел CAN.Цикл arduino имеет счетчик, который увеличивается на 1 каждые 200 мс и отправляется в STM через CAN.

Я хочу получить в UART2 идентификатор и сообщение от приемника CAN (STM32).Я сравниваю эти данные с данными отправителя, получаю эти данные из серийного Arduino и проверяю частоту обращений (надеюсь, 100%).

Как сделать так, чтобы она работала хорошо?

1 Ответ

0 голосов
/ 12 июля 2019

Обязательно снимайте флажок перед каждой передачей, чтобы не отправлять ненужную информацию.

...