Bootstrap

嵌入式从零开始运用FM33LG048第二期 ----GPIO配置 点亮一个小灯

        下面来到经典环节:点亮一颗电容,哦不,点亮一颗小灯。点亮小灯分为高电平驱动和低电平驱动,本质就是让小灯两边有电压差,通过看开发板原理图可知,板子上的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);
  }
}

        如有不懂之处欢迎提问!希望大家多多支持,共同进步!求关注!

;