打印
[STM32F0]

STM32F0系列IAP远程更新程序总结

[复制链接]
2505|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  刚刚实现了STM32F0的IAP程序,用的串口下载,上位机用QT实现,在此做一些总结。
  关于bootloader就不多介绍了,官网有详细资料和例程,也可以点下面链接下载:
stm32f0_programming_usart.zip (1.58 MB) STM32F0串口升级.pdf (184.25 KB)

  bootloader运行完成后开始运行用户程序,这里主要说一下编写用户程序需要注意的地方。


  其实和F1系列一样,主要是要让内核知道中断向量表的存储位置,这样在又中断到来时可以准确的
  跳到相应处理函数,假如我的用户程序起始地址为0x08003000,如果是Cotex_M3内核,可以直接在
  用户程序开始处重定向中断向量表地址到0x08003000,但是F0系列不支持向量表重定向,详见
  STM32F0参考手册,这里截图如下:
  

所以,上面也给出了解决办法。。。。
  M0系列提供了一个系统配置寄存器SYSCFG,其中的最低两位MEM_MODE段提供了内存映射方式,默认是
将flash地址0x08000000映射到0x00000000处,这样的话,如果有中断到来,则内核直接从0x00000000处
取中断处理函数的地址,跳到相应的函数中执行。如果用户程序的起始地址设为0x08003000,这时候中断
向量表也在0x08003000,这样如果不采取措施的话,一旦某个中断到来,程序还是会跳到0x08000000指定
的中断处理函数中,结果不可预料。这时就要根据上面图片中介绍的办法,SYSCFG中的MEM_MODE还提供
了将SRAM(即内存,起始地址0x20000000)重映射到0x00000000中的方法,所以我们可以在用户程序起始处
,先将0x08000000开始处的中断向量表复制到SRAM起始地址(0x20000000)中,然后再修改SYSCFG最低两位
,修改地址映射方式为将SRAM起始地址映射到0x00000000处,这样的话相当于内核执行的向量表是用户程序
的中断向量表,程序即能正常运行。
沙发
airwill| | 2015-11-13 21:17 | 只看该作者
支持一下楼主, 讲得非常清楚.
这个方式浪费了一些 F0 比较紧张的 SRAM 空间, 好在 F0 的中断向量比较小.

使用特权

评论回复
板凳
gejigeji521| | 2015-11-13 23:13 | 只看该作者
让内核知道中断向量表的存储位置,这样在又中断到来时可以准确的 跳到相应处理函数

使用特权

评论回复
地板
yklstudent| | 2015-11-14 08:52 | 只看该作者
楼主的BOOT和用户程序工程还是分开的,所以存在这个问题;如果整合在一起,把中断函数定位到用户区就不用考虑楼主所说的问题了

使用特权

评论回复
5
恩哥| | 2015-11-16 15:01 | 只看该作者
楼主我发现最后出现一个问题啊,就是跳转到APP之前应该要修改SRAM里面的向量表映射到0x00000000,按你的方法就是把SYSCFG->CFGR1寄存器的最低2位设为11就可以了,但不知为什么这个寄存器没法修改!

使用特权

评论回复
6
恩哥| | 2015-11-16 15:34 | 只看该作者
原本发现SYSCFG->CFGR1没法修改,后来找到原因了,原来是没打开对应的时钟!!!

使用特权

评论回复
7
880705lpdhr| | 2015-12-2 21:19 | 只看该作者
MARK

使用特权

评论回复
8
wukong998| | 2019-12-18 09:57 | 只看该作者
@xiezhaoxuan,你好,stm32f0_programming_usart.zip 这个文件下载后,打不开,能不能发一份这文件给我啊,多谢了2862577919@qq.com

使用特权

评论回复
9
東南博士| | 2019-12-18 10:19 | 只看该作者
请问一下,为什么F042,这个芯片使用IAP,不知道为什么,都不能用上?

使用特权

评论回复
10
東南博士| | 2019-12-18 10:20 | 只看该作者
使用XMODEM,还是YMODEM,就不能用了!始终不行???

使用特权

评论回复
11
l1032484586| | 2020-4-2 22:12 | 只看该作者
原理意思是大概弄明白了,代码还是不会写,大哭

使用特权

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

本版积分规则

8

主题

22

帖子

1

粉丝