|
在处理CAN分包数据的时候因为我回复的数据可能比较长所以我做了分包处理,代码如下: uint32_t ulBASE_Can_SendBySelf( const typecan_config_t pConfig, uint8_t ucCan_Id, uint8_t pucTx_Data, uint32_t ulLen) { uint32_t ulTrans_MailBox = CAN_TX_MAILBOX0; CAN_TxHeaderTypeDef pTxMsg = ( CAN_TxHeaderTypeDef )mymalloc(sizeof(CAN_TxHeaderTypeDef)); CAN_HandleTypeDef phcan = ( CAN_HandleTypeDef )(pConfig->pcan); typecanid_ext_u2 ExtID = { .ch.srcaddr = pConfig->ucmajor_id, .ch.dstaddr = ucCan_Id, }; uint32_t ulCount = (ulLen / MAX_CAN_GOT_LENTHS) + ( (0 != (ulLen % MAX_CAN_GOT_LENTHS))? 1 : 0 ); //防止len=0不会发送信息 if( 0 == ulCount) { ulCount++; } uint8_t Tx_Data[ 8 * ulCount ]; pTxMsg->RTR = CAN_RTR_DATA; for( uint8_t i = 0; i < ulCount; i++ ) { if( CAN_EXT_ID == pConfig->type) { pTxMsg->IDE = CAN_ID_EXT; pTxMsg->StdId = 0; pTxMsg->ExtId = ExtID.extid; Tx_Data[i 8] = ulCount; Tx_Data[i 8 + 1] = i+1;
} myfree(pTxMsg); return MY_TRUE; } 但是监控数据发现了一个邪门现象:
如图:数据发送了两遍,于是我进入调试模式单步查看。当我将断点打在HAL_CAN_AddTxMessage处时,每运行一次发出一帧的数据,但是在最后一帧的时候执行HAL_CAN_AddTxMessage会一下发送最后一帧加重复7帧.但是查看最后一次进入HAL_CAN_AddTxMessage的长度和数据都是对的,包括最后一次发送完邮箱里也是07070000.
|
F407的SDIO的硬件分流问题
workbench5.3.1生成代码问题
MotorControl Workbench 6.4.1 生成 FOC 项目代码后运行死机。
STLink下载程序失败,Flash部分地址不能写入
求助,局部变量初始化时未赋值会导致什么后果?
TIM11,TIM13失效
局部变量初始化时未赋值会导致什么后果
在 STM32CubeIDE 中使用 RTOS 代理
如何为ram变量分配固定地址
ST TOF问题请教
微信公众号
手机版
你将等待邮箱0收发状态 改成 等待是否有空邮箱后再做发送。
// 等待是否有空邮箱 while (HAL_CAN_GetTxMailboxesFreeLevel(phcan) == 0) { if ((HAL_GetTick() - tickstart) > MAX_TX_TIMEOUT) { return HAL_ERROR; } }
//有就来发送数据 if (HAL_CAN_AddTxMessage(。。。。。。