Проблема, связанная с программированием микроконтроллера STM32 с шиной CAN - PullRequest
0 голосов
/ 02 июля 2019

Я новичок в микроконтроллерах STM32 и протоколе связи по шине CAN, и я работаю над программированием микроконтроллера STM32F103xx и хочу использовать шину CAN для передачи данных в другой микроконтроллер из того же семейства. Я установил все необходимое, нопри отладке кода он застревает в ожидающей функции передачи и не передает.нет проблем с оборудованием. Проверьте мой код, если я что-то упустил.

Я пробовал и обычный режим, и режим LOOPBACK для обработчика CAN, и они оба не работали

int main(void)
{
    HAL_Init();

    SystemClock_Config();

    uint32_t BUTTON_0;
    uint32_t BUTTON_1;

    uint8_t Data_0[5] = "aaaaa";
    uint8_t Data_1[5] = "ZZZZZ";

    MX_GPIO_Init();
    MX_CAN_Init();

    if(HAL_CAN_Init(&hcan) != HAL_OK ){
        Error_Handler();
    }

    if(HAL_CAN_Start(&hcan) != HAL_OK ){
        Error_Handler();
    }

    while (1)
    {       
        TxHeader.DLC   = 5;
        TxHeader.StdId = 0x65D;
        TxHeader.IDE   = CAN_ID_STD;
        TxHeader.RTR   = CAN_RTR_DATA;

        BUTTON_0 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0);

        BUTTON_1 = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

        if(BUTTON_0 == 0U ){

            if(HAL_CAN_AddTxMessage(&hcan, &TxHeader, Data_0, &TxMailbox) != HAL_OK ){
                Error_Handler();
            }

        }

        if(BUTTON_1 == 0U ){

            if(HAL_CAN_AddTxMessage(&hcan, &TxHeader, Data_1, &TxMailbox) != HAL_OK ){
                Error_Handler();
            }

        }

        while(HAL_CAN_IsTxMessagePending(&hcan, TxMailbox));

        if(BUTTON_0 && BUTTON_1 == 0U ){
            printf("Please Press a Buttom");
        }
    }
}

Я хочу, чтобы данные передавались, но это не

...