GPIO的八种工作模式
输出模式
推挽输出
(
Push-Pull,pp
)
让输出控制变成了
VDD/VSS
输出,使得输出电流增大
提高了输出引脚的驱动能力,提高了电路的负载能力和开关的动作速度
开漏输出
(Open-Drain,OD)
推挽输出模式可以直接输出高电平,开漏输出需要外接上拉电阻才能输出高电平
开漏输出的特性
利用外部电路驱动能力
实现电平转换
方便实现
“
逻辑与
”
功能
复用推挽/开漏输出
(
Alternate Funtion,AF
)
GPIO
除了作为通用输入输出引脚使用以外,还可以作为片上外设(
USART,IIC,SPI
)
专用引脚,即一个引脚可以有多种用途,但是同一时刻一个引脚只能使用复用功能中
的一个
当引脚设置为复用功能的时候,可选择推挽复用模式或者复用开漏模式,在设置为复用开
漏模式时,需要外接上拉电阻。
输入模式
上拉输入
VDD
经过开关、上拉电阻,连接外部
I/O
引脚。当开关闭合时,外部
I/O
输入信号时,默认
输入高电平
下拉输入
VSS
经过开关,下拉电阻,连接外部
I/O
引脚,当开关闭合时,外部
I/O
无输入信号
时,默认输入低电平
浮空输入
两个上下拉电阻开关均断开,没有上拉也没有下拉,
I/O
引脚直接连接
TTL
肖特基触发
器此时,I/O
引脚浮空,读取的电平是不确定的,外部信号是什么电平,
MCU
引脚就输
入什么电平MCU复位上电后,默认为浮空输入模式
模拟输入
两个上下拉电阻开关均断开,同事
TTL
肖特基触发器也断开,引脚信号直接连接模拟
输入,实现对外部信号的采集
LED灯
固件库实现LED灯点亮
![](https://i-blog.csdnimg.cn/direct/0dd86cc6bcbf45039d2779c18128ff3e.png)
在主函数中使用,注意是低电平点亮还是高电平点亮,可以仔细看看电路图
振动器
![](https://i-blog.csdnimg.cn/direct/031c6a88779f47b088808019a0a61124.png)
自己可以写一个小项目,同时初始化继电器和振动器,当发生震动时,继电器的灯被点亮,亮的时间持续一秒,然后熄灭
蜂鸣器
蜂鸣器的种类
蜂鸣器是一种常用的电子发声元器件,采用直流电压供电。广泛应用于计算机,打印
机,报警器,电子玩具,汽车电子设备灯等产品中常见的蜂鸣器可分为有源蜂鸣器和
无源蜂鸣器。
蜂鸣器的控制方式
有源蜂鸣器:内部有震荡源,只要通电即可自动发出固定频率的声音。(频率固定无
法控制音色)
无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。(可改变
频率来改变音色)
区分蜂鸣器
从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有黑胶密封。
无源蜂鸣器底部可以看到电路板,两种蜂鸣器都标注有正负极。
![](https://i-blog.csdnimg.cn/direct/e7a81dd3935b4503930f9f968e9a56e7.png)
按键
![](https://i-blog.csdnimg.cn/direct/a95d0ea7e84a4d8fab40d7a017878f0a.png)
外部中断
![](https://i-blog.csdnimg.cn/direct/c6511de16514447d982b1b9fa9a122a8.png)
在我自己第一次写的时候就是忘了加复用,导致继电器一直不亮。
写完之后一定别忘了加复用
在初始化NVIC之前,要在前面加上一个组的初始化
串口通信
![](https://i-blog.csdnimg.cn/direct/bddf37cd65a14e2a9364bc65e5591ebd.png)
TX是输出,RX是输入
输入的时候可以不用加speed
在初始化串口之后要调用
USART_Init和USART_ITConfig(配置串口的中断)最后再来一个使能cmd就好了
在此基础上
这个是自己封装的发送单个字节的函数,发送完成后再清除标志位就好了
![](https://i-blog.csdnimg.cn/direct/ead3c00bc6fe4736ab220fb0e9618dcd.png)
这个是自己封装的一个发送字节的函数
用一个do while循环,将其全部发送,判断的结束标志就是'\0'
![](https://i-blog.csdnimg.cn/direct/fb587a9303b74916ad0ea7a4bd1b72dd.png)
还弄了一个printf的重定向
定时器中断
定时器的种类
计数器模式
通用定时器可以向上计数、向下计数、向上向下双向计数模式
向上计数模式
计数器从0计数到自动加载值(TIMx_ARR),然后重新从0开始计数并且 产生一个计数器溢出事件
向下计数模式
计数器从自动装入的值
(TIMx_ARR)
开始向下计数到
0
,然后从自动装入的值重新开始,并产生一个计数器向下溢出事件
中央对齐模式(向上/向下计数)
计数器从
0
开始计数到自动装入的值
-1
,产生一个计数器溢出事件,然后向下计数到1
并且产生一个计数器溢出事件;然后再从
0
开始重新计
![](https://i-blog.csdnimg.cn/direct/400cec198af44182b6ecc61a76c3952b.png)
定时时间的计算
![](https://i-blog.csdnimg.cn/direct/4c6647836d5446238b5c995ec1d7f68c.png)
PWM
PWM输出模式
PWM
输出就是对外输出脉宽(即占空比)可调的方波信号,信号频率由自动重装载
值
ARR
的值决定,占空比由比较寄存器
CCR
的值决定。
![](https://i-blog.csdnimg.cn/direct/9c3298ae46564ff8be34b0a044cb5858.png)
![](https://i-blog.csdnimg.cn/direct/a626baf7c8ce494da151dd2875c21480.png)
pwm输出时需配置TIM_OCInitTypeDef结构体的参数
因为上面选的通道是PWM1,所以是低电平有效,所以要定义为LOW
强调一下,所有的函数初始化完成后都需要调用Init函数,如果是包含中断的话,自己可以在去查看函数的定义,上面的一些强调点都是本人在写代码中遇到的实际问题,可以仔细看看。