STM32F4_HAL_CAN总线注意事项

如果CAN总线没有连接其他设备,即HL是悬空状态,则发送会失败,下图的Error_Handler需要屏蔽,否则会造成系统卡顿,或影响其他功能模块的使用

/*
*********************************************************************************************************
*	函 数 名: can1_SendPacket
*	功能说明: 发送一包数据
*	形    参:_DataBuf 数据缓冲区,_Len 数据长度 0 - 8字节
*	返 回 值: 无
*********************************************************************************************************
*/
void can1_SendPacket(uint8_t* _DataBuf, uint32_t _Len)
{
#if CAN1_EN
    CAN1TxHeader.StdId = 0x111;
    CAN1TxHeader.ExtId = 0x1111;
    CAN1TxHeader.RTR = CAN_RTR_DATA; /* 数据帧 */
    CAN1TxHeader.IDE = CAN_ID_STD; /* 标准ID */
    CAN1TxHeader.DLC = _Len;
    CAN1TxHeader.TransmitGlobalTime = DISABLE;

    /* 启动发送 */
    if (HAL_CAN_AddTxMessage(&Can1Handle, &CAN1TxHeader, _DataBuf, &CAN1TxMailbox) != HAL_OK) {
        // Error_Handler(__FILE__, __LINE__);
    }
#endif
}

/*
*********************************************************************************************************
*	函 数 名: can2_SendPacket
*	功能说明: 发送一包数据
*	形    参:_DataBuf 数据缓冲区,_Len 数据长度 0 - 8字节
*	返 回 值: 无
*********************************************************************************************************
*/
void can2_SendPacket(uint8_t* _DataBuf, uint32_t _Len)
{
#if CAN2_EN
    CAN2TxHeader.StdId = 0x222;
    CAN2TxHeader.ExtId = 0x2222;
    CAN2TxHeader.RTR = CAN_RTR_DATA;
    CAN2TxHeader.IDE = CAN_ID_STD;
    CAN2TxHeader.DLC = _Len;
    CAN2TxHeader.TransmitGlobalTime = DISABLE;

    /* 启动发送 */
    if (HAL_CAN_AddTxMessage(&Can2Handle, &CAN2TxHeader, _DataBuf, &CAN2TxMailbox) != HAL_OK) {
        // Error_Handler(__FILE__, __LINE__);
    }
#endif
}

 

posted @   realiot  阅读(101)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示