第1点:
我们用户编写的代码,必须放在 user code begin 和 end 之间;否则,当我们修改stm32cubemx 项目的 配置时,再次生成代码,就会删除之前的代码;正确做法如下图所示:
我们用户编写的代码,必须放在 user code begin 和 end 之间
第2点:
在proteus中,电源需要更改成3.3V,VDDA添加到电源VCC/GND中去;VSSA添加到GND中去;如下图所示:
电源需要改成3.3V
第3点:
HAL_Delay(__IO uint32_t Delay)延时函数在stm32f1xx_hal.c里面,该函数能实现ms级别的延时;该函数体前面有一个关键字__weak,该关键字简单的说,表明该函数允许被重写。
HAL_Delay(__IO uint32_t Delay)
第4点:
在proteus中,由于proteus中 软件的问题,导致程序中虽然IO口设置了内部上拉,但在proteus仿真软件中,却是开漏的(也就是说IO口没有高电平状态)。
而我们STM32单片机的外部中断,需要IO口出现一个下降沿或者上升沿,才可以触发中断。所以我们在IO口外面加上拉电阻,便于产生跳边沿,进而触发外部中断;
下图所示LED的限流电阻R1,不能设置过大,设置太大会导致流过LED的电流过小,LED不发光。本次我们设置成100Ω,让实验现象更加明显。
需要添加上拉电阻,限流电阻不能太大
第5点:
下图所示的这个按键称为自锁按键, 按下去之后是不会弹起来的,始终保持当前状态;
我们在做外部中断实验时需要轻触按键,这种按键是按下去之后是会弹起来的,会恢复之前的状态。
自锁按键
轻触按键
第6点:
在keil软件中,一定要勾选上Creat HEX File选项,这样项目编译之后才会生成HEX文件,proteus软件加载HEX文件,实现STM32单片机程序的仿真。
还有就是在keil代码中,修改了代码一定要重新编译,然后再在proteus中去观察实验现象。
最后
注意上述几点,就能将外部中断实验成功的进行下去了。
中断回调函数代码如下图所示,实现两个按键分别控制LED的亮和灭;
两个按键分别控制LED的亮和灭;