查看: 2926|回复: 0

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

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

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2016-2-19 23:40:19 | 显示全部楼层 |阅读模式
    分享到:
    GPIO_BlinkyLED工程实现的功能是,由串口终端触发点亮/熄灭开发板上的可编程LED灯。为了满足这些需求,需要考虑到几个设计要点:
    (1)应用GPIO驱动程序调用底层硬件控制可编程LED的引脚电平。
    (2)扑捉串口输入事件,并做出响应。这个功能已经由UART_HelloWorld样例程序实现。
    在开发板原理图中标明,开发板上的三个LED小灯分别同PTD11、PTD12、PTD13三个引脚相连,如图1所示。

    图1.png

    图1


    开始编程。

    步骤一:创建工程
    考虑到要使用stdio的通信信道作为人机交互,在项目代码树的“\example”目录下,复制已经创建好的样例工程“UART_HelloWorld”作为本工程的模板,改目录名为“GPIO_BlinkyLED”。

    步骤二:添加应用代码
    在main.c文件中添加应用程序代码如下:
    1. /* main.c */
    2. #include "app_inc.h"

    3. /*
    4. * Application Function Declerations.
    5. */
    6. void LED_Configuration(void);
    7. void LED_LightOn(uint32_t ledIdx);
    8. void LED_LightOff(uint32_t ledIdx);

    9. /*
    10. * Application Entry.
    11. */
    12. int main(void)
    13. {
    14.     uint32_t i;

    15.     BSP_InitStdioUART(115200U);

    16.     printf("\r\n\r\n# GPIO_ToggleLED Exampler #\r\n");

    17.     /* Initialize the application. */
    18.     printf("# Initializing ...\r\n");
    19.    
    20.     LED_Configuration();
    21.    
    22.     printf("# Ready.\r\n");
    23.    
    24.     /* Print the user guide. */
    25.     printf("Press any key to toggle the LEDs ...\r\n");
    26.    
    27.     while (1)
    28.     {
    29.         for (i = 0U; i < 3U; i++)
    30.         {
    31.             getchar();
    32.             LED_LightOn(i);
    33.             getchar();
    34.             LED_LightOff(i);
    35.         }
    36.     }
    37. }

    38. void LED_Configuration(void)
    39. {
    40.     GPIO_InitPara GPIO_InitStructure;
    41.     RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD,ENABLE);

    42.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12| GPIO_PIN_13;
    43.     GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
    44.     GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
    45.     GPIO_Init(GPIOD,&GPIO_InitStructure);

    46.     GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
    47.     GPIO_Init(GPIOD,&GPIO_InitStructure);
    48. }

    49. const uint16_t gLedPins[] = {GPIO_PIN_11, GPIO_PIN_12, GPIO_PIN_13};

    50. void LED_LightOn(uint32_t ledIdx)
    51. {
    52.     if (ledIdx >= sizeof(gLedPins)/sizeof(gLedPins[0]))
    53.     {
    54.         return;
    55.     }
    56.     GPIO_SetBits(GPIOD, gLedPins[ledIdx]);
    57. }

    58. void LED_LightOff(uint32_t ledIdx)
    59. {
    60.     if (ledIdx >= sizeof(gLedPins)/sizeof(gLedPins[0]))
    61.     {
    62.         return;
    63.     }
    64.     GPIO_ResetBits(GPIOD, gLedPins[ledIdx]);
    65. }

    66. /* EOF. */
    复制代码
    在这个应用中,为了方便对LED灯的操作,封装了三个与LED相关的函数:LED_Configuration(),LED_LightOn()和LED_LightOff(),分别对应对连接了LED小灯的GPIO引脚进行初始化,控制引脚输出高/低电平,对应LED小灯的亮/灭。当getchar()收到从串口终端输入的字符时,才能运行下一个控制小灯的语句,否则就阻塞在原地不让后面的程序执行,从而实现了由串口终端的输出事件触发小灯状态的效果。

    步骤三:下载程序,运行
    启动上位机串口终端软件同开发板建立连接,编译工程,下载,复位运行程序。此时,串口终端显示信息,如图2所示。

    图2.png

    图2

    此时在串口终端中输入字符,观察开发板即可发现有红、绿、黄三个颜色的LED灯随着输入字符的动作进行闪烁。
    (板子上的蓝色LED电源指示灯太耀眼,亮瞎了我的相机镜头,这里就不再演示运行现象了。)






    回复

    使用道具 举报

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

    本版积分规则

    关闭

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



    手机版|小黑屋|与非网

    GMT+8, 2024-11-15 11:14 , Processed in 0.111700 second(s), 16 queries , MemCache On.

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

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.