学习这个教程前首先需要了解Flash的编程原理。
一。stm32 IAP介绍
1. stm32的编程方式
2. stm32的启动模式选择
BOOT1置0,BOOT0置1,程序从系统存储器中执行启动程序BootLoader代码,也就是从串口中下载程序到主存储器中。
BOOT0置0,BOOT1不管是置0还是置1,主闪存存储器被选为启动区域,即执行写入的应用程序。
3. IAP下载程序流程
注:自己写的BootLoader程序与系统的BootLoader程序是不同的。需要先通过ICP下载到BootLoader存储区域中。然后跳转到应用程序执行。
4.一般程序的执行流程
0x08000000中存放栈顶地址
0x08000004开始存放一个中断向量表
然后执行复位程序,然后到main函数,当有中断的时候程序会跳到中断向量表中的起始地址,执行中断程序。执行完毕后又回到main函数。
二。IAP运作流程
(1)新程序中保存了一份新的中断向量表
(2)当有中断时先跳转到BootLoader中的中断向量表,然后通过偏移找到中断服务程序入口,执行中断程序。
(3)执行中断程序完成后跳转到main函数。
复位之后怎么跳转到main函数?
三。IAP升级应用程序的过程
BootLoader程序通过一个接口接收到应用程序包,然后写到APP的某个区域,在产品中一般是发出一个升级命令,然后应用程序执行一个跳转或软复位,跳转到BootLoader升级应用程序。
关键字:串口 IAP stm32
引用地址:
45.串口IAP基本原理
推荐阅读最新更新时间:2024-03-16 15:44
DMA和UART的深刻认识--串口接收的3种工作方式(附STM32F4代码)
可能会遇到的问题: 1.能实现接收但不发送 注意是否是识别函数出错 2.DMA单次传输模式要求再初始化,否者出现第二次中断不执行。使用循环模式出现的问题是要结合配置公式: 3.DMA再次初始化不完全,会出现接收一次成功,再来一次不行。第三次能接收的问题 4.串口调试连续点击的次数太快,会使的里面的发送程序出错 一.串口uart中断接收 遇到的问题: 1、串口调试接收引脚坏掉 2.接收数据识别,使用的库函数出错 串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO 时钟使能。 2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。 3) GPIO 初始
[单片机]
基于FPGA和SC16C554实现多串口通信的方法
0 引言 随着电子技术的飞跃发展,通用数字信号处理器(DSP)的性能价格比不断提高,数据处理能力不断加强,其应用领域日益增多,在数据实时采集及高速数字信号处理中应用尤其广泛。当DSP独立构成一个处理单元时,往往需要和外设进行数据交换,其通信能力至关重要。在研制机载合成孔径雷达系统时,信号处理机作为系统的核心要与飞控系统、稳定平台、雷达信号源以及导航系统等部分进行数据交换;如何实现其与其它部分之间有效的通信成为系统设计的关键。串口通信因为其简单,可靠仍然是广泛采用的方法之一。 1 串口扩展方案选择 多串口通信常用的实现方案有两种:一种是软件实现,采用软件编程模拟串口,该方法成本低,但编程复杂、开发周期长、可
[嵌入式]
6步教你在STM32程序中添加 printf函数
前提是你有一个完整的keil工程 比如ADC的 调试的时候很多时候用到串口 这里教你怎么样使用Printf 函数 在程序中添加Printf 1, #include stdio.h 2, /* Private functions ---------------------------------------------------------*/ 下添加 void USART_Configuration(void); #ifdef __GNUC__ /* With GCC/RAISONANCE, small printf (option LD Linker- Libraries- Small printf set t
[单片机]
【STM32外设ADC细节】-注入组与规则组的不同点
参考文档:RM0008 Reference manual.pdf(STM32参考手册) 参考章节: 11.3 AD functional description 11.3.3 Channel selection 11.3.9 Injected channel management 一、注入组与规则组的不同点如下: 1、通道数不同 ADC模块有16个多路通道,可以把转换组织成2个组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 规则组最多16个转换组成。而注入组最多4个转换组成。 2、注入组通道可以打
[单片机]
解决串口开启DMA接受却只能接收到第一个字节的问题
设备: 单片机:STM32G070 MDK:V5.25 问题描述: 发现串口接受不到数据,只能接受到第一个字节。 MX_USART4_UART_Init(); HAL_Delay(200); HAL_UART_Receive_DMA(&huart4, UART_DMA_RXBuf, UART_RX_BUF_SIZE); 原因分析: 在单片机执行完串口初始化之后,并没有立马开启DMA接收,在这个时间差之内如果有数据发过来就会导致这个问题 解决方案: 在完成串口初始化之后,立马开启DMA接收,中间不能有较大的空挡时间差即可。 MX_USART4_UART_Init(); // HAL_Delay(200);
[单片机]
STM32驱动语音模块播报实时时间
前几天有个学生在用一个语音模块,遇到了点困难,为了方便调试,自己也买了两个一起玩了一下。 今天就来简单分享一下这个模块。 模块概述 DY-SV17F 语音模块,包括IO 分段触发,UART 串口控制, ONE_line 单总线控制,标准 MP3 等 7 种工作模式; 板载 5W D 类功放,可直接驱动 4Ω, 3~5W 喇叭; 支持 MP3,WAV 解码格式; 板载4MBte flash 存储,可通过 USB 数据线连接模块上的MicroUSB接口,电脑可以将模块识别为一个U盘,打开此存储更新音频文件即可。 工作模式配置 硬件连接 原理图 为了测试方便,各位也可以画一个PCB板,这样就可以避免使用一堆杜邦线进
[单片机]
STM32之光敏电阻传感器模块的使用
本实验配合2.2寸TFT液晶屏显示,当光弱的时候显示“昏暗”,光强时显示“明亮”。 实验使用的是下图所示的3线光敏电阻传感器模块,用途:光线亮度检测,光线亮度传感器,智能小车寻光模块。模块特色:比较器输出,信号干净,波形好,驱动能力强,超过15mA;配可调电位器可调节检测光线亮度;输出形式 :数字开关量输出(0和1);使用宽电压LM393比较器。 模块使用说明1、光敏电阻模块对环境光线最敏感,一般用来检测周围环境的光线的亮度,触发单片机或继电器模块等;2、模块在环境光线亮度达不到设定阈值时,DO端输出高电平,当外界环境光线亮度超过设定阈值时,DO端输出低电平;3、DO输出端可以与单片机直接相连,通过单片机来检测高低电平,由此来检测
[单片机]
STM32-cortex-M4串口调试
按说,串口调试应该是很简单的,可就偏偏困扰了我将近两个周的时间,一筹莫展,接收GPS模块发来的数据一直不对,今天早上通过GPS例程与我编写的简单程序一对比,发现USART3初始化不一致, 例程是uart_init(84,115200);usart3_init(42,38400); 而我的初始化是uart_init(84,115200);usart3_init(84,38400); USART1与USART3,前者挂在APB2总线(高速总线)下,最大时钟是84MHz,后者挂在APB1总线(低速总线)下最大时钟是42MHz。所以usart3_init初始化参数中设置为84是错误的,所以数据接收不正确。 所以时钟在ARM-微控制器
[单片机]