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

STM32F4 BootLoader奇葩问题

[复制链接]
rcwind 提问时间:2018-4-22 19:48 /
本帖最后由 rcwind_3027982 于 2018-4-22 19:59 编辑

我们现在开发的一个产品需要使用BootLoader功能做程序跳转用,产品代码使用的stm32cube mx配置的,芯片是stm32f407vet6,但是发现一些问题:
1.BootLoader使用usart2的dma发送功能打印日志用,如果程序在跳转前不__set_PRIMASK(1)关全局中断,APP里初始化usart2(使用dma发送接收功能)的时候会死掉,注释usart2的初始化就正常了,看起来像是死在了dma配置这里;
以下是BootLoader跳转代码:

以下是APP的初始化代码:

jlink跟踪调试call stack:

2。基于第一个问题,跳转前__set_PRIMASK(1)关全局中断,在APP里__set_PRIMASK(0)开全局中断,APP跑不起来,也是死在了usart2初始化里,这个开全局中断位置有点讲究,放到usart2初始化后面可以跑起来。
3.使用BootLoader功能似乎会影响APP程序,APP配置起始地址为0x800C000,tim1的ch1和ch2映射到pa8,pa9,配置为正交编码器模式,无法计数,jlink跟踪tim1的cnt一直不变,但是配置成pwm输出是有pwm波形的。如果不使用BootLoader,APP起始地址设置为0x8000000,那tim1配置为正交编码器是可以计数的。
不知道啥原因?
以上,keil使用的版本如下:

cubemx版本如下:

哪位大哥可以解答一下,困扰好久了!!!
附件是编译的bin文件,工程配置只有rom偏移地址和VECT_TAB_OFFSET配置不一致,其他的都是一样的。


bin文件.zip

下载

324.9 KB, 下载次数: 8, 下载积分: ST金币 -1

收藏 1 评论5 发布时间:2018-4-22 19:48

举报

5个回答
zhao.zhao 回答时间:2018-4-23 10:53:30
APP的中断向量表起始位置也要偏移0XC000的

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

七哥 回答时间:2018-4-23 14:46:25
bootloader跳转前关闭全局中断是必须的,因为跳转后要重建中断向量表。把中断向量表,理解成硬件是中断线比较形象一点,如果不关闭中断,可能会发生意外。如果程序中没有用到中断,那么其它中转向量会全部指向一个相同的地址,防止意外。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

rcwind 回答时间:2018-5-20 15:08:53
今天又试了一把,编码器莫名其妙的有用了,难道我编译有问题?
rcwind 回答时间:2018-5-20 15:09:16
我的中断向量表配置都是正确的
Great-397279 回答时间:2019-7-15 14:23:22
请问如何把 内部Flash 分成三个区: Bootloader / 正常程序区域/ 下载的 更新程序区域/ ; 当下载的程序区域 代码校验正确的时候,才开始复制其到正常程序区/ 如果复制失败,则重启,Bootloader 再次复制,直到成功/
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版