你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
统
举报
xmshao 发表于 2024-7-25 11:17 1、你为什么要对地址02进行写操作?它是中断矢量表的入口位置,存放的特定数据。</p> <p>
这不是我对地址0x00000002进行操作,是HAL库函数对这个地址的操作。
xmshao 发表于 2024-7-25 12:12 你是说没有对02地址做写操作,但你后来又说 操作FLASH时,禁用CAN功能;操作FLASH结束,开启CAN功能。</p> <p>
我用cubeMX配置的系统,使用了HAL库。在使用CAN的时候调用了HAL库的发送函数,HAL库的can发送函数中,自己写了0x00000002的地址。
我的操作是,写0x08000000~0x087FFFFF范围内的FLASH,我操作这部分的FLASH的时候会禁止CAN的功能。
写这个的意思是,HAL库本身的CAN是有Bug的,使用HAL库时候,如果同时使用CAN和操作FLASH时需要注意。
最后,麻烦你看清楚后再说,好歹得知道HAL库是个什么东西吧,那又不是我写的
叮铛 发表于 2024-7-25 13:07 我用cubeMX配置的系统,使用了HAL库。在使用CAN的时候调用了HAL库的发送函数,HAL库的can发送函数中 ...
哦 不好意思~!的确没怎么看明白你描述的,你之前的描述是这样的:
【问题详情】[md]芯片型号为:STM32F407VET6。使用CubeMX配置并生成HAL库。
在工程中,配置了CAN1和CAN2。并且调用了函数HAL_CAN_AddTxMessage(&hcan2, &xCAN2.TxHead, xCAN2.TxdBuf, (uint32_t *)CAN_TX_MAILBOX1);该函数的第4个形参是邮箱号,值为2.
HAL_CAN_AddTxMessage(&hcan2, &xCAN2.TxHead, xCAN2.TxdBuf, (uint32_t *)CAN_TX_MAILBOX1);
在HAL_CAN_AddTxMessage函数中,将邮箱号重映射为一个地址,然后对这个地址(0x00000002)进行数据写入。
HAL_CAN_AddTxMessage
系统硬件设计的自举模式为主FLASH,如下图所示。
每次调用HAL_CAN_AddTxMessage发送函数,都会向0x00000002U的地址中写入一个值,导致FLASH报错,具体错误如下图所示
0x00000002U
发生FLASH故障后,会导致FLASH操作失败。
解决方法:操作FLASH时,禁用CAN功能;操作FLASH结束,开启CAN功能。
说实在的,如果没有你后来的 两次 补充 我的确很多疑惑和不解,来回讨论了自然才清晰些。后面会就你提及的bug做验证测试。
夜深了,睡不着
晚上好啊,兄弟们
第三季度啦,兄弟们
STM32G070RBT6TR ADC采集定点电压误差较大,有没有优化方向
LIS2MDL X轴数据读取问题
无法完全整片擦除 STM32H Nucleo
周末卡点打卡
使用touchgfx控件modalWindow,显示会有条纹
stm32cubemx和数据手册对不上
STM32G0b1 USB device cdc显示设备描述符请求失败
2、写flash有一套完成的流程,比方开锁、写、关锁,随随便便写会出错是自然的事情。
不知你为何每次要将邮箱号写入flash,实在要写就挑个其它空置的地方不更好吗?
这不是我对地址0x00000002进行操作,是HAL库函数对这个地址的操作。
不是很明白。
但你的问题来看,大概率是你在做CAN应用是,某些变量没有初始化就用了,请就这点好好检查确认。
我用cubeMX配置的系统,使用了HAL库。在使用CAN的时候调用了HAL库的发送函数,HAL库的can发送函数中,自己写了0x00000002的地址。
我的操作是,写0x08000000~0x087FFFFF范围内的FLASH,我操作这部分的FLASH的时候会禁止CAN的功能。
写这个的意思是,HAL库本身的CAN是有Bug的,使用HAL库时候,如果同时使用CAN和操作FLASH时需要注意。
最后,麻烦你看清楚后再说,好歹得知道HAL库是个什么东西吧,那又不是我写的
哦 不好意思~!的确没怎么看明白你描述的,你之前的描述是这样的:
【问题详情】[md]芯片型号为:STM32F407VET6。使用CubeMX配置并生成HAL库。
在工程中,配置了CAN1和CAN2。并且调用了函数
HAL_CAN_AddTxMessage(&hcan2, &xCAN2.TxHead, xCAN2.TxdBuf, (uint32_t *)CAN_TX_MAILBOX1);
该函数的第4个形参是邮箱号,值为2.在
HAL_CAN_AddTxMessage
函数中,将邮箱号重映射为一个地址,然后对这个地址(0x00000002)进行数据写入。系统硬件设计的自举模式为主FLASH,如下图所示。
每次调用
HAL_CAN_AddTxMessage
发送函数,都会向0x00000002U
的地址中写入一个值,导致FLASH报错,具体错误如下图所示发生FLASH故障后,会导致FLASH操作失败。
解决方法:操作FLASH时,禁用CAN功能;操作FLASH结束,开启CAN功能。
说实在的,如果没有你后来的 两次 补充 我的确很多疑惑和不解,来回讨论了自然才清晰些。后面会就你提及的bug做验证测试。