嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件 项目4STM32键盘控制技术与应用_第1页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件 项目4STM32键盘控制技术与应用_第2页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件 项目4STM32键盘控制技术与应用_第3页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件 项目4STM32键盘控制技术与应用_第4页
嵌入式原理与应用-基于STM32CubeIDE与HAL库 课件 项目4STM32键盘控制技术与应用_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式原理与应用集成电路学院

嵌入式课程组STM32键盘控制技术与应用项目44.1独立式按键设计01独立式按键电路结构04独立式按键代码设计03独立式按键电路设计02按键抖动的消除了解独立式按键电路结构。了解消抖的方法。学会独立式按键电路设计和代码编写。任务内容:任务要求:独立式按键电路结构01独立式按键电路结构独立式键盘按键相互独立,每个按键占用一根I/O口线,每根I/O口线上的按键工作状态不会影响其它按键的工作状态,单片机可直接读取该I/O线的电平状态,通过电平状态判断按键是否按下。这种按键硬件结构简单、程序设计容易、判断速度快、使用方便,但每一个按键就要占用一个I/O口,因此,仅适用于按键数量较少的系统中。上拉按键和下拉按键是常见的按键连接方式,用于在单片机或其他电路中检测按键状态。独立式按键电路结构上拉按键:在上拉按键连接中,按键引脚连接到VCC(高电平),而通过一个上拉电阻(Pull-upResistor)连接到VCC和按键引脚之间。当按键未被按下时,引脚的电平为高电平,因为上拉电阻将引脚连接到VCC。当按键按下时,按键引脚与地之间会形成一个较低的电阻路径,使得引脚的电平从高电平变为低电平。下拉按键:在下拉按键连接中,按键引脚连接到地(低电平),而通过一个下拉电阻(Pull-downResistor)连接到地和按键引脚之间。当按键未被按下时,引脚的电平为低电平,因为下拉电阻将引脚连接到地。当按键按下时,按键引脚与VCC之间会形成一个较低的电阻路径,使得引脚的电平从低电平变为高电平。4.2外部中断01单片机中断系统04STM32单片机的NVIC03中断服务函数的映射关系02STM32中断线了解单片机中断系统。了解中断服务函数的映射关系。了解STM32单片机的NVIC。任务内容:任务要求:单片机中断系统01单片机中断系统1.中断的概念当CPU在正常执行某一程序时,由于内部或外部的突发事件,要求CPU暂停正在执行的程序而转去处理突发事件(即执行突发事件的中断服务程序),事件处理结束后返回原来被中断的程序断点处(被中断的下一条指令)继续执行,这个过程称为中断。单片机中断系统当CPU正在执行某个低优先级的中断服务程序时,如果有优先级高的中断源请求中断时,CPU可以中断正在执行的低优先级的中断服务程序,转去处理优先级高的中断服务程序,当高优先级的中断服务程序处理结束后返回刚才被中断的低优先级中断服务程序的断点处继续执行,这个过程称为中断嵌套。单片机中断系统2.引入中断的好处实现分时操作:只有当服务对象向CPU发出中断申请时,才去为它服务,这样单片机可以同时为多个对象服务,从而大大提高工作效率。实现实时处理:利用中断技术,各个服务对象可以根据需要随时向CPU发出中断请求,CPU能及时发现和处理中断请求,以满足实时控制的要求。进行故障处理:发生难以预料的情况或故障时,例如突然断电、存储出错、运算溢出等,系统及时发出请求中断,由CPU快速作出相应的处理,可以提高系统自身的可靠性。STM32中断线02STM32中断线STM32单片机外部中断的优势在于它的每个IO口都可以作为外部中断的中断输入口。在STM32F103系列中,中断控制器支持19个外部中断/事件请求。每个中断都有独立的状态位、触发和屏蔽设置。具体来说,STM32F103的19个外部中断包括:线0~15:对应外部IO口的输入中断。线16:连接到功率监视器(PVD)输出。线17:连接到实时时钟(RTC)闹钟事件。线18:连接到USB唤醒事件。STM32中断线GPIO中断映射关系STM32单片机提供了最多有7组GPIO口,每组有16个GPIO引脚。但是只有16个中断线可供IO口使用。每个中断线最多对应7个IO口。中断服务函数的映射关系03中断服务函数的映射关系STM32单片机提供了16条外部IO口的输入中断线,但是没有匹配16个中断服务函数,0-4号线有各自独立的中断通道及中断服务函数,而5-9号线共用一个通道和一个服务函数,10-15号线同样也共用一个通道和一个服务函数。GPIO中断通道IRQn中断服务函数IRQHandlerGPIO_Pin0EXTI0_IRQnEXTI0_IRQHandlerGPIO_Pin1EXTI1_IRQnEXTI1_IRQHandlerGPIO_Pin2EXTI2_IRQnEXTI2_IRQHandlerGPIO_Pin3EXTI3_IRQnEXTI3_IRQHandlerGPIO_Pin4EXTI4_IRQnEXTI4_IRQHandlerGPIO_Pin5—GPIO_Pin9EXTI9_5_IRQnEXTI9_5_IRQHandlerGPIO_Pin10—GPIO_Pin15EXTI15_10_IRQnEXTI15_10_IRQHandlerSTM32单片机的NVIC04STM32单片机的NVICSTM32单片机的NVIC(NestedVectoredInterruptController,嵌套向量中断控制器)是用于管理中断的关键组件之一。它负责处理和调度来自各种外设和系统异常的中断请求,并决定哪个中断被优先处理,以及在多个中断同时发生时的处理顺序。STM32单片机的中断优先级是用来确定在多个中断同时发生时,哪个中断会被首先处理的。STM32单片机的中断优先级由两部分组成:抢占优先级和响应优先级。抢占优先级用于确定中断之间的优先级关系,而响应优先级用于确定同一中断内部不同处理段之间的优先级关系。STM32单片机的NVIC抢占优先级:用来决定在多个中断同时发生时,哪个中断具有更高的优先级。优先级数值越低,抢占优先级越高,能够中断抢占优先级低的中断,从而形成中断嵌套。优先级为0的中断具有最高的抢占优先级。响应优先级:响应优先级用于区分同一抢占优先级下不同的中断同时向系统申请中断,系统响应中断的顺序。响应优先级数值越低,响应优先级越高,响应优先级为0的中断处理函数具有最高的执行优先级。STM32单片机的NVICNVIC优先级分组分组抢占优先级(值越小级别越高)响应优先级值越小级别越高)00位(0级)04位(16级)0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,111111位(2级)0,13位(8级)000,001,010,011,100,101,110,11122位(4级)00,01,10,112位(4级)00,01,10,1133位(8级)000,001,010,011,100,101,110,1111位(2级)0,144位(16级)0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,11110位(0级)0按键抖动的消除02按键抖动的消除按键是由机械弹性元件组成的,按键的抖动是指按键的触点在闭合和断开瞬间由于接触情况不稳定,从而导致电压信号的抖动现象(由按键的机械特性造成,不可避免)。一次按键的按下过程中按键的前沿和后沿都会有5~10ms的抖动。按键抖动的消除对于以微秒级工作的单片机而言,键盘的抖动有可能造成单片机对一次按键的多次处理。为了提高系统的稳定性,必须采用有效的方式消除抖动。消除抖动可以采用硬件方式和软件方式。硬件方式是指在按键与单片机I/O口之间增加硬件消抖电路,利用硬件电路消除抖动(如RS触发器)。软件方式是指在程序设计中增加消除抖动的程序,通过程序设计消除抖动。硬件方式虽然对程序不会造成影响,但构成键盘的硬件电路复杂,成本增加,因此,软件方式应用更为广泛。软件方式的实现方法是:当单片机查询到电路中有按键按下时,先不进行处理,而是先执行10~20ms(键盘抖动时间一般为5~10ms)的延时程序,延时程序结束后,再次查询按键状态,若此时按键仍为按下状态,则视为按键被按下。独立式按键电路设计03独立式按键电路设计编程实现独立式按键控制发光二极管的亮灭状态。要求:K1控制D1;K2控制D2,K3控制D3,

按键每按下一次发光二极管状态取反。在Proteus中新建工程,在元件库中输入“按键”

的关键词“Button”添加该元件,并按图所示

绘制仿真电路,其中K1,K2是上拉按键,K3是下

拉按键。PA0-PA3用于检测按键输入,PB0-PB3

用于控制LED灯的状态。独立式按键代码设计04独立式按键代码设计1.配置GPIO引脚打开STM32CubeIDE软件,新建一个基于STM32F103C8单片机的“STM32Project”工程,用STM32CubeMX工具先配置PB0-PB2的三个引脚作为输出。再配置连接按键的3个GPIO引脚,分别点击单片机的PA0-PA2,在弹出的对话框中选择“GPIO_Input”,使这三个引脚作为按键输入使用。在“GPIOModeandConfiguration”中配置按键输入模式,PA0和PA1选择“Pull-up”上拉模式,PA2选择“Pull-down”下拉模式。独立式按键代码设计2.生成代码在STM32CubeMX中完成GPIO和系统时钟配置后,点击“Project”菜单中的“GenerateCode”生成代码,在STM32CubeIDE的工作空间中会自动生成一个工程,该工程中已经包含了系统外设接口的初始化代码。3.编写代码打开生成的STM32CubeIDE项目,在main.c文件中,编写独立式按键控制发光二极管的亮灭代码。完整代码见教材。4.3EXIT控制数码管01EXIT控制电路设计03EXIT控制数码管代码设计02STM32CubeMX配置EXIT掌握EXIT控制电路设计方法。掌握STM32CubeMX配置功能引脚。了解HAL库中外部中断处理函数。任务内容:任务要求:EXIT控制电路设计01EXIT控制电路设计编程实现图中两个按键作为外部中断,在LED循环闪烁的状态下控制数码管数值加减。要求:LED每0.5S翻转一次状态,数码管显示“0”,K1控制数码管数值增加;K2控制数码管数值减少。打开Proteus新建工程,在元件库中输入“按键”的关键词“Button”添加该元件,并按图所示绘制仿真电路,两个按键连接PA0、PA1,其中K1是上拉按键,K2是下拉按键,PA2连接LED。PB0-PB7连接共阴数码管,用来显示按键增减数值。STM32CubeMX配置EXIT02STM32CubeMX配置EXIT两个按键K1,K2分别连接了PA0和PA1,使用STM32CubeMX配置引脚功能时,点击引脚PA0和PA1,分别选择“GPIO_EXTI0”和“GPIO_EXTI1”,将这两个引脚分别映射到0和1号中断线上STM32CubeMX配置EXIT在“GPIOModeandConfiguration”菜单设置两个按键的中断触发方式,外部中断触发方式有三种,EXTI_Trigger_Rising上升沿触发;EXTI_Trigger_Falling下降沿触发;EXTI_Trigger_Rising_Falling上升沿和下降沿都可以触发;将K1设置为“Fallingedgetrigger”下降沿触发,K2设置为“Risingedgetrigger”上升沿触发STM32CubeMX配置EXIT在“Pinout&Configuration”页面的左侧找到“SystemCore”选项中选择“NVIC”进行管理中断。先在右侧找到“PriorityGroup”优先级分组,并选择2位抢占优先级2位响应优先级,这样抢占优先级和响应优先级各有4个级别。然后在“EXTIline0interrupt”和“EXTIline1interrupt”对应的“Enabled”框中打钩,允许外部中断线0和1中断。最后,自定义后面抢占优先级和响应优先级的级别。EXIT控制数码管代码设计03EXIT控制数码管代码设计STM32CubeMX创建工程文件时,会根据外部中断的配置在“Src”文件夹下的“stm32f1xx_it.c”文件中为引脚PA0和PA1生成两段外部中断0和外部中断1的中断服务函数“voidEXTI0_IRQHandler(void)”和“voidEXTI1_IRQHandler(void)”,当触发外部中断时会自动进入到对应的中断服务函数中。EXIT控制数码管代码设计两个中断服务函数都会执行同一个中断处理函数“voidHAL_GPIO_EXTI_IRQHandler(uint16_tGPIO_Pin)”这段代码的作用是将外部中断事件的处理交给用户自定义的回调函数HAL_GPIO_EXTI_Callback(GPIO_Pin),从而实现了外部中断的功能。EXIT控制数码管代码设计在“main.c”文件中创建一个中断回调函数voidHAL_GPIO_EXTI_Callback(uint16_tGPIO_Pin),在其中编写中断服务代码。EXIT控制数码管代码设计主函数代码EXIT控制数码管代码设计仿真结果4.4矩阵式键盘设计01矩阵式键盘的构成04矩阵式键盘代码设计03矩阵式键盘电路设计02矩阵式键盘的按键扫描了解矩阵式键盘的构成。了解矩阵式键盘的按键扫描方法。学会矩阵式键盘的电路设计和代码编写任务内容:任务要求:矩阵式键盘的构成01矩阵式键盘的构成在键盘中按键数量较多时,如仍然采用独立式键盘将会占用大量的I/O口,为了减少I/O口的占用,通常采用行列式键盘,行列式键盘又称为矩阵式键盘,是将按键排列成行、列的形式。在行列式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。这样,STM32单片机的8位GPIO口就可以构成4*4=16个按键,比占用相同I/O口数目的独立式键盘的按键数多出了一倍,如用到16位GPIO口就可以构成最多8*8=64个按键,而用独立式键盘只能构成16个按键。由此可见,行列式键盘适用于密码锁、计算器等按键数目比较多的场合。矩阵式键盘的按键扫描02矩阵式键盘的按键扫描键盘扫描首先将列(PB4-PB7)置为低电平作为输出,行(PB0-PB3)置为高电平作为输入,进行行扫描。读取行的状态,如均为高电平说明无按键按下,结束键盘扫描;如有按键按下时,对应的行的状态会从高电平变为低电平,记录行号。将列(PB4-PB7)置为高电平作为输入,行(PB0-PB3)置为低电平作为输出,进行列扫描。逐列的判断,若某一列出现低电平,则该列上有按键按下,记录列号。通过记录的行号和列号,利用公式计算出按键的键值。键值=行号×列数+列号(行号、列号都是从0开始)矩阵式键盘电路设计03矩阵式键盘电路设计编程实现图中16个矩阵式按键控制数码管显示对应的按键键值。要求:仿真开始时数码管不显示任何信息,通过按下按键数码管显示按键的键值。打开Proteus新建工程,在元件库中输入排阻的关键词“PACK-8”添加该元件,排阻的应用大大简化了仿真电路。按图所示绘制仿真电路,其中PA0-PA7用于控制数码管输出,PB0-PB7用于连接矩阵式键盘,检测按键状态。矩阵式键盘代码设计04矩阵式键盘代码设计1.配置GPIO引脚打开STM32CubeIDE软件,新建一个基于STM32F103C8单片机的“STM32Project”工程,用STM32CubeMX工具先配置PA0-PA7的8个引脚作为输出控制数码管显示。再配置连接键盘的8个GPIO引脚,其中PB0-PB3作为输入,PB4-PB7作为输出。矩阵式键盘代码设计2.生成代码在STM32CubeMX中完成GPIO和系统时钟配置后,点击“Project”菜单中的“GenerateCode”生成代码,在STM32CubeIDE的工作空间中会自动生成一个工程,该工程中已经包含了矩阵键盘接口的初始化代码。3.编写代码打开生成的STM32CubeIDE项目,新建“Hardware”->“key”文件夹,在文件夹中创建自定义函数“key.c”和“key.h”,在“key.c”编写矩阵式键盘控制数码管显示代码。完整代码见教材。4.5实战演练-单片机按键控制步进电机设计01设计要求03编写代码02电路设计掌握独立式按键的软、硬件设计。理解单片机控制步进电机工作的原理。任务内容:任务要求:设计要求01设计要求使用STM32CubeIDE进行单片机程序设计,结合Proteus进行电路仿真,实现独立式按键对步进电机的控制。通过键盘实现步进电机4拍正转、4拍反转、8拍正转、8拍反转控制,并且能够控制步进电机加速、减速和停止的控制。在STM32CubeIDE中编写完成程序后,通过Proteus进行电路仿真验证,确保程序设计的正确性和可靠性。电路设计02电路设计1.仿真电路设计在Proteus中新建基于STM32F103C8的工程,在元件模式中添加“MOTOR-STEPPER”步进电机和“ULN2003A”达林顿阵列,单片机的GPIO口输出电流较小,不能够直接驱动步进电机,需要通过ULN2003驱动步进电机。绘制仿真电路图,如图所示,七个按键分别实现步进电机四拍正反转、八拍正反转、加速、减速和停止功能。电路设计2.步进电机步进电机在办公自动化设备、数控系统以及各种控制装置等众多领域有着极其广泛的应用。步进电机是将电脉冲信号转变为角位移或线位移的电机,可以实现开环控制,也就是说每输入一个脉冲信号,电动机就相应转过一个角度(前进一步)。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,这个角度

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论