微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 外部中断

外部中断

时间:10-02 整理:3721RD 点击:
今天学习中断输入,按下按键显示Pressed,松开显示Realease
实验原理图:


Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F412ZGTx。


Step2.在 Pinout 界面下配置 PC13 按键输入引脚为 EXTI 功能。


Step3.配置 USART,用于按键信息输出。



时钟树的配置丌作任何修改,使用内部 16M 时钟源,内核时钟 16M。
Step4.配置串口参数和 GPIO 的参数。
在 configuration 界面中点击 USART3 按钮,可以进入参数配置界面,使用默认参数即可。


在 configuration 界面中点击 GPIO 按钮,配置 GPIO 的无上下拉电阻和中断触发沿。


在 configuration 界面中点击 NVIC 按钮,使能 GPIO 外部中断,并配置中断优先级。


Step5.生成源代码。
点击生成源代码按钮。



Step6.添加功能代码。
在/* USER CODE BEGIN 4 */和/* USER CODE END 4 */注释之间加入下述代码。实现的功能
是,按键触发中断后,通过串口发送相应信息。要注意的是,按一次按键,可能会发送多条信
息,原因是按键存在的抖动,这和事实相符。

  1. /* USER CODE BEGIN 4 */
  2. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  3. {
  4.         if(GPIO_Pin & GPIO_PIN_13)
  5.         {
  6.                 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) == GPIO_PIN_SET)
  7.                 {
  8.                         const char* pBuf = "Pressed\r\n";
  9.                         HAL_UART_Transmit(&huart3,(uint8_t*)pBuf,strlen(pBuf),100);
  10.                 }
  11.                 else
  12.                 {
  13.                         const char* pBuf = "Release\r\n";
  14.                         HAL_UART_Transmit(&huart3,(uint8_t*)pBuf,strlen(pBuf),100);
  15.                 }
  16.         }
  17. }
  18. /* USER CODE END 4 */

复制代码

在 CubeMX 生成的程序框架中,GPIO 外部中断共用一个回调凼数接口。要想知道是哪个中断
源,就判断其输入参数 GPIO_Pin。
实验结果:


按下会显示Pressed,松开显示Realease.

顶一下,0回复啊

小编的进度好快啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top