目录
1.GPIO基础知识
1.1系统架构
2. IO八种工作模式

2.1STM32 IO工作模式

2.2GPIO的输出速度
3.固件库实现LED点灯
3.1LED灯
LED灯,是一种能够将电能转化为可见光的半导体期间
3.2.控制LED灯
#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.软件设计流程
#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输入
5.2按键控制LED灯
#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);
}
}
}