STM32启动模式及IAP
来源:互联网 发布:珠海seo推广 编辑:程序博客网 时间:2024/06/03 19:59
作者:溺水的鱼
转自:http://blog.sina.com.cn/s/blog_a6f07d720101811e.html
我们也可以在开发STM32时,在内存中调试程序。
{
STM32这颗Cortex-M3控制器,与其他许多ARM一样,提供了BOOT0和BOOT1两个管脚用于启动选择。
BOOT1=x
BOOT1=0
BOOT1=1
在芯片上电复位时,BOOT0和BOOT1两个管脚的状态将决定芯片从何处启动。
1.当BOOT0和BOOT1均设置为逻辑1时,系统将从内置SRAM中启动,这是代码内存调试的第一个条件。
}
经多次确认,BOOT0和BOOT1状态与内存中调试无直接联系
2.然后,我们需要在代码中设置正确的中断向量表位置。中断向量表通常被放置在用户程序的开始,所以flash中运行时,向量表位于0x08000000处,而当代码被放置在SRAM中运行时,他的位置就成了0x20000000。在初始化NVIC时,我们可以放置如下代码,定义向量表的位置
或
3. 在编译器中,要进行正确的设置。这里以IAR 5.4为例说明。
经过以上步骤,代码就可以在内存中调试,下载速度飞快,调试速度也比flash中快了不少!
IAP在线升级
1.boot程序
(1)
#define ApplicationAddress
if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFE0000 ) == 0x20000000)
1,
2,
3,
if
这句话的意思是把用户代码的首地址里面的数据拿出来,看看是不是以0x20000000开头。
(X & 0x2FFE0000 ) == 0x20000000 意思是说X是不是在0x20000000与0x2001FFFF之间,即栈顶是不是在以0x20000000开始的128K
前面说了用户代码的首地址放的是堆栈指针,而堆栈应该指向RAM,而RAM的首地址是0x20000000,所以这句话用来判断是不是已经有一个正确的堆栈指针地址写在了用户代码的首地址,进一步可以推测是不是有一个正确的用户代码写在了用户代码区,如果已经写入了,就可以跳过去运行,如果没有写入,就不跳过去。这是DEMO程序的判断逻辑,可以这样用,也可以不这样用。
2.APP程序
(1)
(2)关键代码
- STM32启动模式及IAP
- STM32启动模式及API
- STM32启动模式及API
- STM32启动模式及API
- STM32启动模式及API
- STM32 IAP
- STM32 IAP
- STM32 IAP
- STM32 IAP
- stm32 IAP
- STM32启动模式 收藏
- STM32启动模式
- STM32启动模式说明
- STM32的启动模式
- STM32启动模式细节
- stm32启动模式
- STM32之启动模式
- STM32的启动模式
- 【翻译六】java
- Activity Action
- FTP协议过程分析
- android调试】R cannot be resolved to a variable) R.java 不能自动生成
- 关于Python中单引号、双引号和三引号的区别
- STM32启动模式及IAP
- Android开源资源(开发备忘)
- Oracle分析函数总结(3)- 数值分布 - cume_dist,percent_rank,ntile,percentile_disc,percentile_cont,ratio_to_report
- myeclipse 彻底让烦人的各种验证消失 让你的开发速度飞快
- 动态table添加colspan\rowspan 参数的方法(通过Js)
- ASPNETPager常用属性
- Hadoop cluster安装部署
- 【初探移动前端开发01】惊鸿一瞥
- dcm4chee安装部署汉化