回答

收藏

[原创] 《GD32-Colibri-F207ZE开发板玩家笔记》之GPIO_SimpleButton

GD32 GD32 3025 人阅读 | 0 人回复 | 2016-02-19

GPIO_SimpleButton工程实现的功能是,由开发板上的可编程按键触发点亮/熄灭开发板上的可编程LED灯。为了满足这些需求,需要考虑到几个设计要点:
(1)应用GPIO驱动程序调用底层硬件读取按键输入引脚电平。
(2)应用GPIO驱动程序调用底层硬件控制可编程LED的引脚电平。
(3)在程序主循环中,将按键输入电平同控制LED输出电平的动作建立关联。
在开发板原理图中标明,开发板上的两个可编程按键分别同PTD14、PTD15两个引脚相连,如图1所示。

图1


开始编程:

步骤一:创建工程
复制已经创建好的样例工程“GPIO_BlinkyLED”作为本工程的模板,改目录名为“GPIO_SimpleButton”。在本样例工程中,要用到上个“GPIO_BlinkyLED”控制LED小灯的功能。

步骤二:添加应用代码
在main.c文件中新增与可编程按键相关的封装函数如下:
  1. void BTN_Configuration(void)
  2. {
  3.     GPIO_InitPara GPIO_InitStructure;
  4.    
  5.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD ,ENABLE);

  6.     /* Configure PD14\15 pin */
  7.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_14|GPIO_PIN_15;
  8.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
  9.     GPIO_Init(GPIOD, &GPIO_InitStructure);
  10. }

  11. const uint16_t gBtnPins[] = {GPIO_PIN_14, GPIO_PIN_15};

  12. bool BTN_IsPressedDown(uint32_t btnIdx)
  13. {
  14.     if (btnIdx >= sizeof(gBtnPins)/sizeof(gBtnPins[0]))
  15.     {
  16.         return false;
  17.     }
  18.     if (RESET == GPIO_ReadInputBit(GPIOD, gBtnPins[btnIdx]))
  19.     {
  20.         return true;
  21.     }
  22.     else
  23.     {
  24.         return false;
  25.     }
  26. }
复制代码
编写main函数实现应用代码如下:
  1. /*
  2. * Application Entry.
  3. */
  4. int main(void)
  5. {
  6.     uint32_t i;

  7.     BSP_InitStdioUART(115200U);

  8.     printf("\r\n\r\n# GPIO_SimpleButton Example r#\r\n");

  9.     /* Initialize the application. */
  10.     printf("# Initializing ...\r\n");
  11.    
  12.     LED_Configuration();
  13.     BTN_Configuration();
  14.    
  15.     printf("# Ready.\r\n");
  16.    
  17.     /* Print the user guide. */
  18.     printf("# Press the buttons to turn on the LEDs ...\r\n");
  19.    
  20.     while (1)
  21.     {
  22.         for (i = 0U; i < 2U; i++)
  23.         {
  24.             if (BTN_IsPressedDown(i))
  25.             {
  26.                 LED_LightOn(i);
  27.             }
  28.             else
  29.             {
  30.                 LED_LightOff(i);
  31.             }
  32.         }
  33.     }
  34. }
复制代码
该应用程序实现了通过检测两个可编程按键对应GPIO的输入电平,从而分别控制两个LED小灯对应GPIO的输出电平,从而实现了使用按键控制小灯亮暗的效果。

步骤三:下载程序,运行
编译工程,下载,复位运行程序。此时,当分别按下开发板上的Key1和Key2时,红色LED灯和绿色LED会随之变亮,当松开按键时,LED熄灭。

搞定收工!


分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条