GPIO_BlinkyLED工程实现的功能是,由串口终端触发点亮/熄灭开发板上的可编程LED灯。为了满足这些需求,需要考虑到几个设计要点: (1)应用GPIO驱动程序调用底层硬件控制可编程LED的引脚电平。 (2)扑捉串口输入事件,并做出响应。这个功能已经由UART_HelloWorld样例程序实现。 在开发板原理图中标明,开发板上的三个LED小灯分别同PTD11、PTD12、PTD13三个引脚相连,如图1所示。
图1
开始编程。
步骤一:创建工程 考虑到要使用stdio的通信信道作为人机交互,在项目代码树的“\example”目录下,复制已经创建好的样例工程“UART_HelloWorld”作为本工程的模板,改目录名为“GPIO_BlinkyLED”。
步骤二:添加应用代码 在main.c文件中添加应用程序代码如下: - /* main.c */
- #include "app_inc.h"
- /*
- * Application Function Declerations.
- */
- void LED_Configuration(void);
- void LED_LightOn(uint32_t ledIdx);
- void LED_LightOff(uint32_t ledIdx);
- /*
- * Application Entry.
- */
- int main(void)
- {
- uint32_t i;
- BSP_InitStdioUART(115200U);
- printf("\r\n\r\n# GPIO_ToggleLED Exampler #\r\n");
- /* Initialize the application. */
- printf("# Initializing ...\r\n");
-
- LED_Configuration();
-
- printf("# Ready.\r\n");
-
- /* Print the user guide. */
- printf("Press any key to toggle the LEDs ...\r\n");
-
- while (1)
- {
- for (i = 0U; i < 3U; i++)
- {
- getchar();
- LED_LightOn(i);
- getchar();
- LED_LightOff(i);
- }
- }
- }
- void LED_Configuration(void)
- {
- GPIO_InitPara GPIO_InitStructure;
- RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD,ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12| GPIO_PIN_13;
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUT_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_50MHZ;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN_11 | GPIO_PIN_12 | GPIO_PIN_13;
- GPIO_Init(GPIOD,&GPIO_InitStructure);
- }
- const uint16_t gLedPins[] = {GPIO_PIN_11, GPIO_PIN_12, GPIO_PIN_13};
- void LED_LightOn(uint32_t ledIdx)
- {
- if (ledIdx >= sizeof(gLedPins)/sizeof(gLedPins[0]))
- {
- return;
- }
- GPIO_SetBits(GPIOD, gLedPins[ledIdx]);
- }
- void LED_LightOff(uint32_t ledIdx)
- {
- if (ledIdx >= sizeof(gLedPins)/sizeof(gLedPins[0]))
- {
- return;
- }
- GPIO_ResetBits(GPIOD, gLedPins[ledIdx]);
- }
- /* EOF. */
复制代码在这个应用中,为了方便对LED灯的操作,封装了三个与LED相关的函数:LED_Configuration(),LED_LightOn()和LED_LightOff(),分别对应对连接了LED小灯的GPIO引脚进行初始化,控制引脚输出高/低电平,对应LED小灯的亮/灭。当getchar()收到从串口终端输入的字符时,才能运行下一个控制小灯的语句,否则就阻塞在原地不让后面的程序执行,从而实现了由串口终端的输出事件触发小灯状态的效果。
步骤三:下载程序,运行 启动上位机串口终端软件同开发板建立连接,编译工程,下载,复位运行程序。此时,串口终端显示信息,如图2所示。
图2
此时在串口终端中输入字符,观察开发板即可发现有红、绿、黄三个颜色的LED灯随着输入字符的动作进行闪烁。 (板子上的蓝色LED电源指示灯太耀眼,亮瞎了我的相机镜头,这里就不再演示运行现象了。)
|