关于STM32的IAP总结

发布者:RoboPilot最新更新时间:2021-04-06 来源: eefocus关键字:STM32 手机看文章 扫描二维码
随时随地手机看文章

最近有项目要用到IAP的功能,于是调试了下STM32的IAP,可能因为个人水平的原因吧,也颇 费了一般周折


现在返回头来想,其实还是蛮简单的. 整个过程按照如下步骤:

1.解锁

2.判断是否保护,有保护的话要先关闭保护

3.擦除

4.编程

5.复位进入应用程序区


关于解锁:看资料的时候说的神乎其神,有个读/编程控制器叫”FPEC 有几个寄存器,专门负责Flash的,对这几个寄存器以一定得顺序访问并设置即可成功解锁Flash,至于怎么访问,谁先谁后,数据手册上写的头晕,直接来个快刀斩乱麻Flash_UnLock()函数封装了这一系列的操作,有一点要注意,如果你是自己操作寄存器的话,如果操作的方法或者顺序不对都会造成Flash的锁定,之后的所有操作都会返回一个错误,直到下次启动后才能 正常操作关于保护,为了保护用户数据不被无意修改或者恶意读取,STM32提供了对芯片FLASH的写读等一系列的保护,加密方式是按照每4页为一个单位,也就是说,如果你想加密的话,你至少要加密4页,也就至少4K的空间,至于高密的STM32是否就是8K了?这个我没仔细去看!还待以后仔细查看?


关于擦除,擦除也是很简单,但是只能一页一页的擦除,ST公司也提供了一个函数,至于这个函数后面的输入地址参数,经过试验发现只要这个地址落在这个页里,就是擦除这个页,不知道这样理解对不对,还需要验证???


FLASHStatus=FLASH_ErasePage(Address);

关于编程,STM32编程一次只能以半字(16位)的方式编程,库提供了两个函数

FLASH_StatusFLASH_ProgramWord(u32Address,u32Data)编程一个字

FLASH_StatusFLASH_ProgramHalfWord(u32Address,u16Data)编程半个字在实际编程虽然你调用的一个字编程的时候内部操作仍然是按照半字的方式编程另外还有个最最重要的一点:还要注意大小端的问题,有些你认为可移植性很好的代码,其实并不一定,用位移组合成一个32位整型,然后当做参数来编程,由于大小端的模式,刚好第一个字节在最后边了,最后一个字节在前面了,导致了AN2557下载我的代码可以使用,我自己的下载我自己的代码竟然不能使用,很是郁闷了一阵子,读出整个Flash的内容就很容易看出来不同了,这个没有想到也着实该死,后来用指针强指,不但效率高了,程序也方便了,汗一个!


为什么有些人说STM32的IAP其实一个半成品,不成熟的呢????这个还需以后了解!关于应用程序还有些要说,在写应用程序的时候,只要记住,你的应用程序放在哪个地方,记得要在工程设置里设置一下,我用的是MDK,这点比IAR方便一些,指定你的代码从哪个地址加载,然后还要指定你的代码区的Size,也就是你芯片flash的总size


减去IAP程序的Size后得到的,这个设置的地方在projectOptionsforTarget的IROM1这个位置指定,还有一个地方,在Linker页面有个项也要指定R/OBase设置包含RO输出段的常量和代码域地址。地址必须为字对齐。如果没有指定,缺省的RO地址为0x8000。这里也要设置成应用程序启动的地址R/O基地址含有初始化程序的入口地址。最最重要的一点,中断向量表的映射,因为应用程序从其它地方启动了,向量表同样也要增加偏移,


不然中断入口找不到可是个麻烦事

NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x2000);

这个函数就是做这个的,第二个参数是相对的,不是绝对的,也就是基地址+第二个参数其它好像也没什么了

关键字:STM32 引用地址:关于STM32的IAP总结

上一篇:基于VS1003B的语音通信方法研究
下一篇:基于RFID的医疗器械智能控制系统设计

推荐阅读最新更新时间:2024-11-10 14:14

再造STM32---第十七部分:USART—串口通讯
本章参考资料:《STM32F4xx 中文参考手册》 USART 章节。 学习本章时,配合《STM32F4xx 中文参考手册》 USART 章节一起阅读,效果会更佳,特别是涉及到寄存器说明的部分。 特别说明, 本书内容是以 STM32F42xxx 系列控制器资源讲解。 17.1 串口通讯协议简介: 物理层: 规定通讯系统中具有机械、电子功能部分的特性,确保原始数据在物理媒体的传输。其实就是硬 件部分。 协议层: 协议层主要规定通讯逻辑,统一收发双方的数据打包、解包标准。其实就是软件部分。 1-RS232标准: RS232标准串口通讯结构图: 1、 RS232标准串口主要用于工业设备直接通信 2、电平转换芯片一般有M
[单片机]
再造STM32---第十七部分:USART—串口通讯
STM32串口一直进中断解决方法
今天在使用USART模块,遇到了一些问题并解决了,于是发贴共享。 问题描述: 在使用USART做串口通讯时,我只把接收中断打开,并设置抢占优先级为最低一个级别,而接收中断上一个优先级处理事情比较多,可能占用了2ms时间。当我使用9600波特率往下位机发送数据,速度非常快,就是一直按回车发!问题就出来,不到1分钟时间,通讯没有反应了。USART配置代码如下: void uart_config(void) { USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate = UART_GetBaud(BaudRate);
[单片机]
<font color='red'>STM32</font>串口一直进中断解决方法
STM32中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
STM32F334C8T6这款MCU中有两个12位ADC(模数转换器),ADC1的通道16连接到内置的一个温度传感器,本文使用该温度传感器测量MCU和周围的环境温度,并且通过串口发送到PC的串口助手进行显示。 1. ADC的使用 1. select the ADC clock using the function RCC_ADCCLKConfig() 2. Enable the ADC interface clock using RCC_AHBPeriphClockCmd(); 3. ADC pins configuration  Enable the clock for the ADC GPIOs using the fo
[单片机]
<font color='red'>STM32</font>中ADC的使用/printf函数重定向串口显示内部温度传感器测量值
STM32的窗口看门狗(WWDG)
一、窗口看门狗由从APB1时钟分频后得到时钟驱动。 通过可配置的时间窗口来检测应用程序非正常的过迟或过早操作。 窗口看门狗最适合那些要求看门狗在精确计时窗口起作用的程序。 二、什么是窗口看门狗? 窗口就是因为其喂狗时间是一个有上下限的范围内(窗口),你可以通过设定相关寄存器,设定其上限时间(下限固定)。喂狗的时间不能过早也不能过晚。 而独立看门狗限制喂狗时间在0-x内,x由相关寄存器决定。喂狗的时间不能过晚 三、窗口看门狗的好处 对于一般的看门狗,因为是在复位前的任意时刻刷新看门狗,但有可能程序跑乱了又跑回到正常的地方,或跑乱的程序正好执行了刷新看门狗操作,这样的情况下就检测不
[单片机]
<font color='red'>STM32</font>的窗口看门狗(WWDG)
STM32——滴答定时器
时钟作为芯片的心脏,芯片依靠时钟维持运动的状态。 stm32的延时函数,依赖滴答定时器,独立的提供延时。 滴答定时器: 时钟是由HCLK经过8分频来作为小心脏的。假设HCLK时钟为72MHz,8分频后,滴答定时器频率为9MHz,即一个时钟周期为1/9us。 在我们使用滴答定时器进行us定时时,需要修改fac_us的值,假设设定HCLK时钟为72MHz,则fac_us应该设定为9,使delay_us()保持1us。 以下为SysTick定时器us的延时函数。 //nus为要延时的us数. void delay_us(u32 nus) { u32 temp; SysTick- LOAD=nus*fac_us; //时间加载
[单片机]
STM32定时器输出比较(PWM)
前言: 1.本博文基于ARM Cortex-M3内核的STM32F103ZET6处理器芯片和标准3.5.0库函数; 2.不介绍PWM的基础概念,但是需要知道一点的是,PWM是输出比较的一种特例; 3.如有不足指出,还望前辈多多指教; 4.要想学会这个知识点,必须要掌握下面这位博友写的博客里的几个概念,不然后来很有可能会懵逼; http://blog.sina.com.cn/s/blog_3ba262a10101esd1.html Ⅰ 定时器和PWM (1)8个定时器中,除了TIM6和TIM7,其他定时器都可以产生PWM输出; (2)高级定时器TIM1和TIM8可以同时输出7路PWM(CH1~7,共7个通道),通用定时器同时可产
[单片机]
<font color='red'>STM32</font>定时器输出比较(PWM)
基于STM32单片机的盆栽系统设计
一.系统设计 本次盆栽系统的设计使用STM32单片机作为控制中心,通过光敏模块检测光照强度,通过DHT11测量温湿度,通过土壤湿度传感器检测土壤湿度,检测到的数据通过LCD显示屏显示,当土壤湿度低于下限时,继电器控制灌溉,当土壤湿度高于上限时,继电器控制除湿,当温度低于阈值时,继电器控制加热,当光强低于阈值时,继电器控制补光。 图1 系统框图 二.硬件设计 本设计所采用的STM32F103C8T6是以Cortex-3为核心的单片机,它的功能是实现软件的执行,并对外部的器件、模块进行控制。该系统由LCD显示模块,温湿度检测模块,光敏电阻模块,湿度检测模块,继电器模块组成。 图2 硬件电路 三.软件设计 系统的软件实现过程中首
[单片机]
基于<font color='red'>STM32</font>单片机的盆栽系统设计
STM32-1-STM32时钟系统
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。 ①HSI是高速内部时钟,RC振荡器,频率为8MHz。 ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。 ③LSI是低速内部时钟,RC振荡器,频率为40kHz。 ④LSE是低速外部时钟,接频率为32.768kHz的石英晶体。 ⑤PLL为锁相环倍频输出,其时钟输入源可选择为HSI/2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。 在STM32上如果不使用外部晶振,OSC_IN和OSC_OUT的接法 如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于10
[单片机]
STM32-1-STM32时钟系统
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved