你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32:HAL_CAN_AddTxMessage()函数,最后一个参数即发送邮箱的传参问题!

[复制链接]
hulkya 提问时间:2024-12-1 16:43 / 未解决

问题:

关于STM32 CAN通信 发送函数 HAL_CAN_AddTxMessage()的最后一个参数填0和定义一个变量取地址的问题,如果直接传0,我实验发现 STM32F103C8T6 会出现卡死的情况,进入了硬件中断,而对于STM32F429IGT6则不会卡死,能够正常运行;如果定义一个uint32_t类型的变量,取变量的地址传参进去,两个片子都能够正常运行,目前搞不懂什么原因,对于直接传0进去,我知道这是不规范的,相当于传入了一个空指针进去,而跳到函数内部发现,HAL_CAN_AddTxMessage()函数还对此指针进行了解引用,这肯定是非法,但是同样的情况对于F429IGT6却能正常运行,这令我非常不解。望请大佬解答!

下面是我自己写的CAN2发送函数:

  1. uint32_t mailbox = 10;
    
    void CAN2_UsrSendTest(void)
    {
     CAN_TxHeaderTypeDef TxHead;
     TxHead.IDE = CAN_ID_STD;
     TxHead.StdId = 0x10;
     TxHead.RTR = CAN_RTR_DATA;
     TxHead.DLC = 8;
    
     uint8_t payload[8];
    
     if(HAL_CAN_AddTxMessage(&hcan2, &TxHead, payload, 0) != HAL_OK)
     {
         Error_Handler();
         }
    }

源码中HAL_CAN_AddTxMessage()函数对pTxMailbox进行了解引用

image.png

收藏 评论1 发布时间:2024-12-1 16:43

举报

1个回答
xmshao 回答时间:前天 10:57
这里的第4个参数应该是给个合法的有效地址,给个0,相当于给个空指针。


空指针的指向是不确定的,出异常属正常回应,没出异常问题也不代表可以这么用。


具体到你现在的应用,即使没有触发芯片的硬错,但也无法得到发送邮箱的编号。


个人认为不必过于纠结,就像闯红灯被罚正常,偶尔侥幸没被罚不代表合法,更不代表下次不被罚。

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版