TTL规范
高电平5V
低电平0V
时钟
时钟是单片机运行的基础,时钟信号推动单片机内各个部分执行相应的指令,时钟系统就是CPU的脉搏,决定cpu速率
概况
- STM32为了低功耗,所有外设时钟均为disable(失能),所以配置功能需要先打开对应时钟
- 一个单片机内提供多个不同的时钟系统,可以适应更多的应用场合
寄存器
是CPU用来暂存指令,数据和地址的电脑存储器。寄存器是多个边沿触发器的集合。
边沿触发器
在STM32微控制器中,CRH(Control Register High)和ODR(Output Data Register)是与GPIO(General Purpose Input/Output)相关的寄存器。
- CRH(Control Register High):
-
- CRH是用于配置高位引脚(8至15号引脚)的寄存器。
- 在GPIO模式下,CRH允许你配置引脚的输出类型、输出速率和上下拉电阻。
- 通过设置CRH的不同位,你可以选择将引脚配置为推挽输出、开漏输出,或者输入模式。你还可以选择输出速率和启用上下拉电阻。
- ODR(Output Data Register):
-
- ODR是用于设置或获取输出引脚状态的寄存器。
- 在GPIO模式下,ODR的每个位对应一个引脚,你可以通过设置相应的位来将引脚设置为高电平(1)或低电平(0)。
- 通过读取ODR,你可以获取引脚的当前输出状态。
这两个寄存器通常与GPIO相关的配置和控制密切相关。通过配置CRH,你可以定义引脚的工作模式,而通过ODR,你可以设置引脚的输出状态。这在控制外部设备、驱动LED、以及其他需要控制引脚状态的应用中非常有用。
在STM32微控制器中,不同的外设模块分布在不同的总线上。以下是一些常见的外设模块,它们通常位于APB1总线上:
- USART(通用异步收发器): 串口通信模块,用于串行通信。
- I2C(Inter-Integrated Circuit): 用于连接微控制器与其他设备进行短距离通信的模块。
- SPI(串行外设接口): 用于串行通信,常用于连接外部设备。
- TIM(通用定时器): 定时器模块,用于产生定时脉冲、测量时间等。
- RTC(实时时钟): 用于跟踪时间,通常包括日历和闹钟功能。
- WWDG(窗口看门狗): 用于监测程序运行状态的看门狗定时器。
- IWDG(独立看门狗): 用于监测系统状态的独立看门狗定时器。
这只是一些例子,具体的外设分布可能会因不同的STM32芯片型号而有所变化。在STM32的数据手册、参考手册或者芯片手册中,你可以找到具体的引脚映射表和总线连接信息,以了解每个外设模块所在的总线。总体而言,APB1总线上的外设通常属于一些相对基本、低速的外设模块。
GPIO
GPIO(General Purpose Input Output), 通用输入输出口
- 可配置8种输出模式
- 引脚电平: 0V - 3.3V, 部分引脚可容忍5V, 手册中带FT(Five Tolerate)代表可以容忍5V电压
- 输出模式下可控制端口输出高低电平, 用于驱动LED, 控制蜂鸣器, 模拟通信协议输出时序等
- 输入模式下可以读取端口的高低电平或电压,用于读取按键输入, 外接模块电平信号输入, ADC电压采集, 模拟通信协议接收数据灯
知识点
- 所有GPIO都是挂载在APB2总线上的
- 每个GPIO外设有16个引脚, 编号都0到15
- 每个GPIO端口包含有寄存器和驱动器,内核对寄存器进行读写完成输出和读取电平, 寄存器的每一位对应一个引脚
- 因为STM32是32位单片机, 所以STM32内部的寄存器都是32位的, 但GPIO端口只有16位, 所以改寄存器只有低16位有端口, 高16位没有用到
- 驱动器用来增大驱动能力
输入模式
按键
按下导通,松开断开
按键抖动
由于按键内部使用的是机械式弹簧片来进行通断的, 所以在按下和松手的瞬间会伴随有一串的抖动, 为了避免多次触发需要对抖动进行过滤
传感器模块
传感器元件的电阻会随外界模拟量的变化而变化, 通过与定值电阻分压即可得到模拟电压输出, 再通过电压比较器进行二值化可得到数字电压输出
SSD1306
以0.96英寸OLED
寄存器中以字节来存储0, 1
比如第一个0,控制的是Page0(第一行)的第一列
所以128 * 8 ,OLED缓存是1024
中断
在主程序运行过程中, 出现了特定的中断触发条件, 是的CPU暂停当前正在运行的程序, 转而去处理中断程序, 处理完又返回原来被暂停的位置继续运行
中断优先级
当有多个中断源同时申请中断时, 会优先响应更加紧急的
中断嵌套
当有一个 中断程序正在运行时, 又有新的更高优先级的中断源申请中断, CPU再次暂停当前中断程序, 转而去处理新的中断程序, 处理完后依次进行返回
NVIC
NVIC的全称是“Nested Vectored Interrupt Controller”(嵌套向量中断控制器)。用于管理和控制中断的组件,允许在嵌套的方式下有效地处理中断,其中高优先级的中断可以抢占低优先级的中断。
M3 内核都是支持 256 个中断,其中包含了 16 个系统中断和 240 个外部中断,并且具有 256 级的可编程中断设置。
STM32中共有10个内核中断,60个外部中断,16个中断优先级;
AFIO
AFIO是"Alternate Function I/O" 的缩写,指的是"备用功能输入/输出"。
- 引脚映射: AFIO允许将特定的引脚映射到特定的外设功能。这对于配置外设的输入输出引脚非常重要。例如,将某个引脚映射到USART、SPI、I2C等外设的引脚。
- 中断线映射: AFIO还涉及到外部中断线(EXTI,External Interrupt)的映射。通过配置AFIO,可以将外部中断映射到特定的引脚。这对于配置外部中断触发引脚非常重要。
- 触发方式配置: AFIO允许配置某些引脚的触发方式,例如上升沿触发、下降沿触发等。这在使用外部中断时很有用。
- 定时器触发映射: 对于一些特殊的定时器触发模式,AFIO也涉及到将定时器的触发源映射到特定
- 复用功能配置: 除了上述的映射之外,AFIO还涉及到引脚的复用功能配置,即引脚的替代功能。
EXTI
EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。
有20条外部中断线
串口
串口(Serial Port)是计算机和外部设备之间进行串行数据传输的一种通信接口。串口允许数据以比特流的形式通过一条线(或一对线)进行传输,其中每个比特依次发送或接收。串口通信通常通过串行通信协议来管理数据的传输。
串口通信协议(串口类型)
时钟信号用来采集数据
数字电平标准
电平标准是数据1和数据0的表达方式,是传输线缆中人为规定的电压与数据的对应关系。
- TTL: TTL是一种数字电平标准,用于表示逻辑“0”和“1”。一般情况下,0V表示逻辑“0”,而高电平(通常为3.3V或5V)表示逻辑“1”。
- RS-232:RS-232是一种常见的串行通信电平标准,用于在计算机和外部设备之间传输数据。它规定了不同逻辑状态的电压水平,如正电平表示逻辑“0”,负电平表示逻辑“1”。
- RS-485: RS-485是一种多点通信标准,通常用于工业控制系统。它支持多个设备在同一总线上进行通信,使用不同的电平表示逻辑状态。
- CMOS:类似于TTL,CMOS也是一种数字电平标准,但其电压范围可以更广泛,通常从0V到Vcc(供电电压)。
- USB(Universal Serial Bus):USB标准定义了在计算机和外部设备之间进行数据通信的电平和接口规范。
串口参数
- 波特率:表示每秒传输的比特数。常见的波特率包括9600、19200、38400、115200等。
- 起始位:通常是逻辑“0”(低电平),表示数据传输的开始。当线上的电平由高变低时,设备知道数据的传输即将开始。
- 数据位: 指定每个字节的数据位数,通常为8(不包含奇偶校验位)或9位(包含奇偶校验位)。
- 停止位:通常是逻辑“1”(高电平),表示数据传输的结束。它提供了一个信号,告诉接收设备数据已经完整接收。
- 奇偶校验位:用于检测和纠正传输中的错误,可以是偶校验、奇校验或无校验。
整个数据帧的格式可以看作是:起始位 + 数据位 + 奇偶校验位 + 停止位。
USART
USART(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步接收器,USART是STM32内部集成的硬件外设,可根据数据寄存器的一个字节数据自动生成数据帧时序,也可自动接收RX引脚的数据帧时序,拼接为一个字节数据,存放在数据寄存器里。