这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【转载】STM32F4使用HAL库双CAN通信出现错误Waitinitialis

共3条 1/1 1 跳转至

【转载】STM32F4使用HAL库双CAN通信出现错误Waitinitialisationacknowledge--from三叶

工程师
2024-02-22 01:42:51     打赏

STM32F4使用HAL库双CAN通信出现错误Wait initialisation acknowledge解决办法

经过不断测试,发现要提前将CAN1和CAN2的引脚状态配置好才可以正常初始化:

/*

*********************************************************************************************************

*   函 数 名: HAL_CAN_MspInit

*   功能说明: 配置CAN gpio

*   形    参: hcan

*   返 回 值: 无

*********************************************************************************************************

*/

void HAL_CAN_MspInit(CAN_HandleTypeDef *hcan)

{

    GPIO_InitTypeDef   GPIO_InitStruct;

 

    /*##-1- Enable peripherals and GPIO Clocks #################################*/

    /* CAN1 Periph clock enable */

    __HAL_RCC_CAN1_CLK_ENABLE();

    __HAL_RCC_CAN2_CLK_ENABLE();

    /* Enable GPIO clock ****************************************/

    CAN1_TX_GPIO_CLK_ENABLE();

    CAN1_RX_GPIO_CLK_ENABLE();

 

    /*##-2- Configure peripheral GPIO ##########################################*/

    /* CAN1 TX GPIO pin configuration */

    GPIO_InitStruct.Pin = CAN1_TX_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Alternate =  CAN1_TX_AF;

 

    HAL_GPIO_Init(CAN1_TX_GPIO_PORT, &GPIO_InitStruct);

 

    /* CAN1 RX GPIO pin configuration */

    GPIO_InitStruct.Pin = CAN1_RX_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Alternate =  CAN1_RX_AF;

 

    HAL_GPIO_Init(CAN1_RX_GPIO_PORT, &GPIO_InitStruct);

 

    /*##-3- Configure the NVIC #################################################*/

    /* NVIC configuration for CAN1 Reception complete interrupt */

    HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 1, 0);

    HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);

     

    HAL_NVIC_SetPriority(CAN1_TX_IRQn, 1, 0);

    HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);

 

    /*##-1- Enable peripherals and GPIO Clocks #################################*/

    /* CAN1 Periph clock enable */

    __HAL_RCC_CAN1_CLK_ENABLE();

    __HAL_RCC_CAN2_CLK_ENABLE();

    /* Enable GPIO clock ****************************************/

    CAN2_TX_GPIO_CLK_ENABLE();

    CAN2_RX_GPIO_CLK_ENABLE();

 

    /*##-2- Configure peripheral GPIO ##########################################*/

    /* CAN1 TX GPIO pin configuration */

    GPIO_InitStruct.Pin = CAN2_TX_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Alternate =  CAN2_TX_AF;

 

    HAL_GPIO_Init(CAN2_TX_GPIO_PORT, &GPIO_InitStruct);

 

    /* CAN1 RX GPIO pin configuration */

    GPIO_InitStruct.Pin = CAN2_RX_PIN;

    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

    GPIO_InitStruct.Pull = GPIO_PULLUP;

    GPIO_InitStruct.Alternate =  CAN2_RX_AF;

 

    HAL_GPIO_Init(CAN2_RX_GPIO_PORT, &GPIO_InitStruct);

 

    /*##-3- Configure the NVIC #################################################*/

    /* NVIC configuration for CAN1 Reception complete interrupt */

    HAL_NVIC_SetPriority(CAN2_RX1_IRQn, 1, 0);

    HAL_NVIC_EnableIRQ(CAN2_RX1_IRQn);

     

    HAL_NVIC_SetPriority(CAN2_TX_IRQn, 1, 0);

    HAL_NVIC_EnableIRQ(CAN2_TX_IRQn);

}


来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。


高工
2024-02-22 08:42:09     打赏
2楼

谢谢分享


高工
2024-02-22 09:32:38     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]