|
在处理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.
|
STM32F405rgt6 I2S DMA输入会造成卡死,这个芯片有BUG
USBX在F407上创建CDC不能正常使用
STM32F427ZGTx内部RTC秒及亚秒同步问题
有没有STM32F405RG参考设计
LSM6DS3TR-C静止情况下使用MotionFX固件算出的欧拉角周期性异常跳动
全球论坛无法登录
STM32F429使用FMC接口扩展SDRAM
用STM32F407做U盘拖拽升级,目前BootLoader和实现U盘,后面就不知道怎么操作了。
STM32上电后会多次进入所有打开的定时器回调函数中,如何避免这样的情况?
STM32F427VIT6这款芯片所支持的摄像头模组的列表有不?
微信公众号
手机版
你将等待邮箱0收发状态 改成 等待是否有空邮箱后再做发送。
// 等待是否有空邮箱 while (HAL_CAN_GetTxMailboxesFreeLevel(phcan) == 0) { if ((HAL_GetTick() - tickstart) > MAX_TX_TIMEOUT) { return HAL_ERROR; } }
//有就来发送数据 if (HAL_CAN_AddTxMessage(。。。。。。