单片机
返回首页

STM32的按键部分

2019-03-28 来源:eefocus

什么是上拉电阻?按键的上拉电阻为什么是10k欧姆?


答:上拉电阻就是将一个不确定的信号,通过一个电阻和电源VCC相连,固定在高电平。


作用:


1)增加输出引脚的驱动能力(其实就是增加当前导线的电流);


2)防止引脚悬空,否则会产生积累电荷(静电),影响电路稳定性;


3)特别是按键的时候,引脚电平不定的时候,给它一个确定的电平。


至于为什么是10k?因为电阻越小,功耗越大,电阻越大,芯片引脚识别不了,10k的话是大多数智能设备芯片所能识别到的,这是个折中的方案。


二、库函数


st公司为了编程方便,为coder们,封装了一套库函数,并给出了官方模板。自行百度,网上有很多这种资源,stm32f4xx_dsp_stdperiph_lib_um.chm


GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //第0根引脚 

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN; //设置输入模式[重点修改] 

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //设置IO的速度为100MHz 

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //不需要上拉电阻


GPIO_Init(GPIOF, &GPIO_InitStructure);


使用按键控制灯的亮与灭!例如按键0按下,LED0亮,松开则灭。其他按键如此类推

int main(void) 

/* 使能GPIOA GPIOF端口工作,让GPIOA GPIOF设备时钟使能(上电) */ 

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOF, ENABLE);


/* 让PF9引脚设置为输出模式 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;           //GPIO哪一根引脚,当前是使用第9号引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;       //设置PF9引脚为输出模式,具有输出高电平或低电平的功能

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;      //推挽输出,让PF9引脚输出的电流更大[可选]

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  //PF9引脚工作的速度为100MHz,当前的频率可以是2MHz/25MHz/50MHz/100MHz,频率越高,对应的功耗就越高

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;    //不需要上下拉电阻,如果发现PF9引脚需要更大的输出电流,可以使用上拉电阻,设置为GPIO_PuPd_UP,对应的功耗就越高

GPIO_Init(GPIOF, &GPIO_InitStructure);


//熄灭PF9引脚连接的LED灯

GPIO_SetBits(GPIOF,GPIO_Pin_9);


/* 让PA0引脚设置为输入模式 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;           //GPIO哪一根引脚,当前是使用第0号引脚

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;        //设置PA0引脚为输入模式,具有检测引脚高电平或低电平的功能

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;  //PA0引脚工作的速度为100MHz,当前的频率可以是2MHz/25MHz/50MHz/100MHz,频率越高,对应的功耗就越高

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;    //不需要上下拉电阻,如果发现PF9引脚需要更大的输出电流,可以使用上拉电阻,设置为GPIO_PuPd_UP,对应的功耗就越高

GPIO_Init(GPIOA, &GPIO_InitStructure);


while(1)

{

        //检测KEY0是否有按下,若有按下,则检测到低电平;若没有按下,则检测到高电平

        if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==0)

        {

            //点灯,PF9引脚为低电平

            GPIO_ResetBits(GPIOF,GPIO_Pin_9);


            //延时,灯亮一会儿

            delay();    


            //灭灯,PF9引脚为高电平

            GPIO_SetBits(GPIOF,GPIO_Pin_9);


            //延时,灯灭一会儿

            delay();                    

        }

}

return 0;


输入模式可以不用配置速度,但是输出模式必须确定最大输出频率。 

当STM32的GPIO端口设置为输出模式时,有三种速度可以选择:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来选择不同的输出驱动模块,达到最佳的噪声控制和降低功耗的目的。 

高频的驱动电路,噪声也高,当你不需要高的输出频率时,请选用低频驱动电路,这样非常有利于提高系统的EMI性能。 

注意:GPIO的引脚速度是指I/O口驱动电路的响应速度而不是输出信号的速度,输出信号的速度与你的程序有关。 

三、时钟体系


1、参考手册 STM32F4xx中文参考手册.pdf 第106页


2、时钟源 

a.可以使用三种不同的时钟源来驱动系统时钟 (SYSCLK),CPU运行的额定频率为168MHz: 

● HSI 振荡器时钟,也就是高速内部时钟,一般来说很少用,因为精度没有外部高速时钟那么高。 

● HSE 振荡器时钟,也就是高速外部时钟,我用的M4开发板为8MHz。 

● 主 PLL (PLL) 时钟


b.器件具有以下两个次级时钟源: 

● 32 kHz 低速内部 RC (LSI RC震荡电路),该 RC 用于驱动独立看门狗,也可选择提供给 RTC 用于停机/待机模式下的自动唤醒。 

● 32.768 kHz 低速外部晶振(LSE 晶振),用于驱动 RTC 时钟 (RTCCLK)对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗。


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • PIC单片机控制的遥控防盗报警器电路

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 用NE555制作定时器

  • RS-485基础知识:处理空闲总线条件的两种常见方法

    相关电子头条文章