历史上的今天
今天是:2024年11月07日(星期四)
2019年11月07日 | STM32f030弄IAP时遇到的问题
2019-11-07 来源:eefocus
bootloard中的跳转和F1(M3内核)的没什么区别
这里的这句话
if((((__IO uint32_t)IAP_ADDR)&0x2FFE0000)==0x20000000)
并不是‘与’“&”操作,而是取出IAP_ADDR的值,判断栈顶地址

特别注意的地方
在bootloard跳转过去的程序需要添加
memcpy((void*)0x20000000,(void*)IAP_ADDR,0xB4);
__HAL_SYSCFG_REMAPMEMORY_SRAM();
在M3内核中可以通过操作VTOR寄存器来重映射中断向量表
SCB->VTOR = FLASH_BASE | 0x10000;
/* Vector Table Relocation in Internal FLASH. */
在M0内核中需要
memcpy((void*)0x20000000, (void*)IAP_ADDR, 0xB4);
__HAL_SYSCFG_REMAPMEMORY_SRAM();
其中,0x2000 0000是SRAM的起始地址,这个不需要改动。
而之后的两个参数需要根据实际情况作出修改。IAP_ADDR是应用程序的起址地址,从这里开始的VECTOR_SIZE字节,存放是的应用程序的中断向量表。VECTOR_SIZE是指中断向量表的大小,具体多大可以在startup.s文件里计算得到。以下以startup_stm32f030.s为例作说明:

我们只需关注其中的一小部分。从__Vectors开始,直到__Vectors_End,每一个DCD都代表一个中断向量(所谓中断向量,说得明白点,其实就是某个中断服务程序的入口地址)。
DCD USART1_IRQHandler ; USART1
这里的“USART1_IRQHandler"其实就是UART1中断服务程序USART1_IRQHandler这个函数,同时,它也代表这个函数的入口地址。
以上代码即定义了这样一张表,这张表包括45个元素,每个元素是一个长度为4字节的地址。除了第一个地址是SP(堆栈指针)外,其它的地址都是某个中断服务程序的入口地址。
那么,回到我们要解决的问题上来,之前memcpy函数中的第三个参数VECTOR_SIZE,针对本例,就应该是45*4=180(0xB4)个字节。
在执行完以上两行代码后,若发生中断,CPU就会去SRAM(即0x2000 0000处)取中断向量了,所以,以0x20000000作为起始地址之后的0xB4个字节就不能被改动了。为了达到这0xB4个字节不被修改的目的,如下方法可以实现。

其他注意事项
BootLoader程序大小不能超过应用程序的起始地址

应用程序的起始地址中要设置和BootLoader中的烧写地址一致
应用程序输出bin文件

fromelf.exe --bin -o …/lediap.bin ./out/lediap.axf
其中
fromelf.exe为编译后要执行的应用程序
–bin -o为应用程序选项
…/lediap.bin为生成在上一级目录,名字为lediap.bin
./out/lediap.axf为编译输出的文件这个文件要根据自己的工程来找
注意上面的命令不能出现中文或者字符
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 当将模拟信号转换成方波脉冲后,再将脉冲信号送入单片机,那么单片机是怎样处理这个脉冲信号的? … 查看全部问答> |
|
note:usb address and data registers will not valid until usb clock is running 这是什么造成的呢?… 查看全部问答> |
|
技术在于积累! 第一次刚接触LED驱动是从一块DEMO板: DC输入,输出是低电流大致200MA的; 因为客户的需求,后来公司头一次想用SMD802开发一块非隔离的7*1w 450MA驱动板;那时候没买样板,也没找专门的IC厂商,要求技 ...… 查看全部问答> |
|
最近做了一个题目,使用蓝牙接收到的数据在LED点阵上显示出来,但是前提是不知道要接收的数据的内容。该如何实现接收到的数据用编程直接转换成LED点阵上能识别的二进制数。是该做一个字库还是有其他什么别的方法。请专业人士帮忙解决一下。谢谢。… 查看全部问答> |
|
windows ce stream driver wizard 搜遍了整个网络也没有找到windows ce stream driver wizard这个工具,哪位大哥大姐弟弟妹妹能够慷慨解囊,帮小弟一把,不胜感激。小弟的邮箱是:cougarz@somagic.com.cn… 查看全部问答> |
|
哪位达人用过《EVC高级编程及其应用开发》这本书上基础数据库的例子? 我在wince下试了这个程序,可是不好使阿,添加不了,也删除不了,请问是还需要安装什么程序还是本身实例程序有问题啊?… 查看全部问答> |
|
今天用Proteus仿真的ADC0809。。。但实际0809不工作啊。。。。 单片机的对应ST脚的P口接上0809时就被拉低了。Proteus仿真什么问题都没有。0809要注意什么问题么?有两个问题:1,我希望设定的是500K,用定时器方式2也是设成255。可从P口出来的就是50K 啊。2,ST脚被拉低,但不接0809时单片机P口是正常的 ...… 查看全部问答> |
|
我在使用msp430F149的JTAG模块下载时,一开始还能下载运行,试了有两三天,突然一天不能下载了,后来就再也不能下了,软件提示不能发现目标。然后又贴了一块板子,结果这块好了半天就又出现和前面一样的现象。很是郁闷 量了下载口各个引脚的电压 ...… 查看全部问答> |





