STM32F051C8T6控制LED

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/snyanglq/article/details/50817472

一、概述

不管什么单片机,想要控制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 );<span style="white-space:pre">	</span>//控制闪烁速度
	}
}
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一闪一闪的

猜你喜欢

转载自blog.csdn.net/snyanglq/article/details/50817472