stm32 iap跳转isp实现上电isp下载

发布者:心连心意最新更新时间:2019-01-16 来源: eefocus关键字:stm32  iap  跳转 手机看文章 扫描二维码
随时随地手机看文章

概述:本程序上电等3秒种,期间每隔10ms检测一次串口是否收到握手指令(0x7F),若收到则跳转到isp程序执行。可以用mcuisp软件通过串口1直接升级程序。是一种简单的iap程序。初次下载需要手动让mcu进入isp模式。


1先看看最终效果:成功!


2.实现isp跳转


stm32的isp程序在系统存储区,可以通过boot0,boot1引脚选择,也可以通过程序直接跳转,isp程序的入口地址为 0x1FFFF000


跳转函数如下:


#define ISP_ADDR        0x1FFFF000


void IspProgramRun(void)

{


    u32  IspSpInitVal;           //IAP程序的SP初值.


    u32  IspJumpAddr;            //IAP程序的跳转地址.即,IAP程序的入口.


    void    (*pIspFun)(void);       //定义一个函数指针.用于指向APP程序入口.


  //  NVIC_DeInit ();                                 //恢复NVIC为复位状态.使中断不再发生.

    

    IspSpInitVal = *(u32 *)ISP_ADDR;             //取APP的SP初值.


    IspJumpAddr = *(u32 *)(ISP_ADDR + 4);        //取程序入口.


 __set_MSP(IspSpInitVal);     //设置SP.

                    

    pIspFun = (void (*)(void))IspJumpAddr;              //生成跳转函数.


    (*pIspFun) ();                                  //跳转.不再返回.

}

3.主函数代码如下:

int main(void)

 

 SystemInit();//初始化RCC 设置系统主频为72MHZ

  

 delay_init(72);      //延时初始化

 

 Usart_Init(115200);

 

 for(bootcount = 0;bootcount < 300;bootcount++)

 {

  if(USART1_RX_BUF[0] == 0x7F) IspProgramRun();

  delay_ms(10);

 } 

 

 LED_Init();

 KEY_Init();

 

 while(1)

 {

  keynum = KEY_Scan();

  if(keynum == 1)

  {

   if(RESET == GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_8))   LED0_OFF();

   else LED0_ON();

  }

  if(keynum == 2)

  {

   if(RESET == GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_2))   LED1_OFF();

   else LED1_ON();

  }

  keynum = 0;

 };

      

}


关键字:stm32  iap  跳转 引用地址:stm32 iap跳转isp实现上电isp下载

上一篇:stm32的两种固件下载模式:JTAG和SWD
下一篇:STM32F103关闭SWD/JTAG功能无法烧录时处理方法

推荐阅读最新更新时间:2024-03-16 16:22

STM32 HAL 库, 配置串口DMA接收及空闲中断
1、 使用CUBEMX 配置自动生成代码: ①添加串口的DMA 通道 ②使用串口全局中断: 其他的配置就不详细说了。 生成代码后, 打开工程在串口初始化函数中添加代码: /* USART1 init function */ void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Pari
[单片机]
stm32---RS485初始化
u8 RS485_RX_BUF ; //接收缓冲,最大64个字节. u8 RS485_RX_CNT=0; //接收到的数据长度 /* 函数:RS485_Init 功能:串口初始化配置 参数:Baud:波特率 备注:GPIO/USART/NVIC初始化,开启串口中断,使能串口中断(中断处理函数) 步骤: 1---GPIO/USART1/NVIC初始化结构体定义 2---开启串口USART,GPIO端口时钟 3---复位串口 4---USART2_TX/USART2_RX 串口接受/发送端口配置寄存器结构体参数配置 5---NVIC 中断控制器配置 6---USART2 初始化设置 7---开启中断 8---
[单片机]
STM32 ADC 单次模式、连续模式、扫描模式
ADC单通道: 要求进行一次ADC转换:配置为单次模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,就停止转换。 要求进行连续ADC转换:配置为连续模式使能,扫描模式失能。这样ADC的这个通道,转换一次后,接着进行下一次转换,不断连续。 ADC多通道: 要求进行一次ADC转换:配置为单次模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,就停止转换。 要求进行连续ADC转换:配置为连续模式使能,扫描模式使能。这样ADC的多个通道,按照配置的顺序依次转换一次后,接着进行下一次转换,不断连续。 因此,得出结论:扫描模式只在多通道的条件下有效,来使得各个通道按照配置循序依次转换。而
[单片机]
基于STM32的小说阅读器
1.硬件平台 CPU:STM32F103ZE 屏幕:3.5寸TFTLCD屏 触控:电阻式触摸屏xpt2046 SD卡 2.实现功能 1.SD卡设备检测,文件系统移植,用户存储小说和字库文件; 2.字库信息加载检测,自动完成字库信息加载与更新。本次采用GBK字库,字体大小有16*16、24*24、32*32三个字库; 3.触摸屏校准,上电检测触摸屏校准信息;手动进入触摸屏校准模式 4.小说文件索引,小说文本切换; 5.小说翻页,字体大小选择,颜色选择,返回主目录; 3.示例效果  SD卡检测和触摸屏校准  字库检测与更新 目录和小说显示界面 颜色切换 字体选择 4.软件设计  1.SD卡字库更新加
[单片机]
基于<font color='red'>STM32</font>的小说阅读器
AVR ATMega128自引导IAP(boot load)的应用设计
ATmega128具备引导加载支持的用户程序自编程功能(In-Sysytem Programming by On-chip Boot Program),它提供了一个真正的由MCU本身自动下载和更新(采用读/写同时 Read-While-Write 进行的方式)程序代码的系统程序自编程更新的机制。利用AVR的这个功能,可以实现在应用编程(IAP)以及实现系统程序的远程自动更新的应用。 IAP的本质就是,MCU可以灵活地运行一个常驻Flash的引导加载程序(Boot Loader Program),实现对用户应用程序的在线自编程更新。引导加载程序的设计可以使用任何的可用的数据接口和相关的协议读取代码,或者从程序存储器中读取
[单片机]
STM32的RTC晶振不起振的原因及解决方法
STM32的RTC晶振经常出现不起振的问题,这已经是“业界共识”了。很多人在各种电子论坛上求助类似于“求高手指点!RTC晶振不起振怎么办”的问题,而其答案基本可以概括为“这次高手帮不了你了”   更有阴谋论者提出让人啼笑皆非的解释——STM32的RTC晶振不起振是ST与晶振厂商串通后故意搞出来的,目的是提高某晶振厂商高端晶振的销量。   最近做的几块板子也用到了STM32的RTC,前后两版一共做了大概6片,幸运的是并未遇到晶振不起振的现象。而我采用的是3毛钱一个的普通晶振,并未选用传说中低负载高精度晶振。后来在另外一片实验性质的板子上首次遇到了晶振不起振的问题,而且做了2片都不起振,这才让我意识到这个问题的严重性。   从上述现象
[单片机]
<font color='red'>STM32</font>的RTC晶振不起振的原因及解决方法
认识STM32的复位与电源管理
复位功能是一个非常重要的功能,大到PC,小到单片机,每一台计算机系统都有。在我小时候,去网吧的时候,但凡是电脑出现任何一点小问题,网管的第一回答一定是重启。重启和复位就是同一个意思。 发展到现在PC已经很稳定了,复位按钮慢慢的淡出我们的视野,但是在主板上我们依然可以找到复位电路的存在。单片机上的复位功能也有着类似的变化,在我们学单片机那个年代,需要在单片机的外部一个复位电路,从专用引脚上接一个电阻和电容组成的复位电路。如果没有这个电路,单片机就没法工作。现在的新款单片机都把复位功能内置到单片机中。如果是开发项目要手动复位,我们可以在复位引脚上接一个按键用来手动复位。 复位 复位功能的作用是让RAM 中的数据清空,让所有连接
[单片机]
认识<font color='red'>STM32</font>的复位与电源管理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved