基于STM32F103VET6的bootloader应用

基于STM32F103VET6的bootloader应用

bootloader大多用于设备的联网远程升级或者离线升级,采用bootloader进行程序升级可以使产品升级变得更加简便,有利于产品的维护,下面我来简介下bootloader的使用。

一、keil软件配置

1、基于keil下载的bootloader的keil配置

如果用keil下载程序,需要对keil进行配置,选择程序的flash空间。
keil配置1
修改起始地址和分配的flash大小,此bootloader分配前12k空间。
keil配置2
修改此处的程序起始地址和分配的flash大小

2、基于keil下载的APP的keil配置

keil配置3
修改起始地址和分配的flash大小,此APP分配后500k空间。
keil配置4
修改此处的程序起始地址和分配的flash大小

二、程序

1、bootloader程序

void (*jump2app)();
//跳转到应用程序段
//appxaddr:用户代码起始地址.
void iap_load_app(u32 appxaddr)
{
 int i;
 if(((*(vu32*)appxaddr)&0x2FFE0000)==0x20000000) //检查栈顶地址是否合法.
 { 
  jump2app=(void(*)())*(vu32*)(appxaddr+4);  //用户代码区第二个字为程序开始地址(复位地址)  
  MSR_MSP(*(vu32*)appxaddr);     //初始化APP堆栈指针(用户代码区的第一个字用于存放栈顶地址)
  for(i = 0; i < 8; i++)
  {   
   NVIC->ICER[i] = 0xFFFFFFFF; /* 关闭中断*/
   NVIC->ICPR[i] = 0xFFFFFFFF; /* 清除中断标志位 */
  }
  jump2app();         //跳转到APP.
 }
}
int main(void)
{ 
 uart_init(115200);
 delay_init();
 while(1)
 {
   printf("将于3s后跳转主程序\r\n"); 
   delay_ms(1000);
   printf("1\r\n");
   delay_ms(1000);
   printf("2\r\n");
   delay_ms(1000);
   printf("3\r\n");
   printf("准备跳转\r\n");
   delay_ms(10);
   iap_load_app(0x8003000);  //跳转
 }
}

这里主要要注意的就iap_load_app(0x8003000);这条语句,不同起始地址的程序需要填入不同的跳转地址

2、APP示例程序

int main(void)
{ 
 NVIC_SetVectorTable(0x8003000,0);  //重新设置程序栈地址和中断向量表
 delay_init();       //延时函数初始化   
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
 uart_init(115200);  //串口初始化为115200
 while(1)
 {
  printf("\r\n你好! 我是APP程序\r\n\r\n");
  delay_ms(1000);
 }  
}

这部份程序主要要注意的是NVIC_SetVectorTable(0x8003000,0);,这是重新设置程序栈地址和中断向量表程序
跳转成功后间隔一秒打印"你好! 我是APP程序"

三、bin文件的生成

做远程升级或者做离线升级的时候大多需要用到bin文件,下面解析下bin文件的生成。

1、后缀为.axf的文件的路径和文件夹名填入 以及bin文件路径以及文件名的设置

设置生成的bin文件的保存路径以及文件名,填入需要索引的后缀为.axf的文件的路径和文件夹名 在这里插入图片描述
在上面画红框部分勾选并填入

fromelf.exe --bin -o ./bin/USART.bin ../OBJ/USART.axf

2、存放.axf文件的路径以及文件名设置

选择对应的文件夹
检查包含.axf文件的文件夹路径以及文件夹名和文件名是否和设定的对应。

程序下载:https://download.csdn.net/download/qq_36326272/12501102

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 基于STM32F103VET6的设计可以涉及到很多应用,下面我将介绍一种可能的设计方案。 STM32F103VET6是一款基于ARM Cortex-M3内核的微控制器,具有72MHz的主频和512KB的Flash存储空间。它集成了丰富的外设接口,包括多个串行通信接口(如UART、SPI、I2C)、模拟输入输出接口(如ADC、DAC)、定时器等,并且支持多种外部设备的协议,如USB、CAN等。 以智能家居系统为例,我们可以将STM32F103VET6用于设计一个控制中心。这个控制中心通过串行通信接口与各个智能设备(如灯光、门锁、温湿度传感器等)连接,并通过WiFi或蓝牙与用户的手机或电脑进行通信。 首先,我们可以使用STM32F103VET6的UART接口与各个智能设备进行通信。我们可以将每个设备连接到一个UART引脚,并采用相应的通信协议来进行控制和数据交换。例如,我们可以通过UART来向灯光设备发送指令控制其开关和亮度,或是接收温湿度传感器的数据。 其次,我们可以使用STM32F103VET6的GPIO和ADC接口来接收来自用户的输入。通过按钮或旋转开关等输入设备,用户可以向控制中心发送指令。通过ADC接口,我们可以接收模拟信号,如光敏传感器的光照强度,用于自动化控制。 最后,我们可以通过STM32F103VET6的WiFi或蓝牙接口与用户的手机或电脑进行通信。通过这种方式,用户可以通过APP或网页来远程控制智能家居设备。STM32F103VET6可以作为一个嵌入式Web服务器,接收来自用户的指令,并通过UART接口发送给相应的设备。同时,STM32F103VET6也可以向用户传输传感器数据,让用户可以随时了解家里的温度、湿度以及其他信息。 综上所述,基于STM32F103VET6的设计可以实现智能家居系统中控制中心的功能。通过它的丰富接口和强大的处理能力,我们可以方便地实现各种智能设备之间的通信和控制。 ### 回答2: stm32f103vet6是一款基于ARM Cortex-M3内核的高性能微控制器。它具有丰富的外设和强大的计算能力,非常适用于各种嵌入式系统设计。 在基于stm32f103vet6的设计中,首先需要了解该微控制器的主要特点和功能。它具有72MHz的主频,512KB的闪存和64KB的SRAM,可以满足大多数嵌入式应用的需求。此外,它还集成了多个串行接口(如USART、SPI和I2C)、通用定时器和PWM输出等常用外设,方便了与外部设备的通信和控制。 基于stm32f103vet6的设计通常需要先进行电路设计和原理图绘制。可以根据具体需求选择合适的外设和接口,并将它们与stm32f103vet6连接起来。例如,如果需要与传感器进行数据交互,可以选择合适的GPIO引脚作为数据线,并通过SPI或I2C接口进行通信。接着,根据原理图进行电路板的设计和制作。 在设计的同时,还需要考虑软件开发。stm32f103vet6支持多种开发环境,如Keil MDK和STM32CubeIDE。在软件开发中,需要编写代码来配置和控制各个外设,实现系统的各项功能。可以使用C语言或汇编语言来编程,根据需要选择合适的编程方法。 此外,还需要进行系统测试和调试。通过连接上开发板和外部设备,进行各项功能测试和性能评估。如果出现问题,需要通过调试工具(如Oscilloscope和串口调试助手)来进行故障排查。 综上所述,基于stm32f103vet6的设计需要进行电路设计、软件开发、系统测试等步骤。它具有强大的性能和丰富的外设,适用于各种嵌入式系统,例如智能家居、工业自动化等。 ### 回答3: 基于STM32F103VET6的设计是一种基于ARM Cortex-M3内核的嵌入式系统设计,其具有高性能和低功耗的特点。它采用了72MHz的主频,具有512KB的Flash存储器和64KB的SRAM,可以满足各种复杂的应用需求。 STM32F103VET6可以用于各种各样的应用,例如工业自动化、智能家居、医疗设备和消费类电子产品等。它能够支持多种通信接口,包括UART、SPI、I2C和USB,方便与外部设备进行数据交互。 在设计中,可以使用STM32CubeMX软件进行硬件的配置和引脚映射,使得系统的搭建更加简单和快捷。同时,STM32F103VET6还提供了丰富的外设功能,如定时器、ADC和DMA等,可以满足不同应用的需求。 在软件开发方面,可以使用Keil MDK等集成开发环境进行程序的编写和调试。STM32F103VET6的编程语言可以选择C语言或者汇编语言进行开发。此外,ST公司还提供了一系列的开发板和示例代码,方便开发者快速上手并且加速项目的进展。 总体而言,基于STM32F103VET6的设计具有高性能、低功耗和灵活性的特点。通过合理的硬件配置和编程开发,可以实现多种不同应用嵌入式系统设计。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值