|
在处理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.
|
CubeMX+STM32F407VGT6+配置lwip的httpd功能,工程编译报错
workbench5.3.1生成代码问题
motor control workbench新建自主工程,STM32F405,生成代码,执行pilot,显示检测不到母线电压,电流,一直不转,检测不到极对数
STM32F4以太网 MAC Loopback(MAC回环)的实现
串口空闲+DMA接收GPS信号,空闲中断触发时间不对。
想要一个成熟产品OTG通信的程序。
stm32f407烧录hal库代码不能正常运行,之前是可以的
请教下,使用 filex 文件系统需要支持中文的目录及文件名要怎么配置呀 ?
STM32F429V烧录是无法识别到芯片怎么办?
观测器
微信公众号
手机版
你将等待邮箱0收发状态 改成 等待是否有空邮箱后再做发送。
// 等待是否有空邮箱 while (HAL_CAN_GetTxMailboxesFreeLevel(phcan) == 0) { if ((HAL_GetTick() - tickstart) > MAX_TX_TIMEOUT) { return HAL_ERROR; } }
//有就来发送数据 if (HAL_CAN_AddTxMessage(。。。。。。