目录
1、LED模块连接图
图(1)LED模块连接图
2、LED驱动原理
本设计主控使用的是STM232F103C8T6,本设计共有三个可控制LED,LED的正极接在一个限流电阻然后到电源正极,负极接到单片机的GPIO口,根据LED的驱动原理,当LED的正负极有一定的电压差时,LED会被点亮,所以只需要控制IO口输出高电平或者低电平就可以控制LED的熄灭和点亮。
3、GPIO的配置
推挽输出与开漏输出的区别:推挽输出可以输出强高低电平(高电平为3.3V),一般用来连接数字器件。在STM32的应用中,除了必须用开漏模式的场合,我们都习惯使用推挽输出模式,开漏输出只可输出强低电平,高电平需要靠外部电阻拉高,开漏输出一般应用在I2C通讯等需要“线与”功能的总线电路中,开漏输出模式下如需要输出5伏的高电平,就可以在外部接一个上拉电阻,上拉电源为5伏,当输出高阻态时,由上拉电阻和电源向外输出5伏电平,所以我们驱动LED只需要配置为推挽输出即可。
LED的GPIO初始化流程:开启GPIO时钟->选择IO口->选择IO口的工作模式->选择IO口运行速度->初始化GPIO口->IO口输出高电平
led.c文件:
#include "LED.h"
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //引出结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOC时钟
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO口模式,推挽输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_7|GPIO_Pin_12; //选择使用的IO口,
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //选择IO运行速度
GPIO_Init(GPIOC, &GPIO_InitStructure); //GPIO初始化
GPIO_SetBits(GPIOB, GPIO_Pin_1); //PB1输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_7); //PB7输出高电平
GPIO_SetBits(GPIOB, GPIO_Pin_12); //PB12输出高电平
}
led.h文件:
#ifndef __LED_H
#define __LED_H
#include "stm32f10x.h"
#define LED0_ON GPIO_ResetBits(GPIOB,GPIO_Pin_1)
#define LED0_OFF GPIO_SetBits(GPIOB,GPIO_Pin_1)
#define LED1_ON GPIO_ResetBits(GPIOB,GPIO_Pin_7)
#define LED1_OFF GPIO_SetBits(GPIOB,GPIO_Pin_7)
#define LED2_ON GPIO_ResetBits(GPIOB,GPIO_Pin_12)
#define LED2_OFF GPIO_SetBits(GPIOB,GPIO_Pin_12)
void LED_Init(void);
#endif
4、主函数
#include "stm32f10x.h" // Device header
#include "Delay.h"
#include "LED.h"
int main(void)
{
LED_Init();
while (1)
{
LED0_ON;
LED1_ON;
LED2_ON;
Delay_ms(300);
LED0_OFF;
LED1_OFF;
LED2_OFF;
Delay_ms(300);
}
}
以上即为本文的主要代码,本次代码完成三个LED交替闪烁的效果