GPIO_SimpleButton工程实现的功能是,由开发板上的可编程按键触发点亮/熄灭开发板上的可编程LED灯。为了满足这些需求,需要考虑到几个设计要点: (1)应用GPIO驱动程序调用底层硬件读取按键输入引脚电平。 (2)应用GPIO驱动程序调用底层硬件控制可编程LED的引脚电平。 (3)在程序主循环中,将按键输入电平同控制LED输出电平的动作建立关联。 在开发板原理图中标明,开发板上的两个可编程按键分别同PTD14、PTD15两个引脚相连,如图1所示。
图1
开始编程:
步骤一:创建工程 复制已经创建好的样例工程“GPIO_BlinkyLED”作为本工程的模板,改目录名为“GPIO_SimpleButton”。在本样例工程中,要用到上个“GPIO_BlinkyLED”控制LED小灯的功能。
步骤二:添加应用代码 在main.c文件中新增与可编程按键相关的封装函数如下: - void BTN_Configuration(void)
- {
- GPIO_InitPara GPIO_InitStructure;
-
- RCC_APB2PeriphClock_Enable(RCC_APB2PERIPH_GPIOD ,ENABLE);
- /* Configure PD14\15 pin */
- GPIO_InitStructure.GPIO_Pin = GPIO_PIN_14|GPIO_PIN_15;
- GPIO_InitStructure.GPIO_Mode = GPIO_MODE_IN_FLOATING;
- GPIO_Init(GPIOD, &GPIO_InitStructure);
- }
- const uint16_t gBtnPins[] = {GPIO_PIN_14, GPIO_PIN_15};
- bool BTN_IsPressedDown(uint32_t btnIdx)
- {
- if (btnIdx >= sizeof(gBtnPins)/sizeof(gBtnPins[0]))
- {
- return false;
- }
- if (RESET == GPIO_ReadInputBit(GPIOD, gBtnPins[btnIdx]))
- {
- return true;
- }
- else
- {
- return false;
- }
- }
复制代码编写main函数实现应用代码如下: - /*
- * Application Entry.
- */
- int main(void)
- {
- uint32_t i;
- BSP_InitStdioUART(115200U);
- printf("\r\n\r\n# GPIO_SimpleButton Example r#\r\n");
- /* Initialize the application. */
- printf("# Initializing ...\r\n");
-
- LED_Configuration();
- BTN_Configuration();
-
- printf("# Ready.\r\n");
-
- /* Print the user guide. */
- printf("# Press the buttons to turn on the LEDs ...\r\n");
-
- while (1)
- {
- for (i = 0U; i < 2U; i++)
- {
- if (BTN_IsPressedDown(i))
- {
- LED_LightOn(i);
- }
- else
- {
- LED_LightOff(i);
- }
- }
- }
- }
复制代码该应用程序实现了通过检测两个可编程按键对应GPIO的输入电平,从而分别控制两个LED小灯对应GPIO的输出电平,从而实现了使用按键控制小灯亮暗的效果。
步骤三:下载程序,运行 编译工程,下载,复位运行程序。此时,当分别按下开发板上的Key1和Key2时,红色LED灯和绿色LED会随之变亮,当松开按键时,LED熄灭。
搞定收工!
|