stm32学习
stm32f4内部的flash
stm32芯片内部有一个flash存储器,主要用于存储编译之后烧录进来的代码,由于flash存储器的内容在掉电之后不会丢失,芯片重新上电复位之后内核可以从内部flash中加载代码并运行。
除了使用外部的工具(如下载器)读写内部FLASH外,STM32F4芯片在运行的时候,也能对自身的内部FLASH进行读写,因此,若内部FLASH存储了应用程序后还有剩余空间,我们可以把它像外部SPI-FLASH那样利用起来,存储一些程序运行时产生的需要掉电保存的数据。
由于访问内部FLASH比外部SPI-FLASH的速度快的多,所以在紧急状态下常常会使用内部FLASH存储关键记录;为了防止应用程序被抄袭,有的应用会禁止读写内部FLASH中的内容,或者在第一次运行时计算机机密信息并记录到某些区域,然后删除自身的部分加密代码,这些都涉及到内部FLASH的操作。
芯片内部存储的分区
主存储器
- 介绍芯片时提到的flash的内存的大小都是指主存储器的大小,用于存放代码和数据常量(例如const类型的数据)。
- 主存储器分为256页,每页大小2KB,一共512KB。这个分页就是FLASH的存储扇区,与其他的FLASH一样,写入数据前要先按照页就是扇区进行擦除。
- stm32f4的主存储器分为4个 16KB 扇区、1个 64KB 扇区和 7个 128KB 扇区
stm32的型号:STM32F4ZG
G代表FLASH的大小
4表示16KB; 6表示32KB; 8表示64KB; B表示128KB
C表示256KB; E表示512KB; F表示768KB; G表示1024KB
闪存存储器接口寄存器
- 用于控制闪存读写,是整个闪存模块的控制机构
- 在执行闪存写操作时,任何对闪存的读操作都是锁住总线,在写操作完成后,读操作才能正确进行;也就是说在进行写或者擦除操作时,不能进行数据或者代码的读取操作。
内部FLASH写入过程
解锁
由于内部FLASH空间主要存储的是应用程序。是非常关键的数据,为了防止误操作修改了这些内容,芯片复位后默认会给 FLASH 上锁,这个时候不再允许设置 FLASH 的控制寄存器,同时也不能修改 FLASH 中的内容。所以对 FLASH 写入程序之前,需要先对其进行解锁操作。
- 往 FLASH 密钥寄存器 FLASH_KEYR 中写入 KEY1=0x45670123
- 再往 FLASH 密钥寄存器 FLASH_KEYR 中写入 KEY2=0xCDEF89AB
擦除扇区
在写入新的数据前,需要先擦除存储区域,STM32提供了扇区擦除指令和 整个FLASH擦除——批量擦除的指令,批量擦除指令仅针对主存储区。
扇区擦除的过程
- 检查FLASH_SR状态寄存器的 “忙碌寄存器BSY” ,以确认当前未执行任何FLASH操作
- 在FLASH_CR寄存器中,将 “激活页擦除寄存器位PER” 置1
- 用FLASH_AR寄存器选择要擦除的页
将FLASH_CR控制寄存器中的 “开始擦除寄存器位STRT” 置1,开始擦除 - 等待BSY位被清零,表示擦除完成
写入数据
擦除完毕后即可写入数据,写入数据的过程并不是仅仅使用指针指向地址赋值,赋值前还需要配置一系列的寄存器
- 检查FLASH_SR状态寄存器中的BSY位,以确认当前未执行任何其他的内部FLASH操作
- 将FLASH_CR控制寄存器中 “激活编程寄存器位PG” 置1
- 向指定的FLASH存储器地址执行数据写入操作,每次只能以16位的方式写入
- 等待BSY位被清零时,表示写入成功
查看工程的空间分布
由于内部FLASH本身存储有程序数据,若不是有意删除某段程序代码,一般不应该修改程序空间的内容,所以在使用内部FLASH存储其他数据前需要了解哪一些空间已经写入了程序代码,存储了程序代码的扇区都不应做任何的修改。通过查询应用程序编译时产生的 “*.map” 后缀文件,可以了解程序存储到了哪些区域。
系统存储器
系统存储器是STM32开发板出厂之前就已经使用的一块区域,用户是无法访问系统存储区的,主要是做串口下载程序的支持,以及USB、CAN等ISP烧录功能。(系统存储器主要是用来存放STM32F4的bootloader代码,此代码是出厂的时候就固化在STM32F4里面的,专门来给主存储器下载代码的)
OTP区域
一次性可编程区域,共528字节,被分成两部分,前面512个字节(32字节为1块,分成16块),可以用来存储一些用户数据(一次性的,写完一次,永远不可以擦除)后面16个字节,用于锁定对应块。
选项字节区域
选项字节区域是用来配置FLASH的读写保护、待机/停机、软件/硬件看门狗功能。可以通过修改FLASH的选项控制寄存器进行修改。
鼎新图蓝牙使用
- 波特率,置低波特率为9600,置高为115200,其他波特率值只能用AT设置
- 密码,置低密码方式1=8888,置高默认密码0000
- 主从模式,置低为从设备,置高为主设备
- 距离class级别切换,置低class1设备,置高为class2设备
- 拨码有效,置低pio按键无效,置高有效
- 清零,置高保持5秒再置低
- 数据模式置高5秒再复位-启动清零=模块做清楚地址码并重新搜索工作。
- AT模式置高5秒再复位-启动清零+恢复=模块做彻底清零并恢复到出厂设置,并重新启动。
- 主机切换连接至从机2,至低-时为当前从机,至高+为切换至另一个
- AT/数据模式切换,置低数据模式,AT无效,置高AT状态,红灯亮起
绿灯常亮为成功配对,若要清零,把5或8,和6一起置高,等五秒再置低
淘宝网站