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