文档介绍:STM32 入门系列教程
初试 STM32 中断
Revision
( 2010-04-23 )
Copyright © 2009-2010 福州芯达工作室 ALL rights reserved
其它啥也不说,我们先看下芯达 STM32 外部中断所采用电路,非常简单,
如下图所示:
该电路直接从 STM32 系列的 CPU 引脚直接引出两个 GPIO(PE2/PE3),外
加上拉电阻后,使用一个轻触开关接地。很明显,按下开关时,PE2/PE3 引脚接
地,否则为高电平。
学习 STM32 中断时,我们可以一边回想单片机中断系统一边学习。这里的
思路就与单片机类似:当按下按键时,电平变动,使用上升或下降沿触发中断。
对于单片机来说,很简单,开中断即可。但 STM32 却有所不同。我们使能配置
EXTI、NVIC 中断后,还需要注意 IO 口时钟的使能。笔者当初忽略了 AFIO 时
钟,调试 2 天没有结果,重新查看 datasheet 时,发现 AFIO 时钟没有打开。下面
简单列出外部中断的编程思路:
1、系统初始化,如系统时钟初始化,使之进入 72MHZ 主频;
2、GPIO 配置,务必注意打开 GPIO 时钟时,一定打开 AFIO 时钟。
3、EXTI 配置,在这里配置需要选择哪个引脚作为中断引脚。
4、NVIC 配置,这也是比单片机多出来的部分,我们必须把 NVIC 中对应
的通道使能,并且设置优先级别。
5、使用 while(1)进行死循环,并在中断程序中写入中断发生时应如何处理。
好吧,开始 STM32 的外部中断的编程之旅吧,详细的例程代码,请参考光
盘中的《芯达 STM32 配套例程》文件夹。本期例程使用的模板,是刚刚从 STM32
官网上下载的最新版本的 固件模板, 其工程文件放在根目录下的
\Project\Template\RVMDK 目录中,点击工程文件即可打开。同样只要关注
文件即可。
步骤一系统初始化,使用固件模板中自带的 SystemInit();函数即可。通过
分析这个函数,我们会发现此函数把主频默认调整到 72MHZ。
步骤二 GPIO 配置,这以后均是需要自己编写的函数,例程中采用
GPIO_Config();函数,如下所示:
Copyright © 2009-2010 福州芯达工作室 ALL rights reserved
void GPIO_Config(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE
| RCC_APB2Periph_AFIO, ENABLE);
/**
* LED1 -> PB8 , LED2 -> PB9 , LED3 -> PE0 , LED4 -> PE1
* Key1 -> PE2 , Key2 -> PE3
*/
= GPIO_Pin_8 |GPIO_Pin_9;
GPIO_InitStruc