STM32(MDK-ARM)(标准库)(江科大笔记)

目录

MDK-ARM

基本特点:

MDK的使用

工程设置:

新建工程

        RCC时钟树

GPIO

GPIO简介:

GPIO模式:

OLED

简介:

调试方式:

OLED驱动函数:

    EXTI外部中断

中断系统 :

AFIO:(中断引脚选择)

EXTI:(外部中断/事件控制器)

NVIC:(确定外部中断的优先级)

TIM

TIM简介:

TIM定时中断:

TIM输出比较:

输出比较通道(通用):

输出比较通道(高级):

输出模式比较:

PWM:

TIM输入捕获:

输入捕获通道:

频率测量:

主从触发模式:

TIM编码器接口:

正交编码器:

工作模式:

ADC

输入通道:

转换模式:

触发控制:

数据对齐:

转换时间:

校准:

DMA

存储器映像:

DMA请求:

数据宽度与对齐:

USART

USART串口协议

通信接口:

串口通信:

硬件电路:

电平标准:

串口参数及时序:

USART串口外设

USART简介:

USART框图:

USART基本结构:

数据帧:

​编辑

数据采样:

波特率发生器:

USART串口数据包

数据模式

HEX数据包:

文本数据包:

I2C

硬件电路

I2C时序基本单元

起始条件&终止条件

发送一个字节

接收一个字节

发送应答&接收应答

I2C时序

指定地址写

当前地址读

指定地址读

MPU6050

硬件电路

MPU6050框图

I2C外设

I2C框图 

I2C基本结构

主机发送与主机接收

SPI

硬件电路

SPI基本时序单元

起始条件&终止条件

交换一个字节(模式0)

交换一个字节(模式1)

交换一个字节(模式2)

交换一个字节(模式3)

SPI时序

发送指令

指定地址写

指定地址读

W25Q64

硬件电路

W25Q64框图

flash操作注意事项

SIP外设

SPI框图

SPI基本结构

连续传输与非连续传输

连续传输

非连续传输

RTC

Unix时间戳

UTC/GMT

时间戳转换

BKP简介

BKP基本结构

RTC简介

RTC框图

RTC基本结构

RTC操作注意事项

PWR

电源框图

低功耗模式

模式选择

睡眠模式

停机模式

待机模式

WDG

IWDG框图

IWDG键寄存器

IWDG超时时间

WWDG框图

WWDG工作特性

WWDG超时时间

IWDG和WWDG对比

FLASH

闪存模块组织

flash基本结构

flash解锁

指针访问存储器

程序存储器编程

程序存储器页擦除

程序存储器全擦除

选项字节

选项字节编程

选项字节擦除

器件电子签名



MDK-ARM

基本特点:

  • 支持源代码的编辑、编译、程序的下载和调试等多种功能
  • 编译器和器件支持包分离,可根据需求安装,减小软件大小
  • 提供多种中间件,如RTOS何GUI等,提高开发效率
  • 强大的仿真功能,可以仿真控制器片内所有资源

MDK的使用

STM32(MDK-ARM)(标准库)(江科大笔记)_第1张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第2张图片

工程设置:

STM32(MDK-ARM)(标准库)(江科大笔记)_第3张图片

Device标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第4张图片

Target标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第5张图片

Output标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第6张图片

Listing标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第7张图片

User标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第8张图片

C/C++标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第9张图片

ASM标签页(默认即可)

Linker标签页(默认即可)

Debug标签页:

STM32(MDK-ARM)(标准库)(江科大笔记)_第10张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第11张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第12张图片

Utilities标签页(默认即可)


新建工程

  1. 建立工程文件夹,Keil中新建工程,选择型号
  2. 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
  3. 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
  4. 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
  5. 工程选项,C/C++,Define内定义 USE_STDPERIPH_DRIVER
  6. 工程选项,Debug,下拉列表选择对应调试器,Setting、Flash Download里勾选Reset and Run


        RCC时钟树

STM32(MDK-ARM)(标准库)(江科大笔记)_第13张图片


GPIO

GPIO简介:

  • GPIO(general purpose input output)通用输入输出口
  • 可配置为八种输入输出模式
  • 引脚电平:0V ~ 3.3V,部分引脚课容忍5V(具体看手册)
  • 输出模式下可控制端口输出高低电平、用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等
  • 输入模式下可读取端口的高低电平或电压,用以读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等

STM32(MDK-ARM)(标准库)(江科大笔记)_第14张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第15张图片

GPIO模式:

模式名称 性质 特征
浮空输入 数字输入 可读取引脚电平,若引脚悬空,则电平不确定
上拉输入 数字输入 可读取引脚电平,内部连接上拉电阻,悬空时默认高电平
下拉输入 数字输入 可读取引脚电平,内部连接下拉电阻,悬空时默认低电平
模拟输入 模拟输入 GPIO无效,引脚直接接入内部ADC
开漏输出 数字输出 可输出引脚电平,高电平为高阻态,低电平接VSS
推挽输出 数字输出 可输出引脚电平,高电平接VDD,低电平接VSS
复用开漏输出 数字输出 由片上外设控制,高电平为高阻态,低电平接VSS
复用推挽输出 数字输出 由片上外设控制,高电平接VDD,低电平接VSS

STM32(MDK-ARM)(标准库)(江科大笔记)_第16张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第17张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第18张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第19张图片


OLED

简介:

  • OLED(Organic Light Emitting Diode):有机发光二极管
  • OLED显示屏:性能优异的新型显示屏、具有功耗低、响应速度快、宽视角、轻薄柔韧等特点
  • 0.96寸OLED模块:小巧玲珑、占用接口少、简单易用,是电子设计中非常常见的显示屏模块
  • 供电:3~5.5V,通信协议:I2C/SPI,分辨率128*64

调试方式:

  • 串口调试:通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息
  • 显示屏调试:直接将显示屏连接到单片机,将调试信息打印在显示屏上
  • Keil调试模式:借助Keil软件的调试模式,可使用单步运行、设置断点、查看寄存器及变量等功能

OLED驱动函数:

函数 作用
OLED_Init() 初始化
OLED_Clear() 清屏
OLED_ShowChar() 显示一个字符
OLED_ShowString() 显示字符串
OLED_ShowNum() 显示十进制数字
OLED_ShowSignedNum() 显示有符号十进制数字
OLED_ShowHexNum() 显示十六进制数字
OLED_ShowBinNum() 显示二进制数字

    EXTI外部中断

中断系统 :

  •  中断:在主程序运行过程中,出现了特定的中断触发条件,使得CPU暂停当前正在运行的程序,转而去处理中断程序,处理完成后又返回到原来被暂停的位置继续运行
  • 中断优先级:当有多个中断源同时申请中断时,CPU会根据中断源的轻重缓急进行裁决,优先响应更加紧急的中断源
  • 中断嵌套:当一个中断程序正在运行时,又有新的更高优先级的中断源申请中断,CPU再次暂停当前中断程序,转而去处理新的中断程序,处理完成后依次进行返回

AFIO:(中断引脚选择)

  • 外部中断寄存器1(AFIO_EXTICR1)
  • 外部中断寄存器2(AFIO_EXTICR2)
  • 外部中断寄存器3(AFIO_EXTICR3)
  • 外部中断寄存器4(AFIO_EXTICR4)

STM32(MDK-ARM)(标准库)(江科大笔记)_第20张图片

EXTI:(外部中断/事件控制器)

  • EXTI(extern interrupt) 外部中断
  • EXTI可以检测指定GPIO口的电平信号,当其指定的GPIO口产生电平变化时,EXTI将立即向NVIC发出中断申请,经过NVIC裁决后即可中断CPU主程序,使CPU执行EXTI对应的中断程序
  • 支持的触发方式:上升沿/下降沿/双边沿/软件触发
  • 支持的GPIO口:所有的GPIO口,但相同的Pin不能同时触发中断
  • 触发响应方式:中断响应/事件响应

  • 中断屏蔽寄存器(EXTI_IMR)
  • 事件屏蔽寄存器(EXTI_EMR)
  • 上升沿触发选择寄存器(EXTI_RTSR)
  • 下降沿触发选择寄存器(EXTI_FTSR)
  • 软件中断事件寄存器(EXTI_SWIER)
  • 挂起寄存器(EXTI_PR)

STM32(MDK-ARM)(标准库)(江科大笔记)_第21张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第22张图片

NVIC:(确定外部中断的优先级)

  • NVIC的中断优先级由优先级寄存器的4位(0~15)决定,这4位可以进行切分、分为高n位的抢占优先级和低4~n位的响应优先级
  • 抢占优先级高的可以中断嵌套、响应优先级高的可以优先排队,抢占优先级和响应优先级均相同的按中断号排队

STM32(MDK-ARM)(标准库)(江科大笔记)_第23张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第24张图片


TIM

TIM简介:

  • TIM(Timer)定时器
  • 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断
  • 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现59。65的定时
  • 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能
  • 根据复杂度和应用场景为了高级定时器、通用定时器、基本定时器三种类型
类型 编号 总线 功能
高级定时器 TIM1、TIM8 APB2 拥有通用定时器全部功能、并额外具有重复计时器、死区生成、互补输出、刹车输入等功能
通用定时器 TIM2、TIM3、TIM4、TIM5 APB1 拥有基本定时器全部功能,并额外具有内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等功能
基本定时器 TIM6、TIM7 APB1 拥有定时中断、主模式触发DAC的功能

STM32(MDK-ARM)(标准库)(江科大笔记)_第25张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第26张图片

TIM定时中断:

STM32(MDK-ARM)(标准库)(江科大笔记)_第27张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第28张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第29张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第30张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第31张图片

TIM输出比较:

  • OC(Output Compare)输出比较
  • 输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平置1、置0或翻转的操作,用于输出有一定频率和占空比的PWM波形
  • 每个高级定时器和通用定时器都拥有4个输出比较通道
  • 高级定时器的前3个通道额外拥有死区生成和互补输出的功能

输出比较通道(通用):

STM32(MDK-ARM)(标准库)(江科大笔记)_第32张图片

输出比较通道(高级):

STM32(MDK-ARM)(标准库)(江科大笔记)_第33张图片

输出模式比较:

STM32(MDK-ARM)(标准库)(江科大笔记)_第34张图片

PWM:

  • PWM(pulse width modulation)脉冲宽度调制
  • 在具有惯性的系统中,可以通过对一系列脉冲的宽度进行调制,来等效的获得所需要的模拟参量,常应用于电机控速等领域
  • PWM参数:频率=1/T s    占空比=T on /  T s      分辨率=占空比变化步距      

STM32(MDK-ARM)(标准库)(江科大笔记)_第35张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第36张图片

TIM输入捕获:

  • IC(Input Capture)输入捕获
  • 输入捕获模式下,当通道输入引脚出现指定电平跳变时,当前CNT的值将被锁存到CCR中,可用于测量PWM波形的频率、占空比、脉冲间隔、电平持续时间等参数
  • 每个高级定时器和通用定时器都拥有4个输入捕获通道
  • 可配置为PWMI模式,同时测量频率和占空比
  • 可配合主从触发模式,实现硬件全自动测量

输入捕获通道:

STM32(MDK-ARM)(标准库)(江科大笔记)_第37张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第38张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第39张图片

频率测量:

STM32(MDK-ARM)(标准库)(江科大笔记)_第40张图片

主从触发模式:

STM32(MDK-ARM)(标准库)(江科大笔记)_第41张图片

TIM编码器接口:

  • Encoder Interface 编码器接口
  • 编码器接口可接受增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
  • 每个高级定时器和通用定时器都拥有1个编码器接口
  • 两个输入引脚借用了输入捕获的通道1和通道2

STM32(MDK-ARM)(标准库)(江科大笔记)_第42张图片

正交编码器:

STM32(MDK-ARM)(标准库)(江科大笔记)_第43张图片

工作模式:

STM32(MDK-ARM)(标准库)(江科大笔记)_第44张图片


ADC

  • ADC(Analog-Digital Converter)模拟-数字转换器
  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
  • 12位逐次逼近ADC,1us转换时间
  • 输入电压范围:0~3.3V ,转换结果范围:0~4095
  •  18个输入通道,可测量16个外部和2个内部信号源
  • 规则组和注入组两个转换单元
  • 模拟看门狗自动监测输入电压范围
  • STM32F103C8T6    ADC资源:ADC1、ADC2,10个外部输入通道

STM32(MDK-ARM)(标准库)(江科大笔记)_第45张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第46张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第47张图片

输入通道:

STM32(MDK-ARM)(标准库)(江科大笔记)_第48张图片

转换模式:

STM32(MDK-ARM)(标准库)(江科大笔记)_第49张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第50张图片

触发控制:

STM32(MDK-ARM)(标准库)(江科大笔记)_第51张图片

数据对齐:

STM32(MDK-ARM)(标准库)(江科大笔记)_第52张图片

转换时间:

STM32(MDK-ARM)(标准库)(江科大笔记)_第53张图片

校准:

STM32(MDK-ARM)(标准库)(江科大笔记)_第54张图片


DMA

  • DMA(Direct Memory Access) 直接存储器存取
  • DMA可以提供外设和存储器或者存储器和存储器之间的高速数据传输,无需CPU干预,节省了CPU资源
  • 12个独立可配置的通道:DMA1(7个通道),DMA2(5个通道)
  • 每个通道都支持软件触发和特定的硬件触发
  • STM32F103C8T6    DMA资源:DMA1(7个通道)

STM32(MDK-ARM)(标准库)(江科大笔记)_第55张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第56张图片

存储器映像:

STM32(MDK-ARM)(标准库)(江科大笔记)_第57张图片

DMA请求:

STM32(MDK-ARM)(标准库)(江科大笔记)_第58张图片

数据宽度与对齐:

STM32(MDK-ARM)(标准库)(江科大笔记)_第59张图片


USART

USART串口协议

通信接口:

  • 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统
  • 通信协议:制定通信的规则,通信双方按照协议规定进行数据收发

STM32(MDK-ARM)(标准库)(江科大笔记)_第60张图片

串口通信:

  • 串口是一种应用广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备之间的互相通信
  • 单片机的串口可以使单片机与单片机、单片机与电脑、单片机与各式各样的模块互相通信,极大地扩展了单片机的应用范围,增强了单片机系统的硬件实力

硬件电路:

  • 简单双向串口通信有两根通信线(发送端TX 和 接收端RX)
  • TX与RX要交叉连接
  • 当只需单向的数据传输时,可以只接一根通信线
  • 当电平标准不同时,需要加电平转换芯片

STM32(MDK-ARM)(标准库)(江科大笔记)_第61张图片

电平标准:

  • 电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系,串口常用的电平标准有以下三种:
  1. TTL电平::+3.3V 或+5V表示1,0V表示0
  2. RS232电平:-3V ~-15V表示1,+3V ~+15V表示0
  3. RS485电平:两线压差+2~+6V表示1,-2~-6V表示0(差分信号)

串口参数及时序:

  • 波特率:串口通信的速率
  • 起始位:标志一个数据位的开始,固定为低电平
  • 数据位:数据帧的有效载荷,1为高电平,0为低电平,低位先行
  • 校验位:用于数据验证,根据数据为计算得来
  • 停止位:用于数据帧间隔,固定位高电平

STM32(MDK-ARM)(标准库)(江科大笔记)_第62张图片

USART串口外设

USART简介:

  • USART 通用同步/异步收发器
  • USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,从TX引脚发送出去,也可以自动接收RX引脚的数据帧时序,拼接位一个字节数据,存放在数据寄存器里
  • 自带波特率发生器,最高达4.5Mbit/s
  • 可配置数据位长度,停止位长度
  • 可选校验位(无校验,奇校验,偶校验)
  • 支持同步模式,硬件流控制,DMA,智能卡,IrDA,LIN
  • STM32F103C8T6 USART资源:USART1、USART2、USART3

USART框图:

STM32(MDK-ARM)(标准库)(江科大笔记)_第63张图片

USART基本结构:

STM32(MDK-ARM)(标准库)(江科大笔记)_第64张图片

数据帧:

STM32(MDK-ARM)(标准库)(江科大笔记)_第65张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第66张图片

数据采样:

STM32(MDK-ARM)(标准库)(江科大笔记)_第67张图片

波特率发生器:

  • 发送器和接收器的波特率由波特率寄存器BRR里的DIV确定
  • 计算公式:波特率=fpclk2/1   /   (16*DIV)

STM32(MDK-ARM)(标准库)(江科大笔记)_第68张图片

USART串口数据包

数据模式

  • HEX模式/十六进制模式/二进制模式:以原始的数据显示
  • 文本模式/字符模式:以原始数据编码后的形式显示

HEX数据包:

STM32(MDK-ARM)(标准库)(江科大笔记)_第69张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第70张图片

文本数据包:

STM32(MDK-ARM)(标准库)(江科大笔记)_第71张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第72张图片


I2C

  • I2C(Inter IC Bus)是由philip公司开发的一种通用数据总线
  • 两根通信线:SCL(serial clock)、SDA(serial data)
  • 同步、半双工
  • 带数据应答
  • 支持总线挂载多设备

硬件电路

STM32(MDK-ARM)(标准库)(江科大笔记)_第73张图片

I2C时序基本单元

起始条件&终止条件

STM32(MDK-ARM)(标准库)(江科大笔记)_第74张图片

发送一个字节

STM32(MDK-ARM)(标准库)(江科大笔记)_第75张图片

接收一个字节

STM32(MDK-ARM)(标准库)(江科大笔记)_第76张图片

发送应答&接收应答

STM32(MDK-ARM)(标准库)(江科大笔记)_第77张图片

I2C时序

指定地址写

STM32(MDK-ARM)(标准库)(江科大笔记)_第78张图片

当前地址读

STM32(MDK-ARM)(标准库)(江科大笔记)_第79张图片

指定地址读

STM32(MDK-ARM)(标准库)(江科大笔记)_第80张图片

MPU6050

  • MPU6050是一个六轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合,可进一步得到姿态角,进行姿态解算。
  • 3轴加速度计(accelerometer):测量自身X、Y、Z轴的加速度
  • 3轴陀螺仪传感器(gyroscope):测量自身X、Y、Z轴的角速度
  • 16位ADC采集传感器的模拟信号,量化范围:-32768~32767
  • 加速度计满量程选择:±2、±4、±8、±16(g)
  • 陀螺仪满量程选择:±250、±500、±1000、±2000(°/s)
  • 可配置的数字低通滤波器
  • 可配置的时钟源
  • 可配置的采样分频
  • I2C从机地址:1101000(AD=0)、1101001(AD=1)

硬件电路

STM32(MDK-ARM)(标准库)(江科大笔记)_第81张图片

MPU6050框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第82张图片

I2C外设

  • STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担
  • 支持多主机模型
  • 支持7位/10位地址模式
  • 支持不同的通讯速度、标注速度(100khz),快速(400khz)
  • 支持DMA
  • 兼容SMBus协议
  • STM32F103C8T6硬件I2C资源:I2C1、I2C2

I2C框图 

STM32(MDK-ARM)(标准库)(江科大笔记)_第83张图片

I2C基本结构

STM32(MDK-ARM)(标准库)(江科大笔记)_第84张图片

主机发送与主机接收

STM32(MDK-ARM)(标准库)(江科大笔记)_第85张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第86张图片


SPI

  • SPI(serial peripheral interface)是由Motorola公司开发的一种通用数据总线
  • 四根通讯线:SCK(serial clock)、MOSI(master output slave input)、MISO(master input slave output)、SS(slave select)
  • 同步、全双工
  • 支持总线挂载多设备

硬件电路

  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接入个从机的SS引脚
  • 输出引脚配置位推挽输出,输入引脚配置为浮空或上拉输入

STM32(MDK-ARM)(标准库)(江科大笔记)_第87张图片

SPI基本时序单元

起始条件&终止条件

STM32(MDK-ARM)(标准库)(江科大笔记)_第88张图片

交换一个字节(模式0)

STM32(MDK-ARM)(标准库)(江科大笔记)_第89张图片

交换一个字节(模式1)

STM32(MDK-ARM)(标准库)(江科大笔记)_第90张图片

交换一个字节(模式2)

STM32(MDK-ARM)(标准库)(江科大笔记)_第91张图片

交换一个字节(模式3)

STM32(MDK-ARM)(标准库)(江科大笔记)_第92张图片

SPI时序

发送指令

STM32(MDK-ARM)(标准库)(江科大笔记)_第93张图片

指定地址写

STM32(MDK-ARM)(标准库)(江科大笔记)_第94张图片

指定地址读

STM32(MDK-ARM)(标准库)(江科大笔记)_第95张图片

W25Q64

  • W25QXX系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景
  • 存储介质:Nor flash(闪存)
  • 时钟频率:80MHz、160MHz、320MHz
  • 存储容量(24位地址):

        W25Q40:4Mbit

        W25Q80:8Mbit

        W25Q16:16Mbit

        W25Q32:32Mbit

        W25Q64:64Mbit

        W25Q128:128Mbit

        W25Q256:256Mbit

硬件电路

STM32(MDK-ARM)(标准库)(江科大笔记)_第96张图片

W25Q64框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第97张图片

flash操作注意事项

写入操作时:

  • 写入操作前,必须先进行写使能
  • 每个数据位只能由1写成0,不能由0写成1
  • 写入数据前必须先擦除,擦除后,所有数据位变为1
  • 擦除必须按最小擦除单元进行
  • 连续写入多字节时,最多写入一页的数据,超过页尾的数据会回到页首覆盖
  • 写入操作结束后,芯片进入忙状态,不响应新的读写操作

读取操作时:

直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取

SIP外设

  • STM32内部集成了硬件SPI收发电路,可以由硬件自动执行时钟生成、数据收发等功能,减轻CPU的负担
  • 可配置8位/16位数据帧,高位先行/低位先行
  • 时钟频率:fpclk/(2,4,8,16,32,64,128,256)
  • 支持多主机模型、主或从操作
  • 可精简为半双工/单工通信
  • 支持DMA
  • 兼容I2S协议
  • STM32F103C8T6硬件SPI资源:SPI1、SPI2

SPI框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第98张图片

SPI基本结构

STM32(MDK-ARM)(标准库)(江科大笔记)_第99张图片

连续传输与非连续传输

连续传输

STM32(MDK-ARM)(标准库)(江科大笔记)_第100张图片

非连续传输

STM32(MDK-ARM)(标准库)(江科大笔记)_第101张图片


RTC

Unix时间戳

  • Unix时间戳定义为从UTC/GMT的1970年1月1日0时0分0秒开始所经过的秒数,不考虑闰秒
  • 时间戳存储在一个秒计数器上,秒计数器为32位/64位的整型变量
  • 世界上所有时区的秒计数器相同,不同时区通过添加偏移来得到当地时间

UTC/GMT

  • GMT(greenwich mean time)格林尼治标准时间时一种以地球自转为基础的时间计量系统。它将地球自转一周的时间间隔等分为24小时,以此确定计时标准
  • UTC(universal time coordinate)协调时间时是一种以原子钟为基础的时间计量系统。它规定铯133原子基态的两个超精细能级间在零磁场下跃迁辐射9192631770周所持续的时间为1秒。当原子钟计时一天时间与地球自转一周的时间相差超过0.9秒时,UTC会执行闰秒来保证其jishi与地球自转协调一致

时间戳转换

STM32(MDK-ARM)(标准库)(江科大笔记)_第102张图片

STM32(MDK-ARM)(标准库)(江科大笔记)_第103张图片

BKP简介

  • BKP(backup register)备份寄存器
  • BKP可用于存储用户应用程序数据。当VDD电源被切断,他们仍然由VBAT来供电。当系统在待机模式下被唤醒,或系统复位电源复位时,他们也不会被复位
  • TAMPER引脚产生的侵入事件将所有备份寄存器内容清除
  • RTC引脚输出RTC校准时钟、RTC闹钟脉冲或秒脉冲
  • 存储RTC时钟校准寄存器
  • 用户数据存储量:20字节(中/小容量)、84字节(大容量和互联型)

BKP基本结构

STM32(MDK-ARM)(标准库)(江科大笔记)_第104张图片

RTC简介

  • RTC(real time clock)实时时钟
  • RTC是一个独立的定时器,可为系统提供时钟和日历的功能
  • RTC和时钟配置系统处于后备区域,系统复位时数据不清楚,VDD断电后可借助VBAT供电继续计时
  • 32位可编程计数器:对应Unix时间戳的秒计数器
  • 20位可编程预分频器:可配置不同频率的输入时钟
  • 可选择的三种时钟源:HSE时钟除以128(8MHZ/128)、LSE震荡时钟源(32.768khz)、LSI震荡时钟源(40KHZ)

RTC框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第105张图片

RTC基本结构

STM32(MDK-ARM)(标准库)(江科大笔记)_第106张图片

RTC操作注意事项

  • 执行以下操作将使能对BKP和RTC的访问:设置RCC_APB1ENR的PWREN和BKPEN,使能PWR和BKP的时钟、设置PWR_CR的DBP,使能对BKP和RTC的访问
  • 若在读取RTC寄存器时,RTC的APB1接口曾经处于禁止状态,则软件首先必须等待RTC_CRL寄存器中的RSF位(寄存器同步标志)被硬件置1
  • 必须设置RTC_CRL寄存器中的CNF位,使RTC进入配置模式后,才能写入RTC_PRL、RTC_CNT、RTC_ALR寄存器
  • 对RTC任何寄存器的写操作,都必须在前一次写操作结束后进行。可以通过查询RTC_CR寄存器中的RTOFF状态位,判断RTC寄存器是否处于更新中。仅当RTOFF状态位是1时,才可以写入RTC寄存器

    PWR

  • PWR(power control)电源控制
  • PWR负责管理STM32内部的电源供电部分,可以实现可编程电压检测器和低功耗模式的功能
  • 可编程电压检测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阈值以下或上升到PVD阈值以上时,PVD会触发中断,用于执行紧急关闭任务
  • 低功耗模式包括睡眠模式、停机模式、待机模式,可在系统空闲时,降低STM32的功耗,延长设备使用时间

电源框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第107张图片

低功耗模式

STM32(MDK-ARM)(标准库)(江科大笔记)_第108张图片

模式选择

STM32(MDK-ARM)(标准库)(江科大笔记)_第109张图片

睡眠模式

  • 执行完WFI/WFE指令后,STM32进入睡眠模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
  • SLEEPONEXIT位决定STM32执行完WFI或WFE后,是立刻进入睡眠模式还是等待STM32从最低优先级的中断处理程序中退出时进入睡眠
  • 在睡眠模式下,所有的IO引脚都保持他们在运行时的状态
  • WFI指令进入睡眠模式,可被任意一个NVIC响应的中断唤醒
  • WFE指令进入睡眠模式,可被唤醒事件唤醒

停机模式

  • 执行完WFI/WFE指令后,STM32进入停机模式,程序暂停运行,唤醒后程序从暂停的地方继续运行
  • 1.8V供电区域的所有时钟被停止,PLL、HSI、HSE被禁止,SRAM和寄存器中的内容被保留下来
  • 在停止模式下,所有的io引脚都保持在他们在运行模式的状态
  • 当一个中断或唤醒事件导致退出停机模式时,HSI被选为系统时钟
  • 当电压调节器处于低功耗模式下,系统从停止模式退出时,会有一段额外的启动延时
  • WFI指令进入停机模式,可被任意一个EXTI中断唤醒
  • WFE指令进入停机模式,可被任意一个EXTI事件唤醒

待机模式

  • 执行完WFI/WFE指令后,STM32进入待机模式,唤醒后程序从头开始运行
  • 整个1.8V供电区域被断电,PLL、HSI、HSE也被断电,SRAM和寄存器内容丢失,只有备份的寄存器和待机电路维持供电
  • 在待机模式下,所有的io引脚都变为高阻态(浮空输入)
  • WKUP引脚的上升沿、RTC闹钟事件的上升沿、NRST引脚上外部复位、IWDG复位退出待机模式

WDG

  • WDG(watchdog)看门狗
  • 看门狗可以监控程序的运行状态,当程序因为设计漏洞、硬件故障、电磁干扰等原因,出现卡死或跑飞现象时,看门狗能及时复位程序,避免程序陷入长时间的罢工状态,保证系统的可靠性和安全性
  • 看门狗本质上是一个定时器,当指定时间范围内,程序没有执行喂狗(重置计数器)操作时,看门狗硬件电路就自动产生复位信号
  • STM32内置两个看门狗:独立看门狗(IWDG)、窗口看门狗(WWDG)

IWDG框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第110张图片

IWDG键寄存器

  • 键寄存器的本质上是控制寄存器,用于控制硬件电路的工作
  • 在可能存在干扰的情况下,一般通过在整个键寄存器中写入特定值来代替控制寄存器写入一位的功能,以降低硬件电路受到干扰的概率

STM32(MDK-ARM)(标准库)(江科大笔记)_第111张图片

IWDG超时时间

  • 超时时间:Tiwdg=Tlsi * PR预分频系数*(RL+1)
  • 其中:Tlsi = 1/Flsi

STM32(MDK-ARM)(标准库)(江科大笔记)_第112张图片

WWDG框图

STM32(MDK-ARM)(标准库)(江科大笔记)_第113张图片

WWDG工作特性

  • 递减计数器T[6:0]的值小于0x40时,WWDG产生复位
  • 递减计数器T[6:0]在窗口W[6:0]外被重新装载时,WWDG产生复位
  • 递减计数器T[6:0]等于0x40时可以产生早起唤醒中断(EWI),用于重装载计数器以避免WWDG复位
  • 定期写入WWDG_CR寄存器(喂狗)以避免WWDG复位

STM32(MDK-ARM)(标准库)(江科大笔记)_第114张图片

WWDG超时时间

  • 超时时间:Twwdg=Tpclk1*4096*WDGTB预分频系数*(T[5:0]+1)
  • 窗口时间:Twin=Tpclk1*4096*WDGTB预分频系数*(T[5:0]-W[5:0])
  • 其中:Tpclk1=1/Fpclk1

STM32(MDK-ARM)(标准库)(江科大笔记)_第115张图片

IWDG和WWDG对比

STM32(MDK-ARM)(标准库)(江科大笔记)_第116张图片


FLASH

  • STM32F1系列的flash包含程序存储器、系统存储器和选项字节三个部分,通过闪存存储器接口(外设)可以对程序存储器和选项字节进行擦除和编程
  • 读写flash用途:利用程序存储器剩余空间来保存掉电不丢失的数据、通过在程序中编程(IAP),实现程序的自我更新
  • 在线编程(ICP)用于更新程序存储器的全部内容,他通过JTAG、SWD协议或系统加载程序(BootLoader)下载程序
  • 在程序中编程(IAP)可以通过微控制器支持的任一种通信接口下载程序

闪存模块组织

STM32(MDK-ARM)(标准库)(江科大笔记)_第117张图片

flash基本结构

STM32(MDK-ARM)(标准库)(江科大笔记)_第118张图片

flash解锁

  • FPEC共有三个键值:RDPRT键=0x000000A5、KEY1=0x45670123、KEY2=0xCDEF89AB
  • 解锁:复位后,FPEC被保护,不能写FLASH_CR;在FLASH_KEYR先写入KEY1,再写入KEY2,解锁;错误的操作序列会在下次复位前锁死FPEC和FLASH_CR
  • 加锁:设置FLASH_CR中的LOCK位锁住FPEC和FLASH_CR

指针访问存储器

  • 使用指针读指定地址下的存储器:uint16_t data=*((__IO uint16_t *)(0x08000000))
  • 使用指针写指定地址下的存储器:*((__IO uint16_t *)(0x08000000))=0x1234
  • 其中:#define __IO volatile

程序存储器编程

STM32(MDK-ARM)(标准库)(江科大笔记)_第119张图片

程序存储器页擦除

STM32(MDK-ARM)(标准库)(江科大笔记)_第120张图片

程序存储器全擦除

STM32(MDK-ARM)(标准库)(江科大笔记)_第121张图片

选项字节

STM32(MDK-ARM)(标准库)(江科大笔记)_第122张图片

  • RDP:写入RDPRT键(0x000000A5)后解除读保护
  • USER:配置硬件看门狗和进入停机/待机模式是否产生复位
  • Data0/1:用户可自定义使用
  • WRP0/1/2/3:配置写保护,每一个位对应保护4个存储页(中容量)

选项字节编程

  • 检查FLASH_SR的BSY位,以确认没有其他正在进行的编程操作
  • 解锁FLASH_CR的OPTWRE位
  • 设置FLASH_CR的OPTPG位为1
  • 写入要编程的半字(16字节)到指定的地址
  • 等待BSY位变为0
  • 读出写入的地址并验证数据

选项字节擦除

  • 检查FLASH_SR的BSY位,以确认没有其他正在进行的闪存操作
  • 解锁FLASH_CR的OPTWRE位
  • 设置FLASH_CR的OPTER位为1
  • 设置FLAH_CR的STRT位为1
  • 等待BSY位变为0
  • 读出被擦除的选择字节并做验证

器件电子签名

  • 电子签名存放在闪存存储器模块的系统存储区域,包含的芯片识别信息在出厂时编写,不可更改,使用指针读指定地址下的存储器可获取电子签名
  • 闪存容量寄存器:基地址(0x1FFF F7E0)、大小(16位)
  • 产品唯一身份标识寄存器:基地址(0x1FFF F7E8)、大小(96位)

你可能感兴趣的:(stm32,嵌入式硬件,单片机)