目录
二、GPIO:General Purpose Input/Output(通用输入输出口)
》本节也讲了串口调试助手的使用和为啥使用USB转TTL这个设备
(9)输出和输入测试-使OLED屏幕全亮和读取屏幕是否亮的信号
(1)显示的基本原理(其实本质就是个寄存器,存储着每个像素点的值)
4.中断实验:使用USART发送0/1/2实现闪灯频率的变化
8.ADC的经典实验1:使用软触-常规序列-单通道-得到光敏传感器的量化电压
一、stm32介绍
1.STM32是什么?
意法半导体-单片机-32位
ST = STMicroelectronics(意法半导体)
M = Microcontroller(微控制器)
32 = 32-bit(32 位架构,基于 ARM Cortex 内核)
在 STM32 这种单片机里,“32 位”主要有几个含义:
寄存器宽度:CPU 内部的寄存器是 32 位的,一次能装下一个 32 位数据。
数据总线宽度:CPU 和内存之间传输数据时,一次能搬运 32 位。
指令宽度/寻址能力:理论上能直接寻址的内存空间更大(2³² = 4GB)。
运算能力:支持 32 位加减乘除,比 8 位、16 位 MCU 运算更快。
2.扮演什么角色、怎么使用?
管理者(代码管理)、操作者(控制各种外设)
控制 其他外设 去工作
3.理解STM32型号 的含义
ST是品牌,M32是啥类型的,F系列,C8T6是型号
类比vivo 品牌, phone手机这个类型(还要平板,电脑),x系列(比如x30,x100),
128g深蓝的型号(别人是256G黑色等等)
二、GPIO:General Purpose Input/Output(通用输入输出口)
1.GPIO引脚
特殊引脚
常规引脚(因为普通引脚太多给定义了编号ZQ)
2.八种工作模式
(1)输入、输出的区别:
取决于 信号/电流 的流向 或者是谁是主动操作者,比如输出,CPU是主动输出,而CPU的寄存器被动被输入信号 所以叫输入
(2)输出:
》作用:向引脚输出信号
推挽:
推,CPU写1,P-MOS二极管开关闭合,N-MOS二极管断开,因为接着VDD所以输出高电压;
挽:CPU写0,P—MOS二极管断开,N-MOS二极管开关闭合,因为接着VSS,所以引脚被拉到地电压(因为输出的是低电压,所以可以能对外 吸入电流,所以叫挽,但是本质还是CPU控制的输出模式,不要搞混输入输出了)
开漏:
开漏的状况是输出这里的P-MOS引脚始终是断开的,而N-MOS这里的漏极既而始终也是断开的(所以是开漏)。那这种情况下,只存在下方的N-MOS管的闭合和断开的情况了。
闭合是类似于上面推挽的挽,即输出低电压。那断开就是处于一个高阻抗的状态,原因就是断开的话,电流为0,则表示R无限大,所以是高阻抗。
所以开漏这里只存在两种状态:低电压和高阻抗
通用和复用:
通用是cpu直接控制GPIO引脚去输出,
复用是cpu复用外设,外设控制GPIO引脚去输出
最大输出速度
最大输出速度:向IO交替写0和1且输出不失真的最快速度
限制IO的最大输出速度:上升时间和下降时间的长短
最大输出速度的选取:选择满足要求的最小值。比如要求8HMz,那就选取10。
》GPIO的输出引脚实验:LED闪灯实验
LED的线路的接线方式就大概两种(科普):推挽接法、开漏接法
一般线路都有其手册,看其是啥接法。这里选取的板载LED是:开漏接法
(3)输入
》作用:读取输入的信号
》上下保护二极管(目的防静电)
上保护二极管:当输入电压处于合适的范围(0-3.3V),不触发保护,但是当超过VDD的3.3V,比如MCU是当输入的电压>VDD+0.3V就触发输入保护。电流从高电位的GPIO引脚流向VDD。
下保护二极管:同理,合适电压范围不触发。但是当低于0V-0.3V,即低于-03V会触发输入保护。电流从高电位0V(地面)流向GPIO的比如-0.3V(比地面低0.3)
》上下拉电阻
上拉电阻默认高电压。
下拉电阻默认低电压
悬空输入:天线般的电压不稳定
模拟模式:输入的是模拟信号,即自然界的连续的模拟信号
注意:当上拉电阻闭合时,当输入一个低电压,那么最后接收的也是低电压。原因是上拉电阻这里有个高电阻,分压太强,对于整个线路来说真正的电压还是靠输入的这个电压。但是如果是输入悬空下啥也没有传进来,那输入上拉里面的这个电压虽然小但会带些高电压,把整个线路都轻轻拉成高电压。
》施密特触发器
将电压信号转为稳定的数字0或者1
》GPIO的输入引脚实验:按钮持续按下导致灯亮,松开则灭
核心思路:单片机输出低电压,中间线路接个按钮(其实就是控制线路的断与不断),断开就是不通电,不断的话就是直接输出电压信号了。
3.GPIO的所有标准库函数接口
三、硬件通信协议之串口USART(注意区分网络通信协议)
1.定义与结构
硬件之间的通信接口
》本节也讲了串口调试助手的使用和为啥使用USB转TTL这个设备
以及为啥USB转TTL上的GND要和单片机上的GND相连接
2.USART的引脚位置和模式
(因为是片上外设,所以一定是复用而不是通用)
》复用的正常模式
》复用的重映射模式
简单来说就是:开启复用(AFIO)模式就行。
3.串口的发送数据(核心标准库的SendData())
4.串口的接收数据
5.串口的格式化打印字符串,即:print();
重写fputc()函数,使其可以通过USART发送数据出去
6.标志位
TXE:Tx接口是不是Empty的
TC:传输Complete了
Rx:Rx 是not empty的
FE
NE
ORE
7.编程接口
8.自建的编程接口
四、硬件通信协议之I2C(注意区分网络通信协议)
1.串口的缺点(即有了USART,为啥要有I2C)
目的是:前面学习了一种通信协议USART,但是这里为啥还要学第二种,因为串口有
缺点:很明显就是每个串口只能最多和一个设备建立通信连接,即只能一对一的通信。
那比如使用的c8t6上的就三个串口,所以最多只能连接三个设备
而I2C则实现了一个接口就可以连接很多的设备
2.I2C的基本电路结构
(1)基本电路结构
- 一个主机,
- 多个从机(支持100多个,因为7位地址的话,是2^7次=128,从0-127,抛去特殊的地址也还有100多个)
- 两条总线(SCL,SDA)
- 每个设备(主机或者从机)都要连接SCL和SDA线
- 每条总线都要串行一个带有上拉电阻的高电压,
(2)时钟线和数据线
1. 时钟线,SCL(clock),
特点:单向,只能主机往从机发时钟信号,时钟信号显示为:高低变换的信号
---主要用来控制通信的速度
2.数据线,SDA(data),
特点:双向,可以主发从收或者从发主收,数据信号显示为:0/1
注意:一个时钟信号周期下会传输一个数据,所以周期频率越快,数据传输越快(即频率控制快慢)
(3)通信本质(逻辑线与)
随便一个总线(SCL或者是SDA),其他从机默认都是高阻抗下的高电压(其他高阻抗,因上拉电阻的原因,整个线路默认都是高电压),而主机发送电压信号0/1控制整个线路信号
(4)通信的流程(核心)
首先,一定是主机发送起始位,表示通信的开始。
寻址阶段:一定是主机发送一个字节下的(7位的地址+0/1的写读操作位),然后从机响应ACK
之后就是通信双方谁是主,谁是从。
主:发送字节
从:发送ACK响应或者不发送数据即不响应
最后一定是主机发送停止的信号,即发送停止位,表示要停止了
所以注意,整个流程中,只有第二阶段从机才有可能发送数据,其他时间都是主机发送信号;
以及注意不管是主机还是从机发送其本质上:接收方都是高阻抗的开漏输出,而发送方则是靠往自己的SCL/SDA引脚发送0/1信号既而使总线上的信号为高//低电压信号。
(5)I2C的数据帧格式
- 起始位:SCL恒定高电压,SDA下降
- 寻址位:7位地址和1位R/W + ACK的响应
- 数据位(默认的9位:一定也只能是8位的一个字节+一个响应位)。
- 停止位:SCL恒定高电压,SDA上升
注意:寻址位,在主机寻址结束后一定是主机寻址完要会到默认的高电压,但是有人响应了就会把你拉低,没人响应的话自己就会回高。(这就是蓝线和绿线的原理)
数据位,只有在这里才会出现从机发送数据,其他地方都是主机发送数据,即主机发送起始位,主机发送寻址位,主机发送停止位。
注意如果只是发送一个字节的数据,接收方可以不应答,即表示NAK的信号,因为就一个字节,发完不发了,所以不响应也行
3.I2C外设本身模块
(1)结构
SCL控制时钟,SDA控制数据
(2)IO引脚初始化
(3)自身模块的初始化
注意比其他外设,自己要多一个施加复位信号和释放复位信号
(4)发送数据(核心是I2C_SendData()函数)
判断总线是否空闲
发送起始位,并使用SB标志位判断起始位是否发送完成
发送地址位:7位地址和R/W位(注意AF清零,然后ADDR标志位和AF拒绝位的使用)
发送数据(for下发送数据:每次注意AF拒绝位的使用和TXE标志位的使用,检查完后发送数据)
发送完成后使用标志位AF判断是否拒绝以及BTF的标志位
发送停止位