下面来到经典环节:点亮一颗电容,哦不,点亮一颗小灯。点亮小灯分为高电平驱动和低电平驱动,本质就是让小灯两边有电压差,通过看开发板原理图可知,板子上的LED是低电平驱动,因为小灯另一端都接在VCC,只需要单片机对应GPIO输出低电平,就可以让小灯两端有电压差,小灯就会亮。
接下来我们要从代码方面让对应GPIO输出低电平,以下是GPIO的配置代码:
#include "led.h"
/********************************************************************
*@函数名:LED_GPIO_Init(void)
*@功 能:初始化LED的IO引脚
*@形 参:NULL
*@返回值:NULL
*@备 注:NULL
********************************************************************/
void LED_GPIO_Init(void)
{
FL_GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.pin = FL_GPIO_PIN_0 ;
GPIO_InitStruct.pull = FL_ENABLE;
GPIO_InitStruct.mode = FL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.analogSwitch = FL_DISABLE;
GPIO_InitStruct.outputType = FL_GPIO_OUTPUT_OPENDRAIN;
GPIO_InitStruct.remapPin = FL_DISABLE;
FL_GPIO_Init(GPIOC,&GPIO_InitStruct);
}
void LED_OFF()
{
FL_GPIO_SetOutputPin(GPIOC,FL_GPIO_PIN_0);
}
void LED_ON()
{
FL_GPIO_ResetOutputPin(GPIOC,FL_GPIO_PIN_0);
}
下面我对该结构体成员做一些解释:
① pin:代表着GPIO引脚的序号,比如你想要初始化PC0,那这里就是FL_GPIO_PIN_0
②pull:这里代表是否开启上拉电阻,enable就是开启上拉,开启上拉电阻后,GPIO在空闲状态下就会保持高电平。
③mode:模式,可以配置成输入模式、输出模式、数字模式、模拟模式,这里我们想要它输出来控制小灯,所以是输出模式。
④analogSwitch:模拟开关使能
⑤outputType:输出模式,分为推挽输出(既能输出高电平也能输出低电平)、开漏输出(只能输出低电平)两种模式
⑥remapin:引脚复用,这个是比较重要的一个选项,很多客户都因为漏掉这个导致功能无法实现,此时需要查看LG手册IO端口定义部分内容。为了节省资源,经常一个引脚会用于不同功能,看图中的PA8,它同时用作了SPI_SSN 和 LPT32 CH1,可以看到前者在数字功能1那一列,后者在数字功能2那一列,如果我们想将PA8用作SPI_SSN ,remapin则需要给disable,如果要用作LPT32 CH1,则需要remapin给enable。给错了的话就无法实现功能。需要注意!
这是LED.h文件的代码
#ifndef LED_H
#define LED_H
#include "fm33lg0xx_fl.h"
void LED_GPIO_Init(void);
void LED_ON(void);
void LED_OFF(void);
#endif
最后在主函数调用,编译烧录就可以点亮小灯了!
#include "fm33lg0xx_fl.h"
#include "led.h"
int main(void)
{
FL_Init();
FL_DelayMs(100);
LED_GPIO_Init();
while(1)
{
LED_ON();
FL_DelayMs(1000);
LED_OFF();
FL_DelayMs(1000);
}
}
如有不懂之处欢迎提问!希望大家多多支持,共同进步!求关注!