STM32工作模式详解
目录
三.基本GPIO控制
3.1、GPIO基础知识
3.2 IO的八种工作模式
3.3 固件库实现LED点灯
3.4 蜂鸣器
3.5 按键的基础知识
3.6继电器
3.7震动传感器
3.8 433M无线模块
三.基本GPIO控制
3.1、GPIO基础知识
GPIO(General-Purpose input/output,通用输入/输出接口)
用于感知外部信号(输入模式)和控制外部设备(输出模式)
系统架构
3.2 IO的八种工作模式
输出模式:
1.推挽输出(Push-Pull,pp)
让输出控制变成了VDD/VSS输出,使得输出电流增大
提高了输出引脚的驱动能力,提高了电路的负载能力和开关的动作速度
推挽输出模式下,P-MOS和N-MOS均有效。
推挽输出模式下,STM32对IO口具有绝对的控制权,引脚可以输出高低电平。
2.开漏输出(Open-Drain,OD)
推挽输出模式可以直接输出高电平,开漏输出需要外接上拉电阻才能输出高电平
开漏输出的特性
开漏输出模式下,P-MOS无效,N-MOS有效。
开漏输出模式下,只有低电平才有驱动能力,高电平无驱动能力,引脚只能输出低电平,可以作为通信协议的驱动方式比如I2C通信的引脚,使用
开漏输出模式。
3.复用推挽/开漏输出(AlternateFuntion,AF)
GPIO除了作为通用输入输出引脚使用以外,还可以作为片上外设(USART,IIE,SPI)专用引刷脚,即一个引脚可以有多种用途,但是同一时刻个引脚只能使用复用功能中的一个
当引脚设置为复用功能的时候,可选择推挽复用模式或者复用开漏模式,在设置为复用开漏模式时,需要外接上拉电阻。
输入模式:
1.上拉输入(Input Pull-up)
VDD经过开关、上拉电阻,连接外部I/O引脚。当开关闭合时,外部I/O输入信号时,默认输入高电平。
2.下拉输入(Input Pull-down)
VSS经过开关,下拉电阻,连接外部I/0引脚,当开关闭合时,外部I/0无输入信号时,默认输入低电平
3.浮空输入(Floating Input)
两个上下拉电阻开关均断开,没有上拉也没有下拉,I/0引脚直接连接TTL肖特基触发器
此时,I/0引脚浮空,读取的电平是不确定的,外部信号是什么电平,MCU引脚就输入什么电平
MCU复位上电后,默认为浮空输入模式
4.模拟输入(Analoge mode)
两个上下拉电阻开关均断开,同时TTL肖特基触发器也断开,引脚信号直接连接模拟输入,实现对外部信号的采集。
2、GPIO的输出速度
STM32的I/O引脚工作再输出模式下时,需要配置I/0引脚的输出速度美
该输出速度不是输出信号的速度,而是I/O口驱动电路的响应速度。
STM32提供了三个速度,2MHZ,10MHZ,50MHZ
实际开发过程中需要结合实际情况选择合适的响应速度,以兼顾信号的稳定性和低功耗
简单外设,比如LED灯,蜂鸣器建议使用2MHZ的输出速度
而复用为IIC,SPI等通信信号时,建议使用10MHZ或50MHZ以提高响应速度。
3.3 固件库实现LED点灯
1.LED灯
LED灯的正极接到了3.3V,LED灯的负极接到了PA1,也就是GPIOA1引脚
只需要控制PA1为相对应的低电平,即可点亮对饮的LED灯,输出高电平则熄灭对应的LED灯
GPIO结构体:
typedef struct
{
uint16_t GPIO_Pin; //GPIO引脚
GPIOSpeed_TypeDef GPIO_Speed; //GPIO输出速度
GPIO_TnitTypeDef GPIO_Mode; //GPIO输入/输出模式
}GPIO_TnitTypeDef;
软件设计流程
。初始化GPIO外设时钟
。初始化LED引脚
如何控制LED灯的闪烁?
User里新建文件夹“LED”
LED里新建led.c和led.h
#include "stm32f10x.h"
#include "main.h"
#include "led.h"
int main()
{
//³õʼ»¯LEDµÄÒý½ÅGPIOA1
LED_Init();
while(0)
{
//2.ÈÃGPIOA1Êä³öµÍµçƽ£¬µÆ¾ÍÁÁÁË
GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}
}
#include "led.h"
#include "stm32f10x.h"
//³õʼ»¯ledµÆµÄº¯Êý---¶¨Òå¡¢ÉùÃ÷¡¢µ÷ÓÃ
void LED_Init(void)
{
//³õʼ»¯LEDµÄÒý½ÅGPIOA1
GPIO_InitTypeDef led_initstruct;
//³õʼ»¯Ê±ÖÓAPB2ϵÄGPIOA
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
led_initstruct.GPIO_Pin= GPIO_Pin_1; //ÅäÖÃGPIOÒý½Å
led_initstruct.GPIO_Speed = GPIO_Speed_2MHz;//ÅäÖÃGPIO´«ÊäËÙ¶ÈΪ2MHZ
led_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;//ÅäÖÃGPIOµÄģʽÊÇÍÆÍìÊä³ö
GPIO_Init(GPIOA,&led_initstruct);
//³õʼ»¯GPIO½á¹¹Ìå
}
void LED_Init(void);
如何控制LED灯的闪烁?
//软件延时主要就是让CPU"空转",通过计算不同指令周期的时间,参考CPU主频大小,大概算出延时时间,这种方法从表面看起来就不精确,但它是比较好实现;
void delay(uint16_t time)//延时1ms
{
uint16_t i = 0;
while(time –)
{
i = 12000;
while(i –);}
}
3.4 蜂鸣器
1.蜂鸣器的种类
蜂鸣器是一种常用的电子发声元器件,采用直流电压供电。广泛应2用于计算机,打印机,报警器,电子玩具,汽车电子设备灯等产品中常见的蜂鸣器可分为有源蜂鸣器和无源蜂鸣器。
2.蜂鸣器的控制方式
有源蜂鸣器:内部有震荡源,只要通电即可自动发出固定频率的声音。(频率固定无法控制音色)
无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变变。(可改变频率来改变音色)
3.区分蜂鸣器
从外观上来看两种蜂鸣器形状相似,有源蜂鸣器底部有黑胶密封
无源蜂鸣器底部可以看到电路板,两种蜂鸣器都标注有正负极。
软件设计流程
。初始化GPIO外设时钟
。初始化蜂鸣器的引脚
main.c
#include "stm32f10x.h"
#include "main.h"
#include "bear.h"
int main()
{
//初始化蜂鸣器函数
Bear_Init();
while(1)
{
GPIO_setBits(GPIOA,GPIO_Pin_3);//让GPIO输出高电平,蜂鸣器响
}
}
bear.c
#include "bear.h"
#include "stm32f10x.h"
void Bear_Init(void)//蜂鸣器函数声明
{
//初始化时钟
GPIO_InitTypeDef bear_initstruct;//定义化蜂鸣器结构体
//初始化引脚
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//初始化APB2下的GPIOA时钟
bear_initstruct.GPIO_Pin = GPIO_Pin_3;//配置引脚
bear_initstruct.GPIO_Speed = GPIO_Speed_10MHz;//配置引脚输出速率
bear_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;//配置引脚输出模式为推挽模式
GPIO_Init(GPIOA,&bear_initstruct); //初始化GPIOA结构体
}
bear.h
void Bear_Init(void);//声明
3.5 按键的基础知识
1.深入理解GPIO输入
GPIO的特点:
按键控制LED灯
软件设计流程
。初始化GPIO外设时钟
。初始化按键和LED的引脚
oSW2控制灯开
SW3控制灯关
3.6继电器
1.继电器的工作原理
继电器是一个电控开关,工作原理基于电磁感应,继电器包括一个电磁线圈和一组触点。常用于控制高电流或高电压的电路,例如自动控制原理,电力系统和自动化设备中,由于可靠性和电气隔离的特性可以实现小电流实现大电流,继电器在各种应用中都有广泛的用途。
2.继电器的引脚说明
1.VCC(+):供电正极,连接此引脚到电源,以提供继电器所需的电流
2.GND(-):地,连接此引脚到电源的负极或者地。
3.IN:控制输入信号,通常用于连接控制信号,当该信号变化,继电器切换状态。
4.COM(common):公共端,通常是中间的触点,与常开或常闭触点链。
5.NO(Normally Open):常开接口,继电器吸合前悬空,吸合后于COM连接
6.NC(Normally Closed):常闭接口,继电器吸合前与COM连接,吸合后后悬空
3.7震动传感器
1.震动传感器工作原理
震动传感器黑色震动检测传感器,工作时电源LED灯常量,震动动信号检测LED灯发生震动的时候会保持亮的过程。正常工作模块DO口输出高电平
震动瞬间DO口输出低电平,用于各种震动触发作用,防盗报警,智能小车电子积木灯等。
2.震动传感器硬件引脚接线
1.VCC:接到板子电源的5V或者3.3V。
2.GND:地,连接到板子电源的负极或者GND。
3.DO:数字信号输出口,可以与单片机相连检测环境是否发生震动。
3.震动传感器软件开发流程
。初始化震动传感器D0相连的单片机引脚时钟
。初始化震动传感器DO相连的单片机引脚输入配置
3.8 433M无线模块
1.433M无线模块工作原理
数据发射模块的工作频率为315M,采用声表谐振器SAW稳频,频率稳定度极高,当环境温度在-25~+85度之间变化时,频飘仅为3ppm。
接收到信号,接收模块对应针脚输出高电平,有D0 D1 D2 D3,可能对应遥控器的A/B/C/D。
2.引脚接线
1.供电正极,连接此引脚到电源5V,以提供433M无线模块所需的电流
2.GND(-):地,连接此引脚到电源的负极或者地。
3.D0-D4:连接控制输入信号通常用于连接控制信号,当按键变换控制外设信号
3.433M控制灯软件开发流程
。初始化433MDO-D4引脚对应的GPIO外设时钟
。初始化433MDO-D4引脚配置
作者:嵌入式云599