stm32工程和算法分享(7)--按键切换灯的频率
2021/12/25 17:09:24
本文主要是介绍stm32工程和算法分享(7)--按键切换灯的频率,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
按键切换灯的频率
1.CubeMX配置工程
这里使用的是stm32最小系统核心板和自己搭建的小电路实现的。
这里使用的是有源蜂鸣器(按键有提示音)
CubeMX新建工程,选择芯片,配置时钟树,外部晶振以及调试接口。具体设置可参考使用cubemx配置stm32(二)__核心配置
然后配置GPIO口,电路图看到按键按下时接地为低电平,不按下应该为高电平,所以选择内部上拉
上图配置完BEEP和KEY,再配置LED1 LED2
配置完成后生成代码
2.在main.c中添加代码,完成工程的编写
定义全局变量,和函数,在main函数的while中循环调用,两个函数通过一个全局变量 flg 联系起来
CubeMX生成的代码有“/* USER CODE BEGIN WHILE / ” “ / USER CODE END WHILE */”在BEGIN,END之间加入的代码不会在重新配置时被覆盖掉
找到 USER CODE BEGIN 0 ,在后面写上三个函数的具体定义
代码如下:
uint8_t flg=0; uint8_t style=0;
static void KEY_Task(void); static void BEEP_Task(void); static void LED_Task(void);
void KEY_Task(void) { static uint32_t count=0; static uint8_t step=0; switch(step) { case 0: { if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_RESET) { count++; if(count>=10000) { count=0; step=1; } } else { count=0; } } break; case 1: { if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==GPIO_PIN_SET) { style++; style=style%3; step=0; flg =1; } } break; } } void BEEP_Task(void) { static uint32_t count=0; static uint8_t step=0; if(flg) { switch(step) { case 0: { HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_SET); //打开蜂鸣器 step=1; } break; case 1: { count++; if(count>=150000) { count=0; HAL_GPIO_WritePin(BEEP_GPIO_Port,BEEP_Pin,GPIO_PIN_RESET); //关闭蜂鸣器 step=0; flg=0; } } break; } } } void LED_Task(void) { static uint32_t count=0; static uint8_t step=0; switch(style) { case 0: { switch(step) { case 0: { count++; if(count>=50000) { count=0; HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //灭LED1 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); //灭LED2 step=1; } } break; case 1: { count++; if(count>=50000) { count=0; HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //亮LED1 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET); //亮LED2 step=0; } } break; } } break; case 1: { switch(step) { case 0: { count++; if(count>=150000) { count=0; HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //灭LED1 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); //灭LED2 step=1; } } break; case 1: { count++; if(count>=150000) { count=0; HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //亮LED1 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET); //亮LED2 step=0; } } break; } } break; case 2: { switch(step) { case 0: { count++; if(count>=450000) { count=0; HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET); //灭LED1 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_SET); //灭LED2 step=1; } } break; case 1: { count++; if(count>=450000) { count=0; HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); //亮LED1 HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin,GPIO_PIN_RESET); //亮LED2 step=0; } } break; } } break; } }
KEY_Task(); BEEP_Task(); LED_Task();
这篇关于stm32工程和算法分享(7)--按键切换灯的频率的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现