版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
掌握STM32最小系统深入理解GPIO使用实现按键控制LED绿色低碳设计理念STM32EMBEDDEDTECHNOLOGYSTM32嵌入式技术及应用任务2-1按键控制LED灯项目二
可控LED流水灯的设计与实现CONTENTS目录01任务目标明确学习目标与能力要求,掌握STM32最小系统和GPIO的基本概念核心能力培养02知识储备学习STM32最小系统组成、GPIO原理与配置方法理论基础03任务实施电路设计、程序开发、工程创建与仿真验证实践操作04任务总结梳理核心知识点、技能提升要点和代码规范要求知识梳理05提升训练与评价通过知识问答、实践操作和任务评价,巩固所学知识,提升工程实践能力能力提升CHAPTERONE01任务目标明确学习目标与能力要求掌握STM32最小系统的组成及其工作原理深入理解STM32GPIO的使用方法实现按键控制LED灯的完整功能TASKOBJECTIVES任务目标目标一掌握STM32最小系统的组成及其工作原理,理解电源、时钟、复位、启动等核心电路的作用。最小系统电路目标二深入理解STM32GPIO的使用,包括配置流程、八种工作模式、初始化方法和控制函数。GPIO配置与控制目标三实现按键控制LED功能,掌握按键去抖动、按键扫描、状态切换等关键技术。完整项目开发绿色低碳设计理念在设计过程中,强调选择低功耗LED和微控制器,以及通过优化控制程序减少系统待机和运行时的能耗,体现绿色低碳的设计思路。在代码逻辑中减少冗余操作,关闭未使用外设时钟,以降低整体能耗。学习成果预期:完成本任务后,你将能够独立设计STM32最小系统电路,熟练配置GPIO外设,实现按键控制LED的完整功能,为后续更复杂的嵌入式系统开发打下坚实基础。CHAPTERTWO02知识储备STM32最小系统与GPIO原理最小系统电源、时钟、复位、启动、下载接口GPIO原理八种模式、配置流程、操作函数MINIMUMSYSTEMSTM32最小系统概述什么是最小系统?所谓STM32最小系统,就是让单片机能够正常运行,最少且必须的器件所组成的系统。最小系统上电之后,单片机可以正常复位可以下载程序,除此之外没有其他任何功能在最小系统保证正确的基础上,可以依次添加其他功能模块最小系统组成STM32芯片电源电路时钟电路复位电路下载接口启动选择以STM32F103C8为例工作电压2.0V~3.6V常用电压3.3VDC封装类型LQFP48设计要点:最小系统是STM32正常工作的基础,任何一个部分出现问题都会导致系统无法正常运行。在实际设计中,需要特别注意电源完整性、时钟稳定性和复位可靠性。POWERCIRCUIT电源电路工作电压范围最小工作电压2.0V最大工作电压3.6V推荐使用3.3V直流电源电源引脚说明VDD_1/VDD_2/VDD_3正电压三组工作正电压引脚,连接3.3V电源VSS_1/VSS_2/VSS_3负电压对应的工作负电压引脚,连接GNDVDDA/VSSA模拟电源模拟电源引脚,VDDA接3.3V,VSSA接GNDVBAT备用电源电池或其他电源供电引脚,无电池时可接VDD为什么需要多组电源引脚?虽然VDD和VSS在芯片内部都是连在一起的,但封装时分多组从不同的地方分别引出,目的是为了提供可靠的电源完整性,减少电源噪声和压降,确保芯片各部分的供电稳定。电源完整性多组供电噪声抑制分布引脚压降控制稳定供电CLOCKCIRCUIT时钟电路核心作用:晶振为STM32提供运行的时钟信号,其在STM32中起着至关重要的作用,就如同心脏为人体提供节奏一样。高速晶振主时钟晶振Y2常用频率8MHz为STM32提供主时钟信号使STM32能够高速运行各种程序和任务低速晶振RTC时钟晶振Y1标准频率32.768kHz为实时时钟提供精确时钟信号保证时间的准确记录,用于RTC功能匹配电容的作用1滤波作用减少外部干扰对晶振频率的影响2消除干扰消除晶振的电感干扰并联电阻R9的作用1提高稳定性提高晶振电路的稳定性2抑制干扰抑制干扰信号,减小频率偏差和相位噪声一般取值R9≥1MΩ设计提示:晶振电路的设计直接影响系统的稳定性和精度,匹配电容和并联电阻的参数需要根据晶振规格书精确计算和选择。RESETCIRCUIT复位电路复位原理STM32是低电平复位,当复位引脚NRST为低电平时,系统进行复位操作,初始化各个寄存器(包括PC指针,但不包括RAM),然后单片机从复位地址开始执行程序。手动复位实现方式通过按键SW1实现,当按下按键时,复位引脚NRST接地为低电平,松开后恢复高电平。应用场景在系统出现故障或需要重新启动时非常方便,是开发和调试过程中常用的复位方式。上电复位实现原理利用电容C2的充放电特性,上电瞬间电容两端电压不能突变,NRST为低电平,随着电容充电完成,NRST变为高电平。工作过程上电→NRST低电平(复位状态)→电容充电→NRST高电平→单片机正常工作复位电路工作流程上电/按下NRST=低电平系统复位初始化寄存器释放/充电完成NRST=高电平正常运行执行程序注意事项:复位电路设计时需要合理选择电容和电阻的参数,确保复位脉冲宽度满足芯片要求,同时避免复位信号受到干扰。BOOT&DOWNLOAD启动电路与下载接口启动模式设置主Flash启动最常用BOOT0=0,BOOT1=X程序下载到这里,芯片重启后从这里启动系统存储器启动串口下载BOOT0=1,BOOT1=0使用厂家BootLoader,通过串口下载程序内置SRAM启动调试模式BOOT0=1,BOOT1=1内部SRAM用作启动空间,用于特殊调试下载方式对比JTAG下载引脚数:最少6个接口:4线+电源SWD下载推荐引脚数:最少4个接口:2线+电源串口下载引脚数:2个特点:无需烧录器串口下载操作步骤1设置启动BOOT0=1,BOOT1=0,按复位键2下载程序通过串口下载程序到Flash3恢复启动BOOT0=0,手动复位运行使用建议:开发调试阶段推荐使用SWD下载方式,引脚少且稳定可靠;量产阶段可以考虑串口下载以降低成本。GPIOBASICSSTM32GPIO基础什么是GPIO?GPIO(GeneralPurposeInput/Output,通用输入输出端口)是STM32可控制的引脚,与外部硬件设备连接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。GPIO内部电路结构保护二极管防止引脚外部过高、过低电压输入。当电压高于VDD时上方二极管导通;低于VSS时下方二极管导通,防止芯片烧毁。P-MOS和N-MOS管由P-MOS和N-MOS管组成的单元电路使得GPIO具有"推挽输出"和"开漏输出"的模式。TTL肖特基触发器信号经过触发器后,模拟信号转化为0和1的数字信号。ADC采集时使用"模拟输入"功能,信号不经过触发器。GPIO核心特性可配置模式8种每个引脚可配置为8种输入输出模式翻转速度2MHz10MHz50MHz输出模式支持低速、中速和高速三种翻转速度输入模式应用读取按键外接模块ADC采集通信接收输出模式应用驱动LED控制蜂鸣器通信发送模拟时序重要提示:尽管有保护二极管,还是不能直接外接大功率器件,须加大功率及隔离电路驱动,防止烧坏芯片或者外接器件无法正常工作。GPIOMODESGPIO八种工作模式模式名称性质特征描述适用场景浮空输入数字输入可读取引脚电平,若引脚悬空,则电平不确定外接上下拉电阻的场合上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空时默认高电平按键检测(按键接地)下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空时默认低电平按键检测(按键接VDD)模拟输入模拟输入GPIO的模拟信号(如电压信号)直接接入内部ADCADC电压采集开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSSI2C总线、电平转换推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSSLED驱动、普通输出复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSSI2C、SWD等复用功能复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSSUSART、SPI等复用功能输入模式总结用于读取端口的高低电平或电压,包括按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等。输出模式总结用于控制端口输出高低电平,包括驱动LED、控制蜂鸣器、模拟通信协议输出时序等。GPIOCONFIGURATION(1/3)GPIO配置流程(一)开启时钟为什么需要开启时钟?在进行GPIO配置之前,需要确保相应的GPIO时钟已经打开。通过使能GPIO时钟,系统才能正确地对GPIO引脚进行配置和控制。必须先开启时钟,才能进行后续的配置操作。GPIO所在总线总线类型APB2高速外设总线,最高72MHzGPIOA~GPIOG都在APB2总线上USART1、SPI1、TIM1等也在APB2上时钟使能函数//APB2总线外设时钟使能函数RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,//GPIOA外设ENABLE//使能);函数参数说明参数1:要开启的外设,如GPIOA/GPIOB/GPIOC等参数2:使能状态,ENABLE开启,DISABLE关闭常用GPIO时钟使能代码//开启GPIOA时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//开启GPIOA和GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//关闭GPIOA时钟(节能));重要提示:如果忘记开启GPIO时钟,后续的GPIO配置操作将无效,引脚不会按照预期工作。这是初学者最容易犯的错误之一!RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,DISABLE);GPIOCONFIGURATION(2/3)GPIO配置流程(二)初始化GPIO_Init函数voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct);参数1:GPIOx指定GPIO端口,取值:GPIOA,GPIOB,GPIOC...参数2:GPIO_InitStruct初始化参数结构体指针GPIO_InitTypeDef结构体typedefstruct{uint16_tGPIO_Pin;//GPIO引脚GPIOSpeed_TypeDefGPIO_Speed;//最大翻转速度GPIOMode_TypeDefGPIO_Mode;//设置GPIO模式}GPIO_InitTypeDef;GPIO_Pin引脚号,如GPIO_Pin_5表示PA5/PB5等GPIO_Speed翻转速度:2MHz/10MHz/50MHzGPIO_Mode工作模式:8种输入输出模式配置示例:PA5推挽输出GPIO_InitTypeDefGPIO_InitStructure;//选择PA5引脚GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//配置为推挽输出模式GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//配置输出速度为50MHzGPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//初始化GPIOA的PA5引脚GPIO_Init(GPIOA,&GPIO_InitStructure);常用模式宏定义GPIO_Mode_AIN//模拟输入GPIO_Mode_IN_FLOATING//浮空输入GPIO_Mode_IPD//下拉输入GPIO_Mode_IPU//上拉输入GPIO_Mode_Out_OD//开漏输出GPIO_Mode_Out_PP//推挽输出常用速度宏定义GPIO_Speed_2MHz//低速GPIO_Speed_10MHz//中速GPIO_Speed_50MHz//高速速度越高,功耗越大配置要点:初始化前必须先开启对应GPIO的时钟,然后根据应用需求选择合适的引脚、模式和速度,最后调用GPIO_Init函数完成初始化。GPIOCONFIGURATION(3/3)GPIO配置流程(三)操作函数写入操作函数GPIO_SetBits//将指定引脚设置为高电平GPIO_SetBits(GPIOA,GPIO_Pin_5);将PA5设置为高电平(VDD)GPIO_ResetBits//将指定引脚设置为低电平GPIO_ResetBits(GPIOA,GPIO_Pin_5);将PA5设置为低电平(VSS)GPIO_WriteBit//设置指定引脚为高/低电平GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_SET);GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET);GPIO_Write//向整个端口写入16位数据GPIO_Write(GPIOA,0x0020);//PA5=1,其他=0读取操作函数GPIO_ReadInputDataBit//读取指定引脚的输入状态if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_5)==Bit_SET){//PA5为高电平}GPIO_ReadInputData//读取整个端口的所有输入状态uint16_tinputData=GPIO_ReadInputData(GPIOA);GPIO_ReadOutputDataBit//读取指定引脚的输出状态if(GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_5)==Bit_SET){//PA5输出高电平}GPIO_ReadOutputData//读取整个端口的所有输出状态uint16_toutputData=GPIO_ReadOutputData(GPIOA);GPIOCONFIGURATION(3/3)GPIO配置流程(四)操作函数GPIO操作函数使用示例//LED闪烁示例GPIO_SetBits(GPIOA,GPIO_Pin_5);//点亮LEDDelay_ms(500);GPIO_ResetBits(GPIOA,GPIO_Pin_5);//熄灭LEDDelay_ms(500);//按键检测示例if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){Delay_ms(20);//消抖if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){//按键按下,执行操作}}函数选择建议:单个引脚操作使用GPIO_SetBits/GPIO_ResetBits或GPIO_WriteBit;需要同时操作多个引脚时使用GPIO_Write;读取输入状态使用GPIO_ReadInputDataBit系列函数。CHAPTERTHREE03任务实施电路设计与程序开发电路设计最小系统、按键电路、LED电路程序开发模块化编程、按键扫描、状态切换TASKREQUIREMENTS任务实现要求任务目标使用STM32F103R6单片机来实现两个按键(KEY1和KEY2)分别控制两个LED(LED1和LED2)的亮灭。1GPIO配置配置按键控制接口和LED控制接口PB1和PB3上拉电阻输入模式PA1和PA2推挽输出模式2按键去抖动消除机械按键抖动对系统的影响抖动时间:5ms~10ms延时确认:10ms以上方法:软件延时消抖3按键扫描不断检测按键状态,判断是否有按键被按下使用函数:GPIO_ReadInputDataBit()扫描对象:PB1和PB3实现方式:循环读取电平4状态切换根据按键状态切换LED的亮灭识别键值:KEY1=1,KEY2=2操作函数:GPIO_SetBits/ResetBits控制对象:PA1和PA2设计思路:本任务采用模块化编程思想,将LED控制和按键处理分别封装成独立的模块,便于代码复用和维护。同时体现了绿色低碳设计理念,通过优化控制程序减少系统能耗。KEYDEBOUNCE按键去抖动原理抖动现象机械按键在按下和释放时存在抖动现象,抖动时间通常为5ms至10ms。抖动时间5~10ms可能导致多次误判抖动影响按键被误判为多次操作,导致系统不稳定解决方案采用软件延时方法消除抖动影响软件去抖动方法去抖动原理当CPU检测到按键按下时,执行10ms以上的延时程序,再次确认按键是否保持闭合状态电平,若确认则判定按键有效。软件去抖流程Step1检测按键Step2延时确认Step3判定有效释放时同样需要消抖检测到按键释放时也需进行相同的延时确认步骤按键去抖动代码示例if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)//检测按键按下{Delay_ms(20);//延时消抖(等待抖动结束)if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0)//再次确认{//按键确实按下,执行相应操作while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);//等待松手Delay_ms(20);//松手消抖}}注意事项:延时时间需要根据实际按键的抖动特性调整,一般10-20ms可以满足大多数机械按键的消抖需求。延时过长会影响按键响应速度,延时过短则无法完全消除抖动。CIRCUITDESIGN仿真电路设计Proteus仿真电路仿真电路主要由三个部分组成:最小系统电路、按键电路和LED电路。在Proteus软件中,复位电路和晶振电路在不连接的情况下,软件默认处于已接好状态。最小系统电路NRST接高电平设置上电复位BOOT0连接地用户FLASH启动VBAT、VDDA接VDD电源供电VSS连接地接地按键电路KEY1一端通过上拉电阻接VDD另一端连接PB1KEY2一端通过上拉电阻接VDD另一端连接PB3按键按下时引脚被拉低LED电路LED1(D1)负极连接PA1正极通过R1接VDDLED2(D2)负极连接PA2正极通过R2接VDDPA输出低电平时LED点亮电路连接关系图STM32F103R6PA1→LED1(-)PA2→LED2(-)PB1←KEY1PB3←KEY2控制按键电路VDD上拉电阻按键GNDLED电路VDD限流电阻LED(+)LED(-)设计说明:按键采用上拉输入方式,按键未按下时引脚为高电平,按下时为低电平;LED采用共阳极接法,GPIO输出低电平时LED点亮,输出高电平时LED熄灭。LEDMODULE程序设计-LED模块LED.h头文件#ifndef__LED_H#define__LED_H//LED初始化函数voidLED_Init(void);//LED1控制函数voidLED1_ON(void);voidLED1_OFF(void);//LED2控制函数voidLED2_ON(void);voidLED2_OFF(void);#endif头文件中声明了LED初始化和控制函数,供其他模块调用LED.c源文件#include"stm32f10x.h"//LED初始化函数voidLED_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);}LED控制函数实现//LED1开启(点亮)voidLED1_ON(void){GPIO_ResetBits(GPIOA,GPIO_Pin_1);}//LED1关闭(熄灭)voidLED1_OFF(void){GPIO_SetBits(GPIOA,GPIO_Pin_1);}//LED2开启(点亮)voidLED2_ON(void){GPIO_ResetBits(GPIOA,GPIO_Pin_2);}//LED2关闭(熄灭)voidLED2_OFF(void){GPIO_SetBits(GPIOA,GPIO_Pin_2);}开启GPIOA时钟配置为推挽输出初始化为高电平代码说明:LED采用共阳极接法,因此GPIO输出低电平时LED点亮(GPIO_ResetBits),输出高电平时LED熄灭(GPIO_SetBits)。初始化时将引脚设为高电平,确保LED初始状态为熄灭。KEYMODULE(1/2)程序设计-按键模块(一)Key.h头文件#ifndef__KEY_H#define__KEY_H//按键初始化函数voidKey_Init(void);//获取按键键值函数uint8_tKey_GetNum(void);//延时函数声明voidDelay_ms(intn);#endifKey_GetNum函数功能•判断是否有按键按下•返回按键对应的键值•包含按键去抖动处理键值定义KeyNum=0默认值无按键按下时的返回值KeyNum=1KEY1KEY1(PB1)被按下KeyNum=2KEY2KEY2(PB3)被按下按键配置说明输入模式选择由于按键为独立按键,一端连接STM32引脚,另一端接地。按键按下时对应的引脚被拉低,按键释放后其引脚又被拉高。所以要配置PB1和PB3为上拉输入另一种接法若按键另一端接电源VDD(而不是GND),则按键按下时引脚被拉高,释放时为低电平。此时PB1和PB3要配置为下拉输入设计要点:按键模块采用上拉输入模式,按键未按下时引脚为高电平,按下时为低电平。通过检测电平变化判断按键状态,配合延时消抖确保按键检测的准确性。KEYMODULE(2/2)程序设计-按键模块(二)Key.c源文件#include"stm32f10x.h"//延时函数(粗略实现)voidDelay_ms(intn){inti,j;while(n--){for(i=20;i>1;i--)for(j=50;j>1;j--);}}//按键初始化函数voidKey_Init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_3;GPIO_Init(GPIOB,&GPIO_InitStructure);}按键扫描函数//按键获取键值函数uint8_tKey_GetNum(void){uint8_tKeyNum=0;if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0){Delay_ms(20);//延时消抖while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);Delay_ms(20);//延时消抖KeyNum=1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)==0){Delay_ms(20);//延时消抖while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_3)==0);Delay_ms(20);//延时消抖KeyNum=2;}returnKeyNum;}按键扫描流程解析1检测按键读取PB1/PB3输入状态2延时消抖延时20ms消除抖动3等待松手循环检测直到按键释放4返回键值设置KeyNum并返回代码说明:Key_GetNum()是按键扫描函数,检测按键按下后延时消抖,等待松手后再延时消抖,最后返回键值。如果没有按键按下,所有if都不成立,则返回默认值0。MAINPROGRAM程序设计-主程序main.c完整代码#include"stm32f10x.h"#include"LED.h"#include"Key.h"uint8_tKeyNum=0;//定义用于接收按键键码的变量intmain(void){/*模块初始化*/LED_Init();//LED初始化Key_Init();//按键初始化while(1){KeyNum=Key_GetNum();//获取按键键码if(KeyNum==1)//按键1按下{LED1_ON();LED2_OFF();}if(KeyNum==2)//按键2按下{LED2_ON();LED1_OFF();}}}1初始化阶段LED_Init()初始化LED引脚Key_Init()初始化按键引脚2按键扫描Key_GetNum()循环获取按键键值自动消抖函数内部处理抖动3状态切换KEY1→LED1亮LED2熄灭KEY2→LED2亮LED1熄灭程序执行流程图系统启动初始化LED和按键获取按键键值根据键值控制LED编程思想:主程序采用模块化设计,将LED控制和按键处理分别封装成独立模块,通过头文件进行接口声明。main函数中只需调用相关函数,代码结构清晰,易于维护和扩展。PROJECTBUILD创建工程与编译调试工程创建步骤1建立工程目录创建"任务2-1按键控制LED"目录2复制基础工程复制任务1-4工程并修改名称3创建子目录在HardWare下新建key和led子目录4修改主文件将flash_led.c修改为main.cKeil工程配置5添加文件组在Keil中增加Hardware组6添加源文件将led.c、key.c添加到Hardware组7编译工程单击Rebuild按钮编译8仿真验证加载hex文件到Proteus验证常见编译错误及解决方案UndefinedsymbolSystemInit原因:未添加system_stm32f10x.c文件检查并添加该文件到工程Cannotopensourceinputfile原因:头文件路径配置不正确检查C/C++选项中的IncludePathsUSE_STDPERIPH_DRIVERundefined原因:未定义全局宏在C/C++选项中添加宏定义调试技巧:编译发生错误时,要仔细分析错误信息,定位问题所在。常见错误包括文件未添加、路径配置错误、宏定义缺失等。解决问题后重新编译,直到生成正确的hex文件。CHAPTERFOUR04任务总结核心知识点梳理核心知识点GPIO配置、按键去抖、模块化编程技能提升电路设计、程序开发、调试技巧SUMMARY(1/2)核心知识点总结(一)STM32GPIO配置与初始化GPIO配置流程1.开启GPIO时钟(RCC_APB2PeriphClockCmd)2.GPIO初始化(GPIO_Init函数)3.使用GPIO操作函数(SetBits/ResetBits)八种配置模式•浮空输入•上拉输入•下拉输入•模拟输入•开漏输出•推挽输出•复用开漏•复用推挽根据应用需求选择合适的配置模式按键去抖动处理抖动现象机械按键在按下和释放时会产生抖动现象,抖动时间通常为5ms至10ms,可能导致按键被误判为多次操作。软件去抖动方法•检测到按键按下后执行10ms以上延时•再次确认按键是否保持闭合状态•确认后判定按键有效•按键释放时同样进行消抖处理消除抖动对系统稳定性的影响重点掌握内容开启时钟RCC_APB2PeriphClockCmd初始化配置GPIO_Init函数操作函数SetBits/ResetBits去抖动软件延时消抖学习建议:GPIO是STM32最基础也是最常用的外设,务必熟练掌握其配置流程和八种工作模式的特点。按键去抖动是实际应用中必须掌握的技能,要理解其原理并能灵活应用。SUMMARY(2/2)核心知识点总结(二)按键扫描与状态切换按键扫描程序学会编写按键扫描程序,不断检测按键的状态,判断是否有按键被按下。使用GPIO_ReadInputDataBit()函数读取引脚电平。状态切换方法掌握根据按键的状态切换LED亮灭的方法,实现了两个按键分别控制两个LED的亮灭。通过识别按键的键值,调用相应的LED控制函数。电路设计与仿真Proteus电路设计在Proteus中设计了按键控制LED的电路
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西艺术职业学院数字水印实践2024-2025学年第二学期期末试卷
- 景区内部管理制度汇编
- 机关内部隐患督办制度
- 机关部门内部管理制度
- 机械内部审计制度汇编
- 林业局内部控制制度范本
- 某某公司内部审计制度
- 检察院内部量刑报告制度
- 检验科内部沟通管理制度
- 民营企业内部承包制度
- 2025年电力新能源交易平台项目可行性研究报告
- 音乐教育课程设计与实施
- 2023-2025年辽宁中考数学试题分类汇编:圆及计算综合 (解析版)
- 2026年湖南高速铁路职业技术学院单招职业倾向性测试题库附答案解析
- 手术室废物的管理课件
- 公安心理素质测试题及答案
- 2025年湖南省长沙市生地会考试卷附带长郡月亮岛中学生地会考及答案
- 9.提高屋面防水卷材施工一次验收合格率-水墨QC小组
- 2025年体育与健康科学体育科学与健康科学研究报告及未来发展趋势预测
- 高标准农田建设培训
- 《爱丽丝漫游奇境记》课件及PP
评论
0/150
提交评论