查看: 2638|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2018-10-29 22:48
  • 签到天数: 731 天

    连续签到: 1 天

    [LV.9]以坛为家II

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

    图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熄灭。

    搞定收工!


    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-12-24 12:53 , Processed in 0.123801 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.