四、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。

四、HAL_驱动机械按键_第1张图片

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

 四、HAL_驱动机械按键_第2张图片

4、STM32CubeMX创建工程及配置

4.1、创建工程

(1)打开STM32CubeMX软件。

(2)点击File→NewProject。

四、HAL_驱动机械按键_第3张图片

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

四、HAL_驱动机械按键_第4张图片

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

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

四、HAL_驱动机械按键_第5张图片

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

四、HAL_驱动机械按键_第6张图片

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

四、HAL_驱动机械按键_第7张图片

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

4.2、配置时钟及GPIO

(1)HSE、LSE时钟源选择

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

四、HAL_驱动机械按键_第8张图片

(2)LED1 GPIO配置

四、HAL_驱动机械按键_第9张图片

(2)K1 GPIO配置

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

四、HAL_驱动机械按键_第10张图片

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

四、HAL_驱动机械按键_第11张图片

(4)时钟树配置

四、HAL_驱动机械按键_第12张图片

(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专栏的所有示例代码

四、HAL_驱动机械按键_第13张图片

 

你可能感兴趣的:(STM32单片机,单片机,stm32,嵌入式硬件)