前言:
学习目标:
STM32分03zet6下点亮LED灯
简单介绍:
主要就是通过结构体和GPIO_Init()函数初始化相应的GPIO;很简单直接上代码。通过GPIO_SetBits()和GPIO_ResetBits()设置高低电平。自己封装了三个写一个点灯函数分别是不同颜色的灯。这部分没啥可将的。
代码:
/* 用于接收串口获取到的的led灯数据 */
extern int led_data;
void led_init(void)
{
/*打开时钟*/
GPIO_InitTypeDef led;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOF,ENABLE);
/*GPIO 模式配置 初始化GPIOA.8*/
led.GPIO_Mode=GPIO_Mode_Out_PP;
led.GPIO_Pin=GPIO_Pin_8;
led.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&led);
/*初始化GPIOF.8~10*/
led.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
GPIO_Init(GPIOF,&led);
/*重置电平 亮灯*/
GPIO_ResetBits(GPIOF,GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);
}
/* GPIOF.8 -> red */
void led_red(int a)
{
if(a == 0)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
}
if(a == 1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_8);
}
}
/* GPIOF.9 -> blue */
void led_blue(int a)
{
if(a == 0)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
}
if(a == 1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9);
}
}
/* GPIOF.10 -> green */
void led_green(int a)
{
if(a == 0)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
}
if(a == 1)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
}
}
/* 串口协议部分注释 */
/*8003 表示三角形 8004表示四边形 8005表示圆形*/
/*8000 表示关灯 8009多边形 */
/*GPIOF.8 白线 GPIOF,GPIO_Pin_8 8004
*GPIOF.9 灰线 GPIOF,GPIO_Pin_9 8003
*GPIOF.10 紫线 GPIOF,GPIO_Pin_10 8005
*/
void led_on(int a)
{
if(8000 <= a < 8100)
{
//printf("led_data = %4d\r\n",a);
switch (a)
{
case 8000:led_green(1);led_blue(1);led_red(1);break;
case 8005:led_green(0);led_blue(1);led_red(1);break;
case 8003:led_blue(0);led_green(1);led_red(1);break;
case 8004:led_red(0);led_green(1);led_blue(1);break;
}
}
}