




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
ARMCortex-M3嵌入式控制技术
——基于STM32F103RCT6
STM32F103硬件系统与KEILMDK工程第五章
按键与中断处理
本章将介绍嵌套向量中断控制器NVIC的工作原理,阐述STM32F103RCT6微控制器外部输入中断的工作原理。接着,以用户按键为例,详细解释NVIC中断的寄存器类型和库函数类型的程序设计方法。然后,介绍ZLG7289B芯片驱动LED灯、按键和数码管的原理和程序设计方法1NVIC中断工作原理2GPIO外部输入中断3
用户按键中断实例4ZLG7289B按键、LED灯和数码管5.1NVIC中断工作原理嵌套向量中断控制器NVIC相关的中断管理工作主要有开放中断、关闭中断、设置中断请求标志、读中断请求标志、清除中断请求标志和配置中断优先级等。嵌套向量中断控制器NVIC的寄存器有ISER0、ISER1、ICER0、ICER1、ISPR0、ISPR1、ICPR0、ICPR1、IABR0、IABR1、IPR0~IPR14和STIRNVIC寄存器序号地址寄存器名称描述10xE000E100ISER0中断开放寄存器ISER0[0]~ISER0[31]、ISER1[0]~ISER1[27]依次对应中断号为0~59的中断,各位写0无效,写1开放中断0xE000E104ISER120xE000E180ICER0中断关闭寄存器ICER0[0]~ICER0[31]、ICER1[0]~ICER1[27]依次对应中断号为0~59的中断,各位写0无效,写1关闭中断0xE000E184ICER130xE000E200ISPR0中断设置请求状态寄存器ISPR0[0]~ISPR0[31]、ISPR1[0]~ISPR1[27]依次对应中断号为0~59的中断,各位写0无效,写1请求中断0xE000E204ISPR140xE000E280ICPR0中断清除请求状态寄存器ICPR0[0]~ICPR0[31]、ICPR1[0]~ICPR1[27]依次对应中断号为0~59的中断,各位写0无效,写1清中断标志0xE000E284ICPR150xE000E300IABR0中断活跃位寄存器(只读)IABR0[0]~IABR0[31]、IABR1[0]~IABR1[27]依次对应中断号为0~59的中断,各位读出1,表示相应中断活跃0xE000E304IABR160xE000E400~0xE000E438IPR0~IPR14中断优先级寄存器共有16个优先级,优先级号从0~15,优先级号0表示的优先级最高,优先级号15表示的优先级最低70xE000EF00STIR软件触发中断寄存器第[8:0]位域有效,写入0~59中的某一中断号,则触发相应的中断中断优先级配置寄存器每个IPR寄存器用于设置4个NVIC中断的优先级,32位的IPR寄存器的4个字节的低4位均无效,只有高4位有效,故可以设置的优先级号为0~15。根据图5-1,如果设置EXTI2中断的优先级号为10,则需要将IPR2的第[7:4]位域设为10。当两个中断具有不同的优先级号时,优先级号小的中断优先级高;当两个中断具有相同的优先级号时,中断号小的中断优先级高。异常号4~15的优先级配置寄存器可配置优先级的异常的优先级号由3个系统手柄优先级寄存器(SHPR1~3)设置,其地址依次为0xE000ED18、0xE000ED1C和0xE000ED20序号异常号异常名称位域配置名称寄存器14MemManage[7:0]PRI_4SHPR125BusFault[15:8]PRI_536UsageFault[23:16]PRI_647保留[31:24]PRI_758保留[7:0]PRI_8SHPR269保留[15:8]PRI_9710保留[23:16]PRI_10811SVCall[31:24]PRI_11912DebugMonitor[7:0]PRI_12SHPR31013保留[15:8]PRI_131114PendSV[23:16]PRI_141215SysTick[31:24]PRI_155.2GPIO外部输入中断根据寄存器AFIO_EXTICR1~4(见第4章表4-3),可从GPIO口中选择16个管脚配置为16个外部中断的输入端,如图5-2所示。注意:对于STM32F103RCT6芯片,只有PA、PB、PC和PD[2:0]有效,其余管脚无效。EXTI模块共有19根线路,除了外部中断EXTI0~EXTI15外,还有EXTI16、EXTI17和EXTI18,这三根线路分别与PVD输出、RTC报警事件和USB唤配事件相连接。EXTI模块有共6个寄存器,即中断屏蔽寄存器EXTI_IMR、事件屏蔽寄存器EXTI_EMR、上升沿触发选择寄存器EXTI_RTSR、下降沿触发选择寄存器EXTI_FTSR、软件触发事件寄存器EXTI_SWIER和中断请求寄存器EXTI_PR。EXTI模块寄存器的基地址为0x40010400。5.3用户按键中断实例STM32F103RCT6微控制器的PA6和PA7依次借助网络标号USER_BUT1和USER_BUT2与按键S18和S19相连接;PB1与网络标号USER_BELL相连接,控制蜂鸣器B2的开启与关闭。本节拟设计工程,实现如下功能:(1)S18按键作为外部中断EXTI6输入端,当按下S18按键时,点亮LED灯D11;(2)S19按键作为外部中断EXTI7输入端,当按下S19按键时,熄灭LED灯D11。同时,如果蜂鸣器原来是开启的,则关闭蜂鸣器;否则,开启蜂鸣器。5.3.1寄存器类型工程实例在工程PRJ01的基础上,新建工程“PRJ03”,保存在目录“D:\STM32F103RCT6PRJ\PRJ03”下,此时的工程PRJ03与工程PRJ01完全相同。现在,修改main.c和includes.h文件,并新建bsp.c、bsp.h、beep.c、beep.h、key.c、key.h、exti.c和exti.h文件(新建的文件均保存在目录“D:\STM32F103RCT6PRJ\PRJ03\BSP”下),然后,将bsp.c、beep.c、key.c和exti.c文件添加到“BSP”分组下,建设好的工程如图所示。代码:11代码:12代码:13工程PRJ03的工作流程工程PRJ03运行到主函数main后,执行BSPInit函数初始化LED灯、按键、蜂鸣器和外部中断等外设,然后进行无限循环体,执行LED灯D9和D10的循环闪烁功能。工程PRJ03中有1个中断服务函数,当按键S18被按下时,执行EXTI9_5_IRQHandler中断服务函数,点亮LED灯D11;当按键S19被按下时,也触发执行EXTI9_5_IRQHandler中断服务函数,熄灭LED灯D11,同时,使蜂鸣器切换工作状态5.3.2库函数类型工程实例本小节讨论的工程与第5.3.1节的工程PRJ03实现的功能完全相同,这里使用库函数方式进行工程设计。在工程PRJ02的基础上,新建工程“PRJ04”,保存在目录“D:\STM32F103RCT6PRJ\PRJ04”下,此时的工程PRJ04与工程PRJ02完全相同,需要做的修改为:(1)修改文件main.c和includes.h;(2)新建文件bsp.c、bsp.h、key.c、key.h、beep.c、beep.h、exti.c和exti.h,新建的文件均保存在目录“D:\STM32F103RCT6PRJ\PRJ04\BSP”下;(3)将bsp.c、key.c、beep.c和exti.c文件添加到工程管理器的“BSP”分组下;(4)将位于目录“D:\STM32F103RCT6PRJ\PRJ04\STM32F10x_FWLib\src”下的库文件stm32f10x_exti.c添加到工程管理器的“LIB”分组下。建设好的工程PRJ04如图所示。代码:16代码:17代码:185.4.1ZLG7289B工作原理嵌入式控制系统中最常用的部件是按键和七段数码管,用作系统的输入设备和输出设备,ZLG7289B为专用于驱动按键和数码管的芯片。一片ZLG7289B可同时驱动64个按键和8个七段数码管(即64个LED灯)。STM32F103RCT6学习板上集成了一片ZLG7289B芯片,驱动了16个按键、8个LED灯和一个四合一七段数码管,电路原理图参考第3.8节。ZLG7289B芯片管脚布局如图所示“数码管段选信号”是指用于驱动七段数码管中的某个段的控制信号,一般连接到数码管的8个段控制管脚的某一脚上(8个段控制管脚为a、b、c、d、e、f、g和小数点dp);“数码管字选信号”也常被称为“数码管位选信号”,是指用于驱动多合一数码管中单个数码管的控制信号,一般连接到数码管的公共有效端,由于ZLG7289B只能驱动共阴式数码管,所以数码管字选信号连接到单个数码管的阴极公共端管脚号管脚名作用1RTCC电源,一般直接与VCC相连2VCC电源,2.7~6V3NC悬空4GND接地5NC悬空6CS片选信号,低电平有效,输入7CLK串行数据位时钟信号,下降沿有效,输入8DIO串行数据输入输出口,双向9INT按键中断请求信号,下降沿有效,输出10~17KR0~KR7键盘行信号0~7,同时也用作数码管段选信号,依次为g、f、e、d、c、b、a和dp18~25KC0~KC7键盘列信号0~7,同时也用作数码管字选信号0~726OSC2晶振输出信号27OSC1晶振输入信号28RST复位信号,低有效ZLG7289B访问时序。(a)为STM32F103RCT6向ZLG7289B写入单字节指令;(b)为STM32F103RCT6向ZLG7289B写入单字节指令+单字节数据;(c)为STM32F103RCT6向ZLG7289B写入单字节指令(0x15),然后读出单字节按键值,这里第一个指令字节必须为0x15七段数码管各个段的显示位置序号指令字节数据字节含义10xA4无清除显示内容20xBF无使全部LED灯闪烁30xA0无数码管显示左移40xA1无数码管显示右移50xA2无数码管显示循环左移60xA3无数码管显示循环右移70x80+k(dp<<7)|(d3d2d1d0)k为数码管位置号,取0~7(在图3-12中仅有4个数码管,即网标DIG0对应着0,DIG1对应着1,DIG2对应着2,DIG3对应3);dp=0表示小数点熄灭,dp=1表示小数点点亮;d3d2d1d0四位为0000b~1001b对应着显示0~9,为1010b显示“-”为1011b~1110b分别显示E、H、L和P,为1111b无显示80xC8+k(dp<<7)|(d3d2d1d0)k和dp的含义同上,d3d2d1d0为0000b~1111b时分别对应着显示0~9、A、B、C、D、E和F90x90+k(dp<<7)|(abcdefg)k和dp的含义同上,a、b、c、d、e、f、g对应着数码管的各段,为1时亮,为0时灭100x88d7d6d5d4d3d2d1d0di对应着第i个数码管,为0时闪烁,为1时不闪烁110x98d7d6d5d4d3d2d1d0di对应着第i个数码管,为1时正常显示,为0时消隐120xE000d5d4d3d2d1d0将数码管视为64个LED灯,d5d4d3d2d1d0表示6位地址,从000000b~111111b,表示64个LED灯的地址,每个数码管内,点亮顺度为“g、f、e、d、c、b、a、dp”,地址000000b对应着KR0和KC0相交的LED灯,000001b对应着KR1和KC0相交的LED灯,依此类推130xC000d5d4d3d2d1d0第12条指令为段点亮指令,这里为段熄灭指令,数据字节的含义同上140x15读出单字节数据读出的单字节数据包含按键值,键码从0~63(0x00~0x3F),无效值为0xFF,键码0对应着KC0与KR0相交的按键,键码1对应着KC0与KR1相交的按键,依此类推键名键码键名键码键名键码键名键码S162S558S954S1350S261S657S1053S1449S360S756S1152S1548S459S863S1251S1655ZLG7289B驱动的按键键码5.4.2寄存器类型工程实例本节将创建工程PRJ05,其在工程PRJ03基础上新添加的功能为:(1)四合一数码管每个显示管均周期性从0显示至9,且显示小数点和时间分隔符;(2)按下按键S1至S8中的Si(i=1,2,…,8)将点亮相应的LED灯Di;(3)按下按键S9至S16中的Si(i=9,10,…,16)将熄灭相应的LED灯Di-8。在工程PRJ03的基础上,新建工程“PRJ05”,保存在目录“D:\STM32F103RCT6PRJ\PRJ05”下,此时的工程PRJ05与工程PRJ03完全相同。现在,修改main.c、includes.h、bap.c文件,并新建zlg7289.c和zlg7289.h文件(新建的文件均保存在目录“D:\STM32F103RCT6PRJ\PRJ05\BSP”下),然后,将zlg7289.c文件添加到“BSP”分组下,建设好的工程如图所示。5.4.2寄存器类型工程实例本节将创建工程PRJ05,其在工程PRJ03基础上新添加的功能为:(1)四合一数码管每个显示管均周期性从0显示至9,且显示小数点和时间分隔符;(2)按下按键S1至S8中的Si(i=1,2,…,8)将点亮相应的LED灯Di;(3)按下按键S9至S16中的Si(i=9,10,…,16)将熄灭相应的LED灯Di-8。在工程PRJ03的基础
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 输煤技术考试题及答案
- 防汛救灾宣传课件
- 纸制品公司劳动协议
- 企业员工自愿放弃社保协议书9篇
- 跨国教育法律与政策研究-洞察及研究
- 收学员合同7篇
- 脚手架钢管出租合同6篇
- 成分配伍分析-洞察及研究
- 部队安全培训体会课件
- 河北省保定市2024-2025学年高二上学期期末联考生物试卷(B卷)(含答案)
- 部编版六年级语文上册重点难点解析
- 电力监理劳务合同范本
- 2025河北工勤人员技师考试消毒员训练题及答案
- 重庆市南开中学高2026届高三第一次质量检测+化学答案
- 肖婷民法总则教学课件
- 教育培训课程开发与实施指南模板
- 2025保密协议范本:物流行业货物信息保密
- 2025卫星互联网承载网技术白皮书-未来网络发展大会
- 顺丰转正考试题库及答案
- 半导体行业面试问题及答案解析
- 《研学旅行课程设计与实施》全套教学课件
评论
0/150
提交评论