四、HAL_驱动机械按键

1、开发环境。

(1)KeilMDK:V5.38.0.0

(2)STM32CubeMX:V6.8.1

(3)MCU:STM32F407ZGT6

2、机械按键简介

(1)按键内部是机械结构,也就是内部是没有电路的。按键按下内部引脚导通,松开内部断开。

3、实验目的&原理图

3.1、实验目的

(1)通过按键改变LED灯状态,按键检测采用外部中断。

3.2、原理图

(1)按键选择K1按键,K1接PE2。

(2)LED灯选择LED1,LED1接PF9。

 

4、STM32CubeMX创建工程及配置

4.1、创建工程

(1)打开STM32CubeMX软件。

(2)点击File→NewProject。

(3)Commercial Part Number(商用部件号)处输入MCU型号,然后选择正确的单片机型号,点击Start Project(开始项目)。

(4)配置工程名、工程存放文件等。

点击Project Manager(项目经理)进行如下配置。

点击Code Generator(代码生成器)进行如下配置。 

(5)修改中断优先级,按键消抖在中断中要使用HAL_Delay()函数,需要HAL_Delay()函数的优先级比外部中断低。

(6)点击GENERATE CODE生成KeilMDK工程。

4.2、配置时钟及GPIO

(1)HSE、LSE时钟源选择

  • HSE:高速外部时钟源
  • LSE:低速外部时钟源
  • Disable:禁用
  • BYPASS Clock Source:旁路时钟源
  • Crystal/Ceramic Resonator :水晶/陶瓷共振器
  • 一般选择水晶陶瓷共振器
  • 旁路时钟源就是由外部给定一个时钟信号,一般用于作为同步时钟。
  • 水晶/陶瓷共振器:指外接晶振,经过内部振荡电路产生时钟。

(2)LED1 GPIO配置

(2)K1 GPIO配置

  • External interrupt Mode with Resing edge trigger detection:外部中断模式与上升沿触发检测
  • External interrupt Mode with Falling edge trigger detection:外部中断模式与下降沿触发检测

 (3)打开K1按键的外部中断

(4)时钟树配置

(5)配置完需要重新点击GENERATE CODE更新KeilMDK代码。

5、KeilMDK软件编写

5.1、程序编写。

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
	if(GPIO_Pin == K1_Pin)    /*按键被按下,产生下降沿*/
	{
		/*中断执行内容较多,可在中断回调函数中设立标志位,在while循环中去检测标志位。
		 *检测到标志位在执行相应的内容,这样不会影响到其他中断的响应
		 */
		HAL_Delay(15);          /*延时消抖15毫秒*/
		if(HAL_GPIO_ReadPin(K1_GPIO_Port, K1_Pin) == GPIO_PIN_RESET)  /*按键消抖*/
		{
			HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);  /*LED1灯状态取反*/
		}	
	}
}

5.2、完整工程下载地址。

(1)完整工程存储在码云。

(2)STM32_CSDN: CSDN中STM32专栏的所有示例代码

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码织梦师小猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值