原理图决定低电平点亮
根据原理图与系统结构图,点亮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);
}
}