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

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

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

硬件模块
        STM32F103R4
        LED灯
        开关Button等

软件工具
        CubMX
        Proteus
        KEIL

电路连接图
        


工作流程

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

}[)(JENDF8HBWRG7(ZJA97Q.png

设置好相应的GPIO参数。

CLCDY%KL{L4LB(S~KW@NGL1.png

使能外部中断

JZHLT7_{V0|WLDM{N3AEC.png

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

R(02HBJBQS)W%6_YI8S5}3O.png

3PY2Z`70XIWX(L8Y)C56ADY.png

最后生成代码即可。



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

(`8IFBKO6N35}A{X}S6FR7F.png

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

BKT~8U6V6VB~55H6(TG}XVE.png

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

AS(3K$A~ZXI$@`EC]{9(U.png

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

XF87(E`K}TJ[00NIQ5MZS2E.png

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

AWW6FF[ID0I@{7[ZNCB.png

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

TV7KDX3)17PQ5Z`7PQPIC0O.png

按下按键后,灯亮了。

`{VDK1UE)QZ0G(Q07_(AGH7.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

收藏 评论0 发布时间:2022-12-31 19:35

举报

0个回答

所属标签

相似分享

官网相关资源

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