你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

1

[复制链接]
叮铛 提问时间:2024-7-25 10:32 / 已解决

图片.png
图片.png
图片.png
图片.png
收藏 评论5 发布时间:2024-7-25 10:32

举报

5个回答
xmshao 回答时间:前天 11:17
1、你为什么要对地址02进行写操作?它是中断矢量表的入口位置,存放的特定数据。


2、写flash有一套完成的流程,比方开锁、写、关锁,随随便便写会出错是自然的事情。


不知你为何每次要将邮箱号写入flash,实在要写就挑个其它空置的地方不更好吗?
叮铛 回答时间:前天 11:36

xmshao 发表于 2024-7-25 11:17
1、你为什么要对地址02进行写操作?它是中断矢量表的入口位置,存放的特定数据。</p>
<p>

这不是我对地址0x00000002进行操作,是HAL库函数对这个地址的操作。

xmshao 回答时间:前天 12:12
你是说没有对02地址做写操作,但你后来又说 操作FLASH时,禁用CAN功能;操作FLASH结束,开启CAN功能。


不是很明白。


但你的问题来看,大概率是你在做CAN应用是,某些变量没有初始化就用了,请就这点好好检查确认。
叮铛 回答时间:前天 13:07

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库是个什么东西吧,那又不是我写的

xmshao 回答时间:前天 13:42

叮铛 发表于 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.图片.png

HAL_CAN_AddTxMessage函数中,将邮箱号重映射为一个地址,然后对这个地址(0x00000002)进行数据写入。

图片.png

系统硬件设计的自举模式为主FLASH,如下图所示。

图片.png

每次调用HAL_CAN_AddTxMessage发送函数,都会向0x00000002U的地址中写入一个值,导致FLASH报错,具体错误如下图所示

图片.png

发生FLASH故障后,会导致FLASH操作失败。

解决方法:操作FLASH时,禁用CAN功能;操作FLASH结束,开启CAN功能。


说实在的,如果没有你后来的 两次 补充 我的确很多疑惑和不解,来回讨论了自然才清晰些。后面会就你提及的bug做验证测试。

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版