stm32 usb 和 can boot loader下载踩坑

一、生成iap工程

1、新建boot loader工程

2、芯片stm32g431cbux,使用cubemx配置工程,用can盒子,配置:

3、开启串口和USB,设置DMA

4、配置时钟为168Mhz,usart1也为168Mhz

5、生成程序后编译下载,测试是否成功

二、编写iap

1、编译一次,找到工程中后缀.map文件打开,搜索Memory Map of the image

程序rom为28.24k,其实直接编译之后在编译信息也能看到,把前三者加起来即可

这个就是程序大小,等下需要偏移的量

2、给iap程序设置大小,点开魔术棒

0x20000 为 131072/1024=128kb,这个是芯片flash的大小,现在需要32k的容量,修改为32*1024=32768即0x8000

这样iap程序就设置完成了。需要注意的是,因为flash擦除都是按页的,所以这里也按页进行分配。

3、在app中,需要偏移32kb即

并在主函数中加入:SCB->VTOR = FLASH_BASE | 0x8000; //0x8000为BootLoader大小(偏移量) 注意只需要在app中加入,iap不用(其实也可以在iap程序中加入)

或者只在iap程序中加入,这样也是可以的

4、iap程序中添加跳转函数

定义类型

跳转函数

调用函数

正常跳转的话是不会进入while的了,可以打印输出试试

5、上面测试发现,无法从app中进入iap。经过研究后,也需要在iap中把中断向量偏移回来,

6、发现烧录了iap后,app程序不见了,是因为勾选了erase full chip,需要勾选到erase sectors,不管是app还是iap都需要这样设置

7、疑惑:不知道为什么在程序中直接调用app跳转会导致无法正常进入,需要重新拔插上电或者点击硬件复位才能正常进入。函数卡死在osKernelStart中。后改成使用软件复位方式进入app或者iap

iap中:

app中:

踩了很多坑,也还是有很多一知半解的东西

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值