Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
Bootloader
Bootloader跳转到RT-Thread或FreeRTOS(基于STM32)
发布于 2018-06-30 15:22:44 浏览:8478
订阅该版
* 本帖最后由 slyant 于 2018-6-30 15:25 编辑 * [align=center][align=center]完整内容请下载附件 [align=center]Bootloader跳转到RT-Thread或FreeRTOS(基于STM32)[align=center]作者:猾蚁 QQ:7376220[align=center]一、Bootloader程序[align=center]1.准备好升级程序项目,可以使用STM32CubeMX来自动生成代码,然后自己编写代码实现升级策略。[align=center]2.跳转代码实现[align=center]Main.c[align=center]#define BOOT_LOADER_Address 0x08000000 [align=center]#define BOOT_LOADER_SIZE (200*1024) //0x32000(200KB)[align=center]#define BOOT_OS_Address (BOOT_LOADER_Address+BOOT_LOADER_SIZE)[align=center]typedef void (*pFunction)(void);[align=center]pFunction Jump_To_Application;[align=center]uint32_t JumpAddress;[align=center]static void jump_to_os(void); [align=center]//重定向printf[align=center]int fputc(int ch, FILE *f)[align=center]{ [align=center] while((USART1->SR&0X40)==0);[align=center] USART1->DR = (uint8_t) ch; [align=center] return ch;[align=center]}[align=center]int main(void)[align=center]{[align=center]HAL_Init();[align=center]SystemClock_Config();[align=center]MX_USART1_UART_Init(); [align=center]//在这里实现升级策略[align=center]printf("user_init()
"); [align=center] //升级完成后程序跳转到RT-Thread[align=center] jump_to_os();[align=center]}[align=center]static void jump_to_os(void)[align=center]{[align=center] if (((*(__IO uint32_t*)BOOT_OS_Address) & 0x2FFE0000 ) == 0x20000000)[align=center] { /* Jump to user application */[align=center] printf("jump_to_os
");[align=center] [align=center] __disable_irq() ; //关闭总中断[align=center] HAL_DeInit();[align=center] [align=center] JumpAddress = *(__IO uint32_t*) (BOOT_OS_Address + 4);[align=center] Jump_To_Application = (pFunction) JumpAddress;[align=center] /* Initialize user application's Stack Pointer */[align=center] __set_MSP(*(__IO uint32_t*) BOOT_OS_Address); [align=center] Jump_To_Application();[align=center] }[align=center] else[align=center] {[align=center] printf("BOOT_OS_Address:%08X
", *(__IO uint32_t*)BOOT_OS_Address);[align=center] } [align=center]} [align=center]3.Keil设置 [align=center]上面的IROM1的Size设置与前面宏定义BOOT_LOADER_SIZE值相同,值为十六进制 [align=center]这里的Start、size和前面的IROM1设置相同 [align=center]编译后下载,因为前面未选择Reset and Run,下载完成后程序不会运行。 [align=center]二、RT-Thread程序[align=center]1.准备好RT-Thread项目,确认项目可成功编译运行。[align=center]2.重定义中断向量表地址[align=center]找到stmtem_stm32fnxx.c文件中的SystemInit函数,找到SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET这一句,转到VECT_TAB_OFFSET的宏定义,修改值为前面BOOT_LOADER_SIZE的值:#define VECT_TAB_OFFSET 0x32000[align=center]3.启用SystemInit函数,使上面中断向量表重定义生效[align=center]SystemInit函数没有被任何C代码调用,它在启动汇编代码中被导入调用。启用startup_stm32fnnnxx.s文件中SystemInit被调用的相关代码(去掉分号注释即可),启用后如下图: [align=center]4.Keil设置 [align=center]IROM1的Start设置为前面BOOT_OS_Address定义的值,size设置为MCU的Flash总大小减去BOOT_LOADER_SIZE后剩余的大小。 [align=center]这里的Start、size和前面的IROM1设置相同 [align=center]编译后下载,如果上面选择了Reset and Run,下载完成后程序会从Bootloader开始运行,实现程序升级过程后跳转到RT-Thread运行,如下图: [align=center]
查看更多
3
个回答
默认排序
按发布时间排序
风来吴山
2019-02-20
这家伙很懒,什么也没写!
我也正在学习stm32的iap升级,请问能发我一个工程例子吗?
slyant
2019-04-02
这家伙很懒,什么也没写!
>我也正在学习stm32的iap升级,请问能发我一个工程例子吗? --- 官方已经有Bootloader方案了,可以关注一下
风来吴山
2019-04-05
这家伙很懒,什么也没写!
>官方已经有Bootloader方案了,可以关注一下 --- 已搞定,谢谢了
撰写答案
登录
注册新账号
关注者
0
被浏览
8.5k
关于作者
slyant
这家伙很懒,什么也没写!
提问
10
回答
28
被采纳
0
关注TA
发私信
相关问题
1
Linux下通过USBTinyISP为Arduino开发板烧?写Bootloader
2
请教修改NVIC后RTT调度函数失效的问题[已解决 bootloader中打开了不必要的中断]
3
进入bootloader的方式探讨
4
求助:IAP里的APP使用的RTT,跳转后出错。[已解决]
5
有没有人在STM32F103上用UART IAP跑过RT-Thread?
6
想做网口的IAP远程升级,不知可不可行
7
IAP问题
8
[已解决]请教基于RTT的IAP程序切换到应用程序不成功的问题(基于STM32F4)?
9
stm32f4xx-----IAP移植APP程序需要注意的地方
10
在调试IAP网络升级遇到跳转之后bootloader程序网络不通
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
ART-Pi2移植CMSIS-DAP(基于CherryUSB协议栈)
2
RT-thred的stm32h723对应bsp包CubeMX添加其他外设报错
3
RT-Thread中的time溢出问题,时间戳溢出,解决方法
4
ART-PI使用env驱动ETH网卡,pc和板子可以ping通
5
SystemView线程名字不显示
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
rt-smart
FAL
I2C_IIC
UART
ESP8266
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
ulog
SFUD
msh
C++_cpp
MicroPython
本月问答贡献
RTT_逍遥
9
个答案
2
次被采纳
xiaorui
3
个答案
2
次被采纳
winfeng
2
个答案
2
次被采纳
三世执戟
8
个答案
1
次被采纳
KunYi
8
个答案
1
次被采纳
本月文章贡献
catcatbing
2
篇文章
5
次点赞
swet123
1
篇文章
4
次点赞
Days
1
篇文章
4
次点赞
YZRD
1
篇文章
2
次点赞
lizimu
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部