两个按键控制彩灯的红、绿灯反转,按一下KEY1 红灯反转一次,按一下KEY2,绿灯反转一次。
使用EXTI中断方式检测按键输入。
检测到按键引脚上升沿会进入中断,在stm32f4xx_it.c文件中的中断服务函数处理。
学习目的:了解STM32的中断系统。
【*】 引脚分配
KEY:
两个按键均有硬件去抖,按下的时候均为高电平,不按时为低电平。
KEY1<--->PA0
KEY2<--->PC13
LED:
RGB彩灯的三个阴极接到STM32三个引脚上,LED低电平亮。
R<--->PH10
G<--->PH11
B<--->PH12
LED4<--->PD11
单片机源程序如下:
- #include "stm32f4xx.h"
- #include "./led/bsp_led.h"
- #include "./key/bsp_exti.h"
- #include "./usart/bsp_debug_usart.h"
- void Delay(__IO u32 nCount);
- /*************************输出提示信息*************************************/
- static void show_Message(void)
- {
- printf("\r\n 这是一个通讯串口的实验控制RGB彩灯 \n");
- printf(" 使用 USART1 参数为:%d 8-N-1 \n",DEBUG_USART_BAUDRATE);
- printf("开发板接到的指令后控制RGB彩灯颜色,指令对应如下: \n");
- printf(" 指令 ---------------灯的颜色\n");
- printf(" 1 ------- --------红\n");
- printf(" 2 ------- --------绿\n");
- printf(" 3 ------- --------蓝\n");
- printf(" 4 ------- --------黄n");
- printf(" 5 ------- --------紫\n");
- printf(" 6 ------- --------青\n");
- printf(" 7 ------- --------白\n");
- printf(" 8 ------- --------灭\n");
-
- }
- /**
- * @brief 主函数
- * @param 无
- * @retval 无
- */
-
- int main(void)
- {
- char ch;
- /* LED 端口初始化 */
- LED_GPIO_Config();
-
- /* 初始化EXTI中断,按下按键会触发中断,
- * 触发中断会进入stm32f4xx_it.c文件中的函数
- * KEY1_IRQHandler和KEY2_IRQHandler,处理中断,反转LED灯。
- */
- EXTI_Key_Config();
- /* 等待中断,由于使用中断方式,CPU不用轮询按键 */
- Debug_USART_Config();
-
- show_Message();
-
- Usart_SendString(DEBUG_USART,"串口发送接收");
-
-
- while(1)
- {
- ch = getchar();
- printf("接收到的字符:%c\n",ch);
-
- switch(ch)
- {
- case '1':
- LED_RED;
- break;
- case '2':
- LED_GREEN;
- break;
- case '3':
- LED_BLUE;
- break;
- case '4':
- LED_YELLOW;
- break;
- case '5':
- LED_PURPLE;
- break;
- case '7':
- LED_CYAN;
- break;
- case '8':
- LED_WHITE;
- break;
- case '9':
- LED_RGBOFF;
- break;
-
- }
- }
- }
- /*********************************************END OF FILE**********************/
复制代码
所有资料51hei提供下载:
10-EXTI—外部中断.7z
(352.51 KB, 下载次数: 25)
|