第8章-STM32F10x的主要模块设计3外部中断课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第8章-STM32F10x的主要模块设计3外部中断课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32F10x 主要 模块 设计 外部 中断 课件
- 资源描述:
-
1、Embedded System DevelopmentEmbedded System Development嵌入式系统与应用嵌入式系统与应用 第第8 8章章 STM32F10 xSTM32F10 x的主要模块设计的主要模块设计3 3外部中断外部中断F8.3 8.3 外部中断外部中断F8.3.1 GPIO8.3.1 GPIO键盘设计实验键盘设计实验F8.3.2 8.3.2 外部中断外部中断EXTIEXTI设计设计8.3.1 GPIO 8.3.1 GPIO 键盘设计实验键盘设计实验FGPIOGPIO端口如何进行键盘设计?端口如何进行键盘设计?F下面两种办法效果一样。下面两种办法效果一样。F一是采用
2、上拉输入模式,按键在一是采用上拉输入模式,按键在没按下的时候,默认为高电平。没按下的时候,默认为高电平。PE5 key1PE5 key1PE6 key2 PE6 key2 F二是直接采用浮空输入模式,在二是直接采用浮空输入模式,在芯片外部接上拉电阻。芯片外部接上拉电阻。F按键实现LEDLED灯灯反转。按键原理图按键原理图1、按键实现LEDLED灯灯反转main()main()int main(void) int main(void) / /* * config the led config the led * */ / LED_GPIO_Config(); LED_GPIO_Config();
3、 LED1( ON ); LED1( ON ); / /* *config keyconfig key* */ / Key_GPIO_Config(); Key_GPIO_Config(); while(1) while(1) if(Key_Scan(GPIOE,GPIO_Pin_5)= KEY_ON ) if(Key_Scan(GPIOE,GPIO_Pin_5)= KEY_ON ) / /* *LED1LED1灯反转灯反转* */ / GPIO_WriteBit(GPIOC, GPIO_Pin_3, GPIO_WriteBit(GPIOC, GPIO_Pin_3, BitAction(1-G
4、PIO_ReadOutputDataBit(GPIOC, BitAction(1-GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_3); GPIO_Pin_3); 读取PC3的当前输出电平当前状态反相后写入到PC3按键实现LEDLED灯灯反转F把前面写的把前面写的LedLed灯灯led.cled.c和和led.hled.h复制到本工程文件夹,编复制到本工程文件夹,编写写mainmain函数:函数:F1 1、先调用了、先调用了led.cled.c中的中的LED_GPIO_Config()LED_GPIO_Config(),配置,配置LEDLED用到用到的的I/OI/
5、O。F2 2、调用、调用LED1(ON)LED1(ON),把,把LEDLED灯灯1 1点亮。点亮。F3 3、调用、调用Key_GPIO_Config(),Key_GPIO_Config(),配置按键用到的配置按键用到的I/OI/O口。口。F4 4、调用、调用Key_Scan()Key_Scan()按键检测函数,监测到按键时,调用按键检测函数,监测到按键时,调用GPIO_WriteBit()GPIO_WriteBit()函数实现灯反转。函数实现灯反转。FBitActionBitAction枚举定义在枚举定义在stm32f10 x_gpio.hstm32f10 x_gpio.h第第104104行:
6、行:typedef enumtypedef enum Bit_RESET = 0, Bit_RESET = 0, Bit_SET Bit_SETBitAction;BitAction;2 2、bsp_key.hbsp_key.h按键函数头文件F主要声明主要声明Key_GPIO_ConfigKey_GPIO_Config()()、Key_ScanKey_Scan()()两个函数:两个函数:# #ifndefifndef _KEY_H / _KEY_H /条件编译条件编译 #define _KEY_H #define _KEY_H#include stm32f10 x.h#include stm3
7、2f10 x.h#define KEY_ON#define KEY_ON 0 /0 /按键按下标志按键按下标志#define KEY_OFF#define KEY_OFF1 /1 /无按键标志无按键标志void void Key_GPIO_ConfigKey_GPIO_Config(void); (void); uint8_t uint8_t Key_ScanKey_Scan( (GPIO_TypeDefGPIO_TypeDef* * GPIOx,u16 GPIOx,u16 GPIO_PinGPIO_Pin););# #endifendifF在在bsp_key.Cbsp_key.C文件中实现上
8、两个函数。文件中实现上两个函数。3 3、Key_GPIO_Config()Key_GPIO_Config()函数函数F与与LEDLED的的GPIOGPIO初始化函数初始化函数LED_GPIO_ConfigLED_GPIO_Config()()类似。类似。 # #include include bsp_key.hbsp_key.h void void Key_GPIO_ConfigKey_GPIO_Config(void) (void) GPIO_InitTypeDefGPIO_InitTypeDef GPIO_InitStructureGPIO_InitStructure; ; / /* *开
9、启按键开启按键端口端口GPIOEGPIOE(PE5PE5)的时钟)的时钟* */ / RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE,ENABLE); ); GPIO_InitStructure.GPIO_PinGPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; = GPIO_Pin_5; GPIO_InitStructure.GPIO_ModeGPIO_InitStructure.GPIO_Mode = = GPIO_M
10、ode_IPUGPIO_Mode_IPU; ; GPIO_InitGPIO_Init(GPIOE(GPIOE, &, &GPIO_InitStructureGPIO_InitStructure); ); F可用符号可用符号| |同时同时配置多配置多个:个:GPIO_Pin_5|GPIO_Pin_6;GPIO_Pin_5|GPIO_Pin_6;4 4、Key_Scan()Key_Scan()按键检测函数按键检测函数F/ /* *输入输入 :GPIOxGPIOx、 GPIO_PinGPIO_Pin:待读取的端口、引脚,:待读取的端口、引脚, * * *输出输出 :KEY_OFF(KEY_OFF(没
11、按下按键没按下按键) )、KEY_ONKEY_ON(按下按键)(按下按键)* */ / u8 u8 Key_ScanKey_Scan( (GPIO_TypeDefGPIO_TypeDef* * GPIOx,u16 GPIOx,u16 GPIO_PinGPIO_Pin) ) / /* *检测是否有按键按下检测是否有按键按下 * */ / if( if(GPIO_ReadInputDataBitGPIO_ReadInputDataBit( (GPIOx,GPIO_PinGPIOx,GPIO_Pin)=KEY_ON )=KEY_ON ) Delay(10000); / Delay(10000); /
12、延时消抖延时消抖 if(if(GPIO_ReadInputDataBitGPIO_ReadInputDataBit( (GPIOx,GPIO_PinGPIOx,GPIO_Pin)=KEY_ON)=KEY_ON) while while( (GPIO_ReadInputDataBitGPIO_ReadInputDataBit( (GPIOx,GPIO_PinGPIOx,GPIO_Pin)=KEY_ON);)=KEY_ON); return KEY_ON; / return KEY_ON; /等待按键释放等待按键释放 else else return KEY_OFF; return KEY_OFF
13、; else else return KEY_OFF; return KEY_OFF; Key_Scan()Key_Scan()按键检测函数按键检测函数F库函数库函数GPIO_ReadInputDataBit(GPIO_ReadInputDataBit(端口号,引脚号端口号,引脚号) );F返回引脚的数据,返回引脚的数据,0 0为低电平即为低电平即KEY_ONKEY_ON,可能有按键按下,可能有按键按下,调用延时函数消抖;否则返回,调用延时函数消抖;否则返回1 1为高电平即为高电平即KEY_OFFKEY_OFF,表,表示按键没有被按下。示按键没有被按下。 F延时之后再次读取该引脚数据,若依然为
14、低电平,表明确延时之后再次读取该引脚数据,若依然为低电平,表明确实有按键被按下了;否则返回实有按键被按下了;否则返回KEY_OFFKEY_OFF,表示没按键。,表示没按键。Fwhilewhile循环调用循环调用GPIO_ReadInputDataBit()GPIO_ReadInputDataBit(),等待按键释放,等待按键释放,条件变为假退出循环,返回表示按键被按下的标志,条件变为假退出循环,返回表示按键被按下的标志KEY_ONKEY_ON。 F同理,通过输入不同的实参,来检测其它按键的引脚。这同理,通过输入不同的实参,来检测其它按键的引脚。这就是库的魅力!就是库的魅力!作业作业F1 1、进
15、一步熟悉、进一步熟悉GPIOGPIO,掌握,掌握GPIOGPIO设计。设计。F2 2、掌握、掌握GPIOGPIO键盘实验,实验报告。键盘实验,实验报告。8.3.2 8.3.2 STM32中断向量表F上个实验中上个实验中while(1) while(1) 程序中始终轮询检测是否有程序中始终轮询检测是否有按键按下,浪费按键按下,浪费CPUCPU时间、能耗。可采用中断处理方式,时间、能耗。可采用中断处理方式,当按键按下时触发中断再检测按键。当按键按下时触发中断再检测按键。FSTM32STM32的所有的所有GPIOGPIO都可以用作外部中断源,可把按键轮询都可以用作外部中断源,可把按键轮询检测改为由中
16、断来处理,大大提高软件执行的效率。检测改为由中断来处理,大大提高软件执行的效率。F向量中断控制器向量中断控制器NVICNVIC属于属于CortexCortex内核的器件,编号为内核的器件,编号为1 11515的对应系统异常,大于等于的对应系统异常,大于等于1616的则全是外部中断。的则全是外部中断。FSTM32STM32中断向量表,优先级从中断向量表,优先级从-3-3至至6 6(即编号(即编号1 11515)为系)为系统异常,优先级为负的不能设置优先级,如复位统异常,优先级为负的不能设置优先级,如复位ResetReset、不可屏蔽中断不可屏蔽中断NMINMI、硬错误、硬错误HardfaultH
17、ardfault。F从优先级从优先级7 7开始(即类型编号开始(即类型编号1616开始)的为外部中断,优开始)的为外部中断,优先级自行设置。先级自行设置。STM32中断向量表STM32中断向量表8.3.3 8.3.3 STM32外部中断控制器EXTIEXTIF向量中断控制器向量中断控制器NVICNVIC能配置能配置1616种外部中断种外部中断EXTIx(015) EXTIx(015) ,超过超过1616个中断事件时,必然有个中断事件时,必然有2 2个以上的中断事件使用相同个以上的中断事件使用相同的中断种类。注意:相同种类的中断不能嵌套。的中断种类。注意:相同种类的中断不能嵌套。F外部中断控制器
18、外部中断控制器EXTIEXTI配置管理外配置管理外部事件输入部事件输入GPIOGPIO引脚与引脚与EXTIxEXTIx的的连接方式:连接方式:FPAxPGxPAxPGx端口引脚的事件连接同端口引脚的事件连接同一个一个EXTIxEXTIx,分时复用。,分时复用。FGPIOGPIO事件可配置为下降沿、上升事件可配置为下降沿、上升沿或边沿三种模式触发中断。沿或边沿三种模式触发中断。FEXTIEXTI一个应用:上个实验的按键一个应用:上个实验的按键再添加下降沿触发中断,用中断再添加下降沿触发中断,用中断处理来检测按键。处理来检测按键。 EXTI15STM32外部中断控制器EXTIEXTIF对于互联型芯
19、片,外部中断控制器由对于互联型芯片,外部中断控制器由2020个产生事件中断请个产生事件中断请求的边沿检测器组成,其他芯片求的边沿检测器组成,其他芯片1919个。个。STM32外部中断控制器EXTIEXTIF每个输入线都可配置输入类型每个输入线都可配置输入类型( (脉冲或挂起脉冲或挂起) )和对应的触发和对应的触发方式方式( (上升沿或下降沿或者双边沿都触发上升沿或下降沿或者双边沿都触发) )。每个输入线都。每个输入线都可被屏蔽。挂起寄存器保持着状态线的中断请求。可被屏蔽。挂起寄存器保持着状态线的中断请求。F另外四个另外四个EXTIEXTI线的连接方式如下:线的连接方式如下:FEXTIEXTI线
20、线1616连接到连接到PVDPVD输出输出FEXTIEXTI线线1717连接到连接到RTCRTC闹钟事件闹钟事件FEXTIEXTI线线1818连接到连接到USBUSB唤醒事件唤醒事件FEXTIEXTI线线1919连接到以太网唤醒事件连接到以太网唤醒事件( (只适用于互联型产品只适用于互联型产品) )GPIO的x引脚配置为EXTIx8.3.4 EXTI8.3.4 EXTI寄存器寄存器库中定义库中定义Fstm32f10 x.hstm32f10 x.h库库892892行中行中EXTIEXTI寄存器结构定义:寄存器结构定义:typedeftypedef structstruct vu32 IMR; /
21、 vu32 IMR; /中断屏蔽寄存器,配置中断屏蔽寄存器,配置2020个中断线的屏蔽位个中断线的屏蔽位 vu32 EMR; / vu32 EMR; /事件屏蔽寄存器事件屏蔽寄存器 vu32 RTSR; / vu32 RTSR; /上升沿触发选择寄存器上升沿触发选择寄存器 vu32 FTSR; / vu32 FTSR; /下降沿触发选择寄存器下降沿触发选择寄存器 vu32 SWIER; / vu32 SWIER; /设置软件中断寄存器的请求位设置软件中断寄存器的请求位 vu32 PR; / vu32 PR; /挂起寄存器挂起寄存器 EXTI_TypeDefEXTI_TypeDef; ; EXT
22、IEXTI寄存器寄存器库中定义库中定义F#define PERIPH_BASE (uint32_t)0 x4000 0000) #define PERIPH_BASE (uint32_t)0 x4000 0000) F#define APB2PERIPH_BASE (PERIPH_BASE + 0 x1 0000)#define APB2PERIPH_BASE (PERIPH_BASE + 0 x1 0000)F#define EXTI_BASE (APB2PERIPH_BASE + 0 x0400)#define EXTI_BASE (APB2PERIPH_BASE + 0 x0400)F#
23、define EXTI (EXTI_TypeDef #define EXTI (EXTI_TypeDef * *) EXTI_BASE) EXTI_BASE)FEXTIEXTI为为EXTI_TypeDefEXTI_TypeDef结构体型指针地址:结构体型指针地址:0 x4001 04000 x4001 0400FEXITEXIT寄存器配置数据位宏定义在寄存器配置数据位宏定义在32693269行开始:。行开始:。F/ /* *Bit definition for Bit definition for EXTI_IMREXTI_IMR register register * * */ /F#def
展开阅读全文