打印
[STM32L4]

奇怪,uart4与内部flash操作怎么会冲突

[复制链接]
1369|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
andiwxz|  楼主 | 2018-10-17 10:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好:
       我要实现wifi远程升级功能,因此会用串口控制wifi模块,并且会执行内部flash的擦写。整个工程都是仿照IAP的示例写的,网上很多,就不多说了。第一次测试的时候wifi使用的USART2,无任何问题。等真正制版的时候换成了UART4接口,就出问题了。
     首先UART4本身是没问题的,串口和wifi模块都验证过了,但执行原来的远程升级程序是,先初始化UART4,再执行flash操作,执行到IAP_Init()->IAP_FlashErase()->HAL_FLASH_Unlock()函数就会出现异常,程序跳转到.s文件的这里,死掉

                B       .

                ENDP

                ALIGN
先执行flash操作,再执行UART4,不知道在哪里跳转的,最后还是会死到上边说的那里。这还仅仅是初始化,没有真正运行升级过程呢。换回UASRT2无任何问题,检查好多遍,看不出什么问题。实在搞不懂,来求教一下,。
沙发
shukongqiegeji| | 2018-10-17 11:32 | 只看该作者
检查其软件代码,发现其中对Flash上数据的更新操作分为如下几个步骤:

1. 保存Flash页上的数到RAM中;

2. 擦除Flash页;

3. 修改RAM中的数据;

4. 将RAM中的数据写回Flash页上;

对照STM32的数据手册,查找到相关的数据:

1. 字写入时间 40uS ~ 70uS;

2. 页擦除时间40mS;

检查软件代码,找到对USART的设置:

1. 波特率115200BPS;

2. 帧格式为1 个起始位,8个数据位,2个停止位;

检查软件代码,发现其对USART的接收数据采用中断的方式进行读取。
(**由 数控等离子切割机 http://www.hycsk.com 整理发布,**内容仅供参考)

使用特权

评论回复
板凳
airwill| | 2018-10-17 14:00 | 只看该作者
可能引发了系统异常,最好用仿真器跟踪定位问题

使用特权

评论回复
地板
香水城| | 2018-10-17 16:22 | 只看该作者
1、你注意下你所选芯片的确支持UART4
2、注意启动文件的正确性

使用特权

评论回复
5
xyz549040622| | 2018-10-17 16:33 | 只看该作者
好奇怪的问题,确实没想出问题在哪?建议UART4自己用寄存器操作初始化,避免库的干扰。

使用特权

评论回复
6
纠结的那些年| | 2018-10-17 20:37 | 只看该作者
内部冲突,没有遇到过

使用特权

评论回复
7
dongliushui| | 2018-10-17 21:02 | 只看该作者
这种就直接用串口2吧。反正有个能用的,正所谓:避恶扬善,扬长避短。

使用特权

评论回复
8
andiwxz|  楼主 | 2018-10-18 08:06 | 只看该作者
谢谢大家,找到原因了。是我把串口4的中断函数给写错了,UART4写成了USART4,结果中断找不到函数跑丢了。

使用特权

评论回复
9
tankebing| | 2018-10-18 08:31 | 只看该作者
这种有结果的帖子我喜欢

使用特权

评论回复
10
木木guainv| | 2018-10-22 16:05 | 只看该作者
强行征用了存储空间?

使用特权

评论回复
11
xinpian101| | 2018-10-22 17:36 | 只看该作者
没用过,远程不是WIFI吗

使用特权

评论回复
12
晓伍| | 2018-10-23 11:43 | 只看该作者
这个怎么会冲突呢 是不是碰巧操作一个地址去了啊

使用特权

评论回复
13
wowu| | 2018-10-23 13:01 | 只看该作者
地址误操作吧

使用特权

评论回复
14
Lewisnx| | 2018-10-23 21:29 | 只看该作者
UART4自己用寄存器操作初始化

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

166

主题

258

帖子

3

粉丝