你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用CubMX和Proteus学习STM32单片机(八)------外部中断

[复制链接]
STMCU小助手 发布时间:2022-11-16 15:42
项目简介
        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。本项目需要实现的功能就是利用CubMX配置外部中断,由外部按键触发外部中断,控制LED灯的状态改变,并在Proteus上仿真验证。        

硬件模块
        STM32F103R4

        LED灯

        开关Button等

软件工具
        CubMX

        Proteus

        KEIL

电路连接图

KZV)M7A00KS997UNQ7[8)17.png


工作流程

首先,创建好CubMX工程,PA1作为LED灯输出端,PA2作为外部中断触发端。

W82{L~EZ@J5E_78Q6L)3{}6.png

设置好相应的GPIO参数。

AAHZRHW`5%`3JQ8Z@V0LVL1.png

使能外部中断

{2$RF5XJD)}F[L%ZYBJ97.png

其余按照自己的习惯,也可以默认

OH286EZHR8%Z%6WI0IVWDHT.png

AXBOP`X[(LA}QX(IE~QIV@G.png

最后生成代码即可。

PQ$DFG1651F0B9EYNS{[GM4.png

    左边stm32f1xx_it.c中有系统中断的相关函数,在main.c中只是对外部中断的引脚进行设置并使能。需要在stm32f1xx_it.c中查找使用相应的函数才能实现需要的功能。

YWBW~JR4K`4)[SBQ_D@(`XR.png

首先在stm32f1xx_it.c中找到EXTI2_IRQHandler(void)函数,

62MTOWE)]SMQ6]@0)7)JJBW.png

再进入HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_2)中断服务函数,里面主要有两个函数,一个复位__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin),另一个是回调函数HAL_GPIO_EXTI_Callback。

7FCMCI%T`}JE}VFO}DHD0JW.png

我们需要把自己想要的功能写到回调函数中HAL_GPIO_EXTI_Callback并添加到main.c文件中即可。

$LNA`44L83SHM`55Z(FAANP.png

接下来,我们需要创建一个Proteus工程,用来验证功能。

A`KX]I]XO3(~YTU~E%RAFEH.png

开始验证。默认情况下LED端是高电平,即灯是灭的。

OL~0~_VV_93@ZA`6UG$FW36.png

按下按键后,灯亮了。

ITU2T)@_1O@)@C9M~ZW%YZ0.png

再按又灭,继续按又亮,以此往复,功能成功实现。

程序代码
main.c

  1. int main(void)
  2. {
  3.   /* USER CODE BEGIN 1 */

  4.   /* USER CODE END 1 */

  5.   /* MCU Configuration--------------------------------------------------------*/

  6.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  7.   HAL_Init();

  8.   /* USER CODE BEGIN Init */

  9.   /* USER CODE END Init */

  10.   /* Configure the system clock */
  11.   SystemClock_Config();

  12.   /* USER CODE BEGIN SysInit */

  13.   /* USER CODE END SysInit */

  14.   /* Initialize all configured peripherals */
  15.   MX_GPIO_Init();
  16.   /* USER CODE BEGIN 2 */

  17.   /* USER CODE END 2 */

  18.   /* Infinite loop */
  19.   /* USER CODE BEGIN WHILE */
  20.   while (1)
  21.   {
  22.     /* USER CODE END WHILE */

  23.     /* USER CODE BEGIN 3 */
  24.   }
  25.   /* USER CODE END 3 */
  26. }




  27. .....



  28. /* USER CODE BEGIN 4 */
  29. void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
  30. {
  31.         unsigned i;
  32.                 i=5000;
  33.         while(i--);
  34.         //HAL_Delay(20);//延时函数消抖,防止误触发
  35.         if(HAL_GPIO_ReadPin(KEY_GPIO_Port,KEY_Pin)==0)
  36.         {
  37.                 HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED电平
  38.         }
  39. }

  40. /* USER CODE END 4 */
复制代码


作者:jxjajl  bilibili

收藏 评论0 发布时间:2022-11-16 15:42

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版