STM32答辩
简介
STM32:系统内核小、专用性强、系统精简
Stm32 三种开发方式:寄存器模式、标准库模式、HAL库模式(全称是Hardware Abstraction Layer)
GPIO
GPIO的全称是General-Purpose Input /Output,中文意思是通用IO端口。
开漏输出和推挽输出的区别:主要是开漏输出只可以输出低电平,高电平得靠外部电阻拉高。输出端相当于三极管的集电极,适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内);推挽输出可以输出高、低电平,连接数字器件。
USART
USART的全称是Universal Synchronous/Asynchronous Receiver/Transmitter,中文名叫做通用同步异步收发器。这是一种全双工的异步通信,发送端称为TXD(Transmit Data),接收端称为RXD(Receive Data)。串口的设置是设置起始位、数据位、校验位、停止位和波特率,通信的双方要设置相同的参数,并且硬件硬件交叉连接。
USART主要特征
- 全双工异步通信。
- 单线半双工通信。
- 单独的发送器和接收器使能位。
- 可配置使用DMA的多缓冲器通信。
- 多个带标志的中断源。
- 可编程数据字长度(8位或9位) 。
- 可配置的停止位(支持1或2个停止位)。
ADC
ADC 的全称是“Analog-to-Digital Converter”,中文是“模拟/数字转换器”,将连续变化的模拟信号转换为离散的数字信号。
ADC的性能指标
- 量程:能测量的电压范围。
- 分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示,比如:8、10、12、16位等。位数越多,分辨率越高,一般来说分辨率越高,转化时间越长。
- 转化时间:从转换开始到获得稳定的数字量输出所需要的时间称为转换时间。
ADC的特性
- 12位精度下转换速度可高达1MHZ,即1微秒。
- 供电电压:VSSA:0V;VDDA:24V~3.6V。
- ADC输入范围:VREF- ≤ VIN ≤ VREF+(一般VREF和VSSA接在一起,即0V;VREF+和VDDA接在一起,即3.3V,所以一般ADC输入范围为0V~3.3V)。
- 采样时间可配置,采样时间越长,转换结果相对越准确,但是转换速度就越慢。
- ADC的数据结果是12位,可以左对齐或右对齐方式存储在16位数据寄存器中。
DMA
DMA的全称是“Direct Memory Access”,中文名称“直接存储器访问”,提供在外设与内存、存储器和存储器、外设与外设之间的高速数据传输使用。它允许不同速度的硬件装置来沟通,而不需要依赖于CPU,因此CPU可以在此期间执行其他任务。
DMA搬运的地点
- 存储器–>存储器(例如:复制某特别大的数据buf)
- 存储–>外设(例:将某数据buf写入串口TDR寄存器)
- 外设–>存储器(例如:将串口RDR寄存器写入某数据buf)
IIC
IIC全称是Inter-Integrated Circuit (集成电路总线),用于连接微控制器及其外围设备。IIC属于半双工同步通信方式。
IIC串行总线有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。两条线都接上拉电阻,以确保总线空闲时刻为高电平,其中时钟信号是由主控器件产生。
- 起始信号
当时钟线(SCL)为高平时,数据线(SDA)从高电平跳变到低电平。 - 起始信号
当时钟线(SCL)为高平时,数据线(SDA)从高电平跳变到低电平。 - 应答信号
主机每发送一个字节(8个bit),就在第9个时钟脉冲期间释放数据线(SDA),由从机反馈一个应答信号。
应答信号(SDA)为低电平时,规定为有效应答位(ACK,简称应答位),表示从机成功地接收了该字节。
应答信号(SDA)为高电平时,规定为非应答位(NACK),一般表示从机接收该字节没有成功。
PWM
PWM全称是Pulse Width Modulation(脉冲宽度调制),它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于有效电平的时间占据整个信号周期的百分比。
- PWM模式1
在向上计数时,一旦CNT<CCRx 时输出为有效电平,否则为无效电平。
在向下计数时,一旦CNT>CCRx 时输出为无效电平,否则为有效电平。 - PWM模式2
在向上计数时,一旦CNT<CCRx 时输出为无效电平,否则为有效电平。
在向下计数时,一旦CNT>CCRx 时输出为有效电平,否则为无效电平。
TIM
- 时钟产生器
STM32通用定时器有四种时钟源:
内部时钟(CK_INT)
外部时钟模式1:外部触发输入(TIMx_ETR)
内部触发输入(ITRx):使用一个定时器作为另一个定时器的预分频器
外部时钟模式2:外部输入引脚
高级定时器(TIM1、TIM8)、基本定时器(TIM6、TIM7)、通用定时器(TIM2~TIM5)
- 向上计数:
计数器从0开始计数(递增),计数到自动加载值(TIMx_ARR)后产生一个计数器溢出事件并重新从0开始计数。 - 向下计数:
计数器从自动加载值(TIMx_ARR)开始计数(递减),计数到0后产生一个计数器溢出事件并重新从自动加载值(TIMx_ARR)开始计数。 - 中心对齐计数:
计数器从0开始计数(递增),计数到自动加载值(TIMx_ARR)- 1后产生一个计数器溢出事件并从自动加载值(TIMx_ARR)开始计数(递减),计数到1后产生一个计数器溢出事件并重新从0开始计数。
DHT11温湿度传感器
工作电压范围:3.3V~5.5V
工作电流:平均0.5mA
输出:单总线数字信号
测量范围:湿度20~90%RH,温度0~50°C
精度:湿度±5%,温度±2°C
分辨率:湿度±1%,温度±1°C
- 电源引脚
DHT11的供电电压为3~5.5 V。传感器上电后,要等待 1s 以越过不稳定状态,在此期间无需发送任何指令。电源引脚(VDD,GND)之间可增加一个100nF 的电容,用以去耦滤波。 - 串行接口(单线双向)
DATA 用于微处理器与 DHT11之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分
DHT11 采用单总线协议与单片机通信,单片机发送一次复位信号后,DHT11 从低功耗模式转换到高速模式,等待主机复位结束后,DHT11 发送响应信号,并拉高总线准备传输数据。一次完整的数据为 40bit,按照高位在前,低位在后的顺序传输。
数据格式为:8bit 湿度整数数据+8bit 湿度小数数据+8bit 温度整数数据+8bit 温度小数数据+8bit 校验和,一共 5 字节(40bit)数据。由于 DHT11 分辨率只能精确到个位,所以小数部分是数据全为 0。校验和为前 4 个字节数据相加,校验的目的是为了保证数据传输的准确性。
DHT11 只有在接收到开始信号后才触发一次温湿度采集,如果没有接收到主机发送复位信号,DHT11 不主动进行温湿度采集。当数据采集完毕且无开始信号后,DHT11 自动切换到低速模式。
- 主机发送复位信号
DHT11 的初始化过程同样分为复位信号和响应信号。
首先主机拉低总线至少 18ms,然后再拉高总线,延时 20~40us,取中间值 30us,此时复位信号发送完毕。 - DHT11 发送响应信号
DHT11 检测到复位信号后,触发一次采样,并拉低总线 80us 表示响应信号,告诉主机数据已经准备好了;然后 DHT11 拉高总线 80us,之后开始传输数据。如果检测到响应信号为高电平,则 DHT11 初始化失败,请检查线路是否连接正常。
当复位信号发送完毕后,如果检测到总线被拉低,就每隔 1us 计数一次,直至总线拉高,计算低电平时间;当总线被拉高后重新计数检测 80us 的高电平。如果检测到响应信号之后的80us 高电平,就准备开始接收数据。实际上 DHT11 的响应时间并不是标准的 80us,往往存在误差,当响应时间处于 20~100us 之间时就可以认定响应成功。 - 数据传输
DHT11 在拉高总线 80us 后开始传输数据。每 1bit 数据都以 50us 低电平时隙开始,告诉主机开始传输一位数据了。DHT11 以高电平的长短定义数据位是 0 还是 1,当 50us 低电平时隙过后拉高总线,高电平持续 26~28us 表示数据“0”;持续 70us 表示数据“1”。
当最后 1bit 数据传送完毕后,DHT11 拉低总线 50us,表示数据传输完毕,随后总线由上拉电阻拉高进入空闲状态。
DS18B20温度传感器
测温范围 -55°C~+125°C
工作电源:3.0~5.5V/DC(可以数据线寄生电源)
单总线半双工通信方式。
DS18B20共有6种信号:复位脉冲、应答脉冲、写0、写1、读0、读1。这些信号中除了应答脉冲以外,都由主机发出同步信号,并且发送所有的命令和数据都是字节的低位在前。
- 1、复位脉冲
单总线上的所有通信都是以初始化序列开始。主机输出低电平,保持低电平时间至少480us,以产生复位脉冲。接着主机释放总线,4.7K的上拉电阻将单总线拉高,延时15~69us,并进入接收模式(Rx),接着DS18B20拉低总线60~240us,以产生低电平应答脉冲。 - 2、写时序
写时序包括写0时序和写1时序,所有写时序至少需要60us,且在2次独立的写时序之间至少需要1us的恢复时间,两种写时序均起始于主机拉低总线。
写1时序:主机输出低电平,延时2us,然后释放总线,延时60us
写0时序:主机输出低电平,延时60us,然后释放总线,延时2us - 3、读时序
单总线器件仅在主机发出读时序使,才向主机传输数据,所以在主机发出读数据命令之后,必须马上产生读时序,以便从机能够传输数据。
所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us内采样总线状态。
典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us。 - DS18B20典型温度读取过程
复位–>发SKIP ROM命令(0XCC)–>发开始转换命令(0X44)–>延时–>复位–>发送SKIP ROM命令(0XCC)–>发读存储命令(0XBE)–>连续读出两个字节数据(即温度)–>结束
转化后得到的12位数据,存储在DS18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得得温度大于0,这五位为0,只要将测到得数值乘以0.0635即可得到实际温度;如果温度小于0,这五位为1,测到得数值需要取反加一再乘以0.0625即可得到实际温度。
OLED
- 起始信号(SDA低电平): 当SDA线从高电平跳变到低电平时,表示一个数据传输的开始。
- 停止信号(SDA高电平): 当SDA线从低电平跳变到高电平时,表示一个数据传输的结束。
- 数据传输: 在IIC通信中,数据传输是通过SDA线上的高低电平变化来实现的。数据传输时,发送方将数据位放在SDA线上,然后通过SCL线上的时钟信号将数据位发送给接收方。接收方通过检测SDA线上的电平变化来接收数据。
- 应答信号(ACK):在数据传输过程中,接收方需要在接收到每个数据位后发送一个应答信号(ACK),表示数据已被正确接收。应答信号是一个低电平,在SDA线上持续一段时间,然后恢复高电平。
- 非应答信号(NACK):在数据传输过程中,如果接收方无法正确接收数据,会发送一个非应答信号(NACK),表示数据未被正确接收。非应答信号是一个高电平,在SDA线上持续一段时间,然后恢复低电平。
IIC通信的时钟信号(SCL)是由发送方产生的,通常频率为10KHz~100KHz。IIC通信的波特率由时钟信号的频率决定。
IIC通信的优点是简单、易于实现,缺点是速度较慢,通常用于低速度外设的通信。