一、概述
不管什么单片机,想要控制LED灯,只能是通过控制单片机芯片的I/O引脚电平的高低来实现。
同样在ST单片机上,I/O引脚可以被软件设置成各种不同的功能,如输入或输出,所以被称为 GPIO (General-purpose I/O)。
而GPIO引脚又被分为GPIOA、GPIOB„„GPIOG不同的组,每组端口分为 0~15,共16个不同的引脚不等,
对于不同型号的芯片,端口的组和引脚的数量不尽相同,具体请参考相应ST单片机芯片型号的datasheet。
根据ST单片机的GPIO特点,控制LED灯的步骤如下:
1.在众多 GPIO端口引脚中选定需要控制的特定引脚[与LED相连的控制引脚]
2.根据外设配置GPIO需要的特定功能
3.通过设置 GPIO输出电压的高低控制LED的亮和灭
二、硬件电路图
三、需要用到的库函数
四、应用程序设计
main.c
/*********************************************************
*平台:MDKARM 5.14
*主控:STM32F051C8T6
**********************************************************/
#include "stm32f0xx.h"
#include "led.h"
#include "delay.h"
int main (void)
{
Delay_Init(48); //延时函数初始化
LED_Init(); //LED初始化
while (1)
{
LED_Not(0);
Delay_ms( 500 ); //控制闪烁速度
}
}
led.c
#include "led.h"
//LED控制端口初始化
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //开启CPIOB时钟
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12; //选择控制引脚
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT; //设置为输出模式
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP; //设置为推挽方式
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_Level_3; //设置引脚速度为高速
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL; //设置引脚为没有上下拉
GPIO_Init(GPIOB,&GPIO_InitStructure); //初始化函数
//初始化LED关闭
GPIO_ResetBits(GPIOB, GPIO_Pin_15 | GPIO_Pin_14 | GPIO_Pin_13 | GPIO_Pin_12);
}
void LED_Not(int n)
{
switch(n)
{
//对引脚电平取反
case 0: GPIO_WriteBit(GPIOB, GPIO_Pin_15,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15))));
break;
case 1: GPIO_WriteBit(GPIOB, GPIO_Pin_14,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_14))));
break;
case 2: GPIO_WriteBit(GPIOB, GPIO_Pin_13,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_13))));
break;
case 3: GPIO_WriteBit(GPIOB, GPIO_Pin_12,(BitAction)(1-(GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_12))));
break;
default: break;
}
}
这样编译下载后就能看到LED一闪一闪的
上一篇:STM32时钟模块 STM32F103RCT6
下一篇:STM32库函数端口初始化说明
推荐阅读最新更新时间:2024-03-16 16:10