stem32学习笔记---点亮一个LED灯

原理图决定低电平点亮


 根据原理图与系统结构图,点亮LED灯需要使能APB2,初始化PB6,PB7,PB8

#include "led_driver.h"


//1.硬件初始化
void led_init(void)
{
	GPIO_InitTypeDef GPIO_InitStruct;
	
	//使能时钟总线
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;  //模式
	GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;  //引脚
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;  //响应速度

	GPIO_Init(GPIOC, &GPIO_InitStruct);
	
	//关灯(初始状态):设置为高电平
	GPIO_SetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);  //设置为高电平
//void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);    //设置为低电平	
}




//2.操作硬件
void led_control(LED_TYPE led_type,LED_STATUS led_status)
{
	switch(led_type)
	{
		case LED_RED:                  //红灯
			if(led_status == LED_ON)   //灯亮
			{
				GPIO_ResetBits(GPIOC, GPIO_Pin_8);
			}	
			else                       //灯灭
			{
				GPIO_SetBits(GPIOC, GPIO_Pin_8);
			}
			break;

		case LED_GREEN:                //绿灯
			if(led_status == LED_ON)   //灯亮
			{
				GPIO_ResetBits(GPIOC, GPIO_Pin_7);
			}	
			else                       //灯灭
			{
				GPIO_SetBits(GPIOC, GPIO_Pin_7);
			}
			break;			

		case LED_BLUE:                  //蓝灯
			if(led_status == LED_ON)   //灯亮
			{
				GPIO_ResetBits(GPIOC, GPIO_Pin_6);
			}	
			else                       //灯灭
			{
				GPIO_SetBits(GPIOC, GPIO_Pin_6);
			}
			break;
			
		case LED_ALL:                  //白灯(所有灯)
			if(led_status == LED_ON)   //灯亮
			{
				GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
			}	
			else                       //灯灭
			{
				GPIO_SetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
			}
			break;			

	}
}

#include "stm32f10x.h"
#include "led_driver.h"

//延时函数
void delay(int n)
{
	int i,j;
	
	for(i = 0; i < n;i++)
		for(j =0;j < 5000; j++);
}



int main(void)
{
	led_init();
	
	
  
  while (1)
  {
	  led_control(LED_ALL,LED_OFF);
	  led_control(LED_RED,LED_ON);
	  delay(1000);
	  
	  led_control(LED_ALL,LED_OFF);
	  led_control(LED_GREEN,LED_ON);
	  delay(1000);
	  
	  led_control(LED_ALL,LED_OFF);
	  led_control(LED_BLUE,LED_ON);
	  delay(1000);
  }

}

猜你喜欢

转载自blog.csdn.net/weixin_42471952/article/details/81156875