|
在处理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为什么初始界面没有ai选项,进去之后也没有addnetwork?
ST Motor Control Workbench卡在如图界面,生成不了代码
SDIO 标致位 没有变
程序卡死在USB_EPStartXfer这里
SDIO 初始化 死在 __HAL_RCC_SDIO_CLK_ENABLE语句上
我现在使用STM32F446ZET6芯片,外挂了16m的片外SDRAM。想把程序在SDRAM中运行,一直尝试没有成功,希望得到帮助,是否有相关的例子或参考的文档
MotorControl Workbench 6.4.1 生成 FOC 项目代码后运行死机。
STM32F405rgt6 I2S DMA输入会造成卡死,这个芯片有BUG
USBX在F407上创建CDC不能正常使用
STM32F427ZGTx内部RTC秒及亚秒同步问题
微信公众号
手机版
你将等待邮箱0收发状态 改成 等待是否有空邮箱后再做发送。
// 等待是否有空邮箱 while (HAL_CAN_GetTxMailboxesFreeLevel(phcan) == 0) { if ((HAL_GetTick() - tickstart) > MAX_TX_TIMEOUT) { return HAL_ERROR; } }
//有就来发送数据 if (HAL_CAN_AddTxMessage(。。。。。。