目次
1.GPIO基础知识
1.1体系架构
2. IO八种工作模式
2.1STM32 IO工作模式
2.2GPIO的输出速率
3.固件库实现LED点灯
3.1LED灯
LED灯,是一种能够将电能转化为可见光的半导体期间
3.2.控制LED灯
4.STM32控制蜂鸣器
1.蜂鸣器的种类
2.蜂鸣器的控制方式
3.软件设计流程
5 按键基础知识
5.1.深入理解GPIO输入
5.2按键控制LED灯
6 继电器
6.1.继电器的工作原理
6.2.继电器的引脚阐明
6.3.单片机控制继电器软件开发流程
7.震动传感器
7.1.震动传感器工作原理
7.2.震动传感器硬件引脚接线
7.3.震动传感器控制灯
8.433无线模块
1.433M无线模块工作原理
2.引脚接线
3.433M控制灯软件开发流程
1.GPIO基础知识
GPIO(General-Purpose input/output,通用输入/输出接口) 用于感知外部信号(输入模式)和控制外部设备(输出模式) 简单模块: LED, 按键,蜂鸣器,温度传感器,使用一个 GPIO 就可以完成数据的传输 / 控制 复杂一点的模块 OLED , FLASH, 六轴传感器需要多个引脚组成 “ 协议 ” 传输数据,USART,IIC,SPI等协议 MCU 单片机多数采用引脚复用模式也就是一个 GPIO ,可以直接控制它输出高低电平,也可以设置为某个协议的引脚之一。此外,一些MCU 的引脚,还能设置为 ADC 模式读取模拟信号,大概设置为DAC 模式输出模拟信号。 1.1体系架构
2. IO八种工作模式
GPIO结构图 2.1STM32 IO工作模式
输出模式有四种:推挽输出,开漏输出,复用开漏,复用推挽 输入模式有四种 : 上拉输入,下拉输入,浮空输入,模拟输入 输出模式: 1. 推挽输出( Push-Pull,pp ) 让输出控制变成了VDD/VSS输出,使得输出电流增大 进步了输出引脚的驱动本领,进步了电路的负载本领和开关的动作速率 2.开漏输出(Open-Drain,OD) 推挽输出模式可以直接输出高电平,开漏输出需要外接上拉电阻才气输出高电平 开漏输出的特性: 利用外部电路驱动本领 实现电平转换 方便实现“逻辑与” 功能 3.复用推挽/开漏输出(Alternate Funtion,AF) GPIO除了作为通用输入输出引脚使用以外,还可以作为片上外设(USART,IIC,SPI) 专用引脚,即一个引脚可以有多种用途,但是同一时候一个引脚只能使用复用功能中的一个 当引脚设置为复用功能的时候,可选择推挽复用模式大概复用开漏模式,在设置为复用开漏模式时,需要外接上拉电阻。 输入模式: 1. 上拉输入 (Input Pull-up) VDD 经过开关、上拉电阻,毗连外部 I/O 引脚。当开关闭合时,外部 I/O 输入信号时,默认 输入高电平。 2. 下拉输入 (Input Pull-down) VSS经过开关,下拉电阻,毗连外部I/O引脚,当开关闭合时,外部I/O无输入信号时,默认输入低电平 3. 浮空输入 (Floating Input) 两个上下拉电阻开关均断开,没有上拉也没有下拉,I/O引脚直接毗连TTL肖特基触发器,此时,I/O引脚浮空,读取的电平是不确定的,外部信号是什么电平,MCU引脚就输入什么电平 ,MCU复位上电后,默以为浮空输入模式 4.模拟输入(Analoge mode) 两个上下拉电阻开关均断开,同事TTL肖特基触发器也断开,引脚信号直接毗连模拟输入,实现对外部信号的采集。 2.2GPIO的输出速率
STM32 的 I/O 引脚工作再输出模式下时,需要配置 I/O 引脚的输出速率,该输出速率不是输出信号的速率,而是I/O 口驱动电路的相应速率。 STM32 提供了三个速率, 2MHZ,10MHZ,50MHZ 现实开发过程中需要联合现实情况选择合适的相应速率,以兼顾信号的稳定性和低功耗 当设备为高速时,功耗大,噪声大,电磁干扰强 当设备为低速时,功耗低,噪声小,电磁干扰弱 简单外设,好比 LED 灯,蜂鸣器发起使用 2MHZ 的输出速率。 而复用为 IIC , SPI 等通讯信号时,发起使用 10MHZ 或 50MHZ 以进步相应速率。 3.固件库实现LED点灯
3.1LED灯
LED灯,是一种能够将电能转化为可见光的半导体期间
原理:当给P极施加正向电压时,空穴和自由电子在P-N结复合,辐射出光子而发光。 3.2.控制LED灯
LED 灯的正极接到了 3.3V , LED 灯的负极接到了 PA1 ,也就是 GPIOA1 引脚,只需要控制PA1 为相对应的低电平,即可点亮对饮的 LED 灯,输出高电平则熄灭对应的 LED灯。 软件设计流程: 1.初始化体系: 初始化GPIO 外设时钟 初始化LED 引脚 2.输出电平 实当代码: led.c文件 - #include "led.h"
- #include "stm32f10x.h"
- void LED_Init()
- {
- //³õʼ»¯LEDÒý½ÅGPIO
- GPIO_InitTypeDef led_initstruct;
- //³õʼ»¯Ê±ÖÓ
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE );
-
- led_initstruct.GPIO_Pin=GPIO_Pin_1;
- led_initstruct.GPIO_Speed=GPIO_Speed_50MHz;
- led_initstruct.GPIO_Mode=GPIO_Mode_Out_PP;
-
- GPIO_Init(GPIOA, &led_initstruct);
- }
复制代码 main.c文件
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- int main()
- {
- //初始化等的引脚GPIO
- LED_Init();
-
- while(1)
- {
- //让GPIO1输出低电平 灯就亮了
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- }
-
-
- }
复制代码 如果要让灯实现一秒闪烁:
main.c文件:
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- void delay(uint16_t time)
- {
- uint16_t i=0;
- while(time--)
- {
- i=12000;
- while(i--);
- }
- }
- int main()
- {
- //初始化等的引脚GPIO
- LED_Init();
-
- while(1)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);//GPIO1输出低电平灯亮
- delay(1000);
- GPIO_SetBits(GPIOA,GPIO_Pin_1);//GPIO1输出高电平灯灭
- delay(1000);
- }
-
-
- }
复制代码
4.STM32控制蜂鸣器
1.蜂鸣器的种类
蜂鸣器是一种常用的电子发声元器件,采用直流电压供电。广泛应用于计算机,打印 机,报警器,电子玩具,汽车电子设备灯等产物中常见的蜂鸣器可分为有源蜂鸣器和 无源蜂鸣器。 2.蜂鸣器的控制方式
有源蜂鸣器:内部有震荡源,只要通电即可主动发出固定频率的声音。(频率固定无 法控制音色) 无源蜂鸣器:内部无震荡源,需要外部脉冲信号驱动发声,声音频率可变。(可改变 频率来改变音色) 3.软件设计流程
初始化体系 初始化GPIO外设时钟 初始化蜂鸣器的引脚 输出电平控制蜂鸣器 bear.c文件 - #include "bear.h"
- #include "stm32f10x.h"
- void Bear_Init(void)
- {
- //1.初始化蜂鸣器引脚
- GPIO_InitTypeDef bear_initstruct;
- //2.初始化时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
-
- 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);
- }
复制代码 main.c文件
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- #include "bear.h"
- int main()
- {
- //初始化蜂鸣器的引脚CPIOA3
- Bear_Init();
- //GPIO3输出低电平 蜂鸣器响
- GPIO_ResetBits(GPIOA,GPIO_Pin_3);
- while(1)
- {
- }
-
-
- }
复制代码 5 按键基础知识
5.1.深入理解GPIO输入
GPIO 的特点: 具有内部上拉或下拉的功能 可以使用外部下拉或上拉
按键毗连表示图 :
5.2按键控制LED灯
初始化体系 初始化 GPIO 外设时钟 初始化按键和 LED 的引脚 检测按键输入电平来控制 LED 灯 key.c - #include "key.h"
- #include "stm32f10x.h"
- void Key_Init(void)
- {
- //³õʼ»¯°´¼üÍâÉè
- GPIO_InitTypeDef key_initstruct;
-
- //³õʼ»¯Ê±Ö
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE);
-
- key_initstruct.GPIO_Pin=GPIO_Pin_0;
- key_initstruct.GPIO_Mode=GPIO_Mode_IPU;
-
- GPIO_Init(GPIOA, &key_initstruct);
-
-
- key_initstruct.GPIO_Pin=GPIO_Pin_13;
- key_initstruct.GPIO_Mode=GPIO_Mode_IPU;
-
- GPIO_Init(GPIOC, &key_initstruct);
- }
复制代码 main.c
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- #include "bear.h"
- #include "key.h"
- int main()
- {
- LED_Init();
- Key_Init();
-
- GPIO_SetBits(GPIOA,GPIO_Pin_1);
- while(1)
- {
-
-
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- }
- if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)==1)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- }
-
- }
-
-
- }
复制代码 6 继电器
6.1.继电器的工作原理
继电器是一个电控开关,工作原理基于电磁感应,继电器包罗一个电磁线圈和一组触点。常用于控制高电流或高电压的电路,比方主动控制原理,电力体系和主动化设备中,由于可靠性和电气隔离的特性可以实现小电流实现大电流,继电器在各种应用中都有广泛的用途。
6.2.继电器的引脚阐明
1.VCC(+):供电正极,毗连此引脚到电源,以提供继电器所需的电流
2.GND(-):地,毗连此引脚到电源的负极大概地。
3.IN:控制输入信号,通常用于毗连控制信号,当该信号变化,继电器切换状态。
4.COM(common):公共端,通常是中间的触点,与常开或常闭触点相连。
5.NO(Normally Open):常开接口,继电器吸合前悬空,吸合后于COM毗连.6.NC(Normally Closed):常闭接口,继电器吸合前与COM毗连,吸合后悬空
6.3.单片机控制继电器软件开发流程
初始化体系
初始化继电器IN引脚对应的GPIO外设时钟
初始化继电器IN的引脚
输出电平控制继电器开和关
relay.c文件
- #include "stm32f10x.h"
- #include "relay.h"
- void Relay_Init(void)
- {
- GPIO_InitTypeDef GPIO_Initstruct;
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
- GPIO_Initstruct.GPIO_Pin=GPIO_Pin_0;
- GPIO_Initstruct.GPIO_Speed=GPIO_Speed_10MHz;
- GPIO_Initstruct.GPIO_Mode=GPIO_Mode_Out_PP;
-
- GPIO_Init(GPIOA,&GPIO_Initstruct);
-
- }
复制代码 main.c文件
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- #include "bear.h"
- #include "key.h"
- #include "relay.h"
- void delay(uint16_t time)
- {
- uint16_t i=0;
- while(time--)
- {
- i=12000;
- while(i--);
- }
- }
- int main()
- {
- Relay_Init();
- GPIO_SetBits(GPIOA,GPIO_Pin_0);
- while(1)
- {
-
- delay(1000);
- GPIO_ResetBits(GPIOA,GPIO_Pin_0);
- delay(1000);
- GPIO_SetBits(GPIOA,GPIO_Pin_0);
-
- }
-
-
- }
复制代码 7.震动传感器
7.1.震动传感器工作原理
震动传感器黑色震动检测传感器,工作时电源LED灯常量,震动信号检测LED灯发生震动的时候会保持亮的过程。正常工作模块DO口输出高电平震动刹时D0口输出低电平,用于各种震动触发作用,防盗报警,智能小车,电子积木灯等。
7.2.震动传感器硬件引脚接线
1.VCC:接到板子电源的5V大概3.3V。
2.GND:地,毗连到板子电源的负极大概GND。
3.DO: 数字信号输出口,可以与单片机相连检测环境是否发生震动。
7.3.震动传感器控制灯
初始化体系
初始化震动传感器D0相连的单片机引脚时钟。
初始化震动传感器DO相连的单片机引脚输入
配置检测震动控制LED灯
shake.c文件
- #include "shake.h"
- #include "stm32f10x.h"
- void Shake_Init(void)
- {
- GPIO_InitTypeDef Shake_Initstruct;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
-
- Shake_Initstruct.GPIO_Pin=GPIO_Pin_0;
-
- Shake_Initstruct.GPIO_Mode=GPIO_Mode_IPD;
-
- GPIO_Init(GPIOA,&Shake_Initstruct);
- }
复制代码 main.c文件
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- #include "bear.h"
- #include "key.h"
- #include "relay.h"
- #include "shake.h"
- void delay(uint16_t time)
- {
- uint16_t i=0;
- while(time--)
- {
- i=12000;
- while(i--);
- }
- }
- int main()
- {
- Led_Init();
- Shake_Init();
- GPIO_SetBits(GPIOA,GPIO_Pin_0);
- while(1)
- {
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- delay(1000);
- GPIO_SetBits(GPIOA,GPIO_Pin_1);
- delay(1000);
- }
- else
- {
- GPIO_SetBits(GPIOA,GPIO_Pin_1);
-
- }
-
- }
-
-
- }
复制代码 Led_Init同上.
8.433无线模块
1.433M无线模块工作原理
数据发射模块的工作频率为315M,采用声表谐振器SAW稳频,频率稳定度极高,当环境温度在-25~+85度之间变化时,频飘仅为3ppm。接收到信号,接收模块对应针脚输出高电平,有D0 D1D2 D3,可能对应遥控器的A/B/C/D。
2.引脚接线
1.供电正极,毗连此引脚到电源,以提供433M无线模块所需的电流 2.GND(-):地,毗连此引脚到电源的负极大概地。
3. D0-D4:毗连控制输入信号通常用于毗连控制信号,当按键变更控制外设信号
3.433M控制灯软件开发流程
初始化体系
初始化433M D0-D4引脚对应的GPIO外设时钟
初始化433M DO-D4引脚配置
433M按键控制外设
yao.c文件
- #include "yao.h"
- #include "stm32f10x.h"
- void Yao_Init(void)
- {
- GPIO_InitTypeDef Yao_initstruct;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
-
- Yao_initstruct.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_2;
- Yao_initstruct.GPIO_Mode=GPIO_Mode_IPU;
-
- GPIO_Init(GPIOA,&Yao_initstruct);
- }
复制代码 main.c文件
- #include "stm32f10x.h"
- #include "main.h"
- #include "led.h"
- #include "bear.h"
- #include "key.h"
- #include "relay.h"
- #include "yao.h"
- #include "Exit.h"
- int main()
- {
- LED_Init();
- Yao_Init();
-
- GPIO_SetBits(GPIOA,GPIO_Pin_1);
- //GPIO_ResetBits(GPIOA,GPIO_Pin_3);
- while(1)
- {
-
- if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)
- {
- GPIO_ResetBits(GPIOA,GPIO_Pin_1);
- }
- else if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_2)==1)
- {
- GPIO_SetBits(GPIOA,GPIO_Pin_1);
-
- }
-
-
- }
-
-
- }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |