首页 理论教育 嵌入式STM32固件库编程:编写main.c

嵌入式STM32固件库编程:编写main.c

时间:2023-10-21 理论教育 版权反馈
【摘要】:至此,led.c、led.h与exti.c、exti.h已经准备完毕,最后的工作是编写main.c。在exti.c中修改PA0的中断触发方式:修改好后观察结果,可以看到PA0在按下按键和松开按键时均对红色LED进行了取反操作。比如在PA0的中断服务函数中加入“while;”,使CPU等待松开按键后,才退出中断。对exti.c中的NVIC_Configuration()函数修改如下:编译下载后,可以观察到,当按住PA0时,在按下PC13的瞬间松开,PC13的中断马上响应,说明PC13的中断优先级高于PA0的中断优先级。

嵌入式STM32固件库编程:编写main.c

至此,led.c、led.h与exti.c、exti.h已经准备完毕,最后的工作是编写main.c。主程序非常简单,只需要对LED的GPIO与中断的GPIO进行初始化,最后增加一个空死循环即可,点亮LED的工作由中断服务函数完成。程序代码如下:

对程序进行编译并下载,查看运行结果。注意观察按下按键时LED的反应,其中PA0应该是按下时的反应,PF13则是松开时的反应。

在exti.c中修改PA0的中断触发方式:

修改好后观察结果,可以看到PA0在按下按键和松开按键时均对红色LED进行了取反操作。细心的读者会发现,与51系列单片机不同,中断方式只有边沿触发模式,没有电平触发模式。比如在PA0的中断服务函数中加入“while(GPIO_ReadInputDataBit(KEY1_INT_GPIO_PORT,KEY1_INT_GPIO_PIN)==1);”,使CPU等待松开按键后,才退出中断。改写PA0中断服务函数如下:(www.xing528.com)

修改后编译下载程序,可以发现,在PA0被按下的过程中,PC13的中断一直无法响应;只有松开按键,PA0的中断退出后PC13的中断才会响应。这是因为在设置抢断优先级与子优先级时两者一样,EXTI0的优先级高于EXTI15_10的优先级,因此优先响应PA0的中断。当然,这里只能是模拟电平中断,实际上并不属于中断系统的一部分。

如果将PC13的抢断优先级改高一点,那么它的优先级将高于PA0的优先级。我们可以将PC13的抢断优先级改为0。对exti.c中的NVIC_Configuration()函数修改如下:

编译下载后,可以观察到,当按住PA0时,在按下PC13的瞬间松开(下降沿触发),PC13的中断马上响应,说明PC13的中断优先级高于PA0的中断优先级。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈