Stm32的IAP现在已经是非常简单了,下面就教大家三步学成:
前提条件:已经有Flash读写函数,这个函数好弄,很多stm32例程里面都有
第一步(对于Boot程序):跳转到指定Flash位置函数,如下:
void Jump_To_Application(const u32 startAddr)
{
Jump_To_App = (pFunction)(*(vu32*) (startAddr + 4));
MSR_MSP(*(vu32*) startAddr);
Jump_To_App();
}
第二步(对于APP):在keil工程配置里设置程序起始地址和APP程序大小,如图:
第三步(对于APP):如果APP中涉及中断,则要在APP起始位置设置中断向量偏移,否则你会发现可以正常跳转运行,但是所有中断都不执行,就一句话:
SCB->VTOR = FLASH_BASE | 0x20000;
注意项:一般来说在Boot程序中不会使用任何外设,最多也就配置几个IO口,但如果你由于某些特殊原因需要配置了串口、ADC或DMA等一些外设的话此时跳转到APP程序的时候有可能会卡在APP程序的相应外设初始化函数里(如你在boot中配置了串口,这时就有可能卡在APP的串口配置里),这时你可能需要在跳转到APP之前(调用跳转函数之前)删除相应外设的配置(相应DeInit函数),如果这还不行那就在跳转之前静止所有中断(在keil里面是 __disable_irq();)然后在APP里面配置完相应外设后再开启所有中断;实际上我有碰到执行了这两个操作还是不行的(我在boot里面初始化了串口,用于在引导的时候打印信息),后面解决办法是在APP里在初始化完该串口后打印一个字符串出来,误打误撞解决的,为什么这样可以我也不知道
关键字:STM32 IAP BOOT 三步速成
引用地址:
STM32 IAP/BOOT,三步速成
推荐阅读最新更新时间:2024-03-16 16:11
stm32独立看门狗和窗口看门狗的区别
1)独立看门狗没有中断,窗口看门狗有中断 2)独立看门狗有硬件软件之分,窗口看门狗只能软件控制 3)独立看门狗只有下限,窗口看门狗又下限和上限 4)独立看门狗是12位递减的。窗口看门狗是7位递减的 5)独立看门狗是用的内部的大约40KHZ RC振荡器,窗口看门狗是用的系统时钟APB1ENR 以上是我总结的 接下来我们介绍一下独立看门狗和窗口看门狗,这里我们就不讲解程序了,很简单的,配置一下寄存器就可以使用了。 独立看门狗没有中断功能,只要在计数器减到0(下限)之前,重新装载计数器的值,就不会产生复位,独立看门够有硬件和软件之分,硬件是通过烧写器的“设定选项几节等”配置,一旦开启了硬件看门狗,那么就停不下来了,只能在重新
[单片机]
STM32 GPIO口模式配置
F103系列 typedef struct { uint16_t GPIO_Pin; /*! Specifies the GPIO pins to be configured. This parameter can be any value of @ref GPIO_pins_define */ GPIOSpeed_TypeDef GPIO_Speed; /*! Specifies the speed for the selected pins. This parameter can be a value of @ref GPIOS
[单片机]
STM32—USART
前言: 最近在调试STM32L152芯片的USART配置程序,实现STM32串口打印功能,本文总结下STM32L152芯片USART的使用方法。 硬件平台:STM32L152 软件平台:keil v5+cubeMX 函数库:HAL库 1:usart初始化 UART_HandleTypeDef huart3; uint8_t rxbuf; void MX_USART3_UART_Init(void) { huart3.Instance = USART3; huart3.Init.BaudRate = 115200; huart3.Init.WordLength = UART_WORDLENGTH_8B;
[单片机]
STM32入门笔记1
STM32入门笔记:STM32+ST-Link ST-link仿真器跟一块最小系统的STM32开发板都买回来好久了,到最近终于有空开始动手学习。 --|||在ST-Link配的光盘里有个J-Link的介绍文档跟驱动程序,结果我就看完把驱动一装,连上开发板按着教程开始想烧录个程序进去试试。结果一直无法识别到J-Link设备…我居然还上旺旺找买仿真器的那个卖家问为什么我发现不了设备,我的仿真器上面的灯不亮?卖家问了下情况后很纳闷:你买的是ST-Link当然用J-Link的驱动程序连接不到设备啦…当时自己也被自己这个乌龙给雷到了。 好吧,又接着问了一下,原来ST-Link不用装驱动,但是用ST-Link无法像使用J-Link
[单片机]
Keil(MDK-ARM-STM32)系列教程(五)Configuration(Ⅰ)
Ⅰ、写在前面 本文带来的内容正如标题“Configuration”,只是标题包含的内容较多,我计划将其分为:Configuration(Ⅰ)和Configuration(Ⅱ)两篇文章来讲述。 我们常见的字体大小、颜色、关键字、快捷键等这些都是在“Configuration”中进行设置。本文讲述Configuration中的前面3项Editor、Colors & Fonts、User KeyWords。 本文讲述的Configuration配置和前面文章Options for Target目标选项在保存上有一个明显的区别:Configuration修改过后并保存的配置是保存在你Keil(电脑)软件上;而Options for
[单片机]
基于STM32应用的FreeRTOS中断设置
一、FreeRTOS中断设置介绍 FreeRTOSConfig.h中定义了两个宏,分别是: configKERNEL_INTERRUPT_PRIORITY configMAX_SYSCALL_INTERRUPT_PRIORITY configKERNEL_INTERRUPT_PRIORITY用来设置RTOS内核自己的中断优先级。因为RTOS内核中断不允许抢占用户使用的中断,因此这个宏一般定义为硬件最低优先级。 configMAX_SYSCALL_INTERRUPT_PRIORITY用来设置可以在中断服务程序中安全调用FreeRTOS API函数的最高中断优先级。优先级小于等于这个宏所代表的优先级时,程序可以在
[单片机]
使用STM32开发为什么要先开启外设模块?什么时候开启AFIO时钟?
1.为什么我们要先开启STM32外设模块时钟; 2.关于STM32的 I/O 复用功能及什么时候开启AFIO时钟; 1 为什么我们要先开启STM32外设时钟 讲述本节内容之前先说一个案例: 前段时间,有一个朋友为配置EXTI的代码折腾了一天,最终没有结果。于是问了我这样一个问题:“你用过STM32F051C8T6的外部中断吗,就是GPIO管脚做中断,我这边就是进不了中断”。 然后他把基于标准外设库、寄存器写的代码都给我发过来了。我仔细看了又看,没发现有什么毛病啊。(但是,代码是截图分来给我发过来的)。 于是,我将之前配置IO外部中断的代码,按照他(PB2)的要求,写成一个“EXTI配置”函数发给他,他直接拷贝过去,成功了。 于
[单片机]
STM32学习笔记之电容触摸1
电容触摸简介 8.1.1 电容触摸概述 随着科技的发展,传统的机械按键正在逐步从设备上面消失,这个原因主要有机械按键由于是采用机械接触的方式,寿命比较短,从用户体验上看,机械按键也显得操作复杂,对比现在的电容按键,电容按键具有寿命长,因为不存在机械接触,占用空间少,以前的机械按键在设计外壳的时候需要考虑尺寸,现在换成电容按键后这个问题不再需要考虑。 8.1.2 检测原理 常规的检测方式一般是通过计算电容放电时间来判断是否有手指按下,这是因为手指会与线路板的铜箔接触面上产生电容效应,当手指没有放在铜箔上的时候,铜箔与PCB之间存在杂散电容,这两个状态的电容值差别很大,检测原理如下图所示。 在检测之前首先用开关将电容Cs里面的电荷
[单片机]