datasheet

STM32入门之旅(第三天)-------按键电路、时钟体系

2019-07-10来源: eefocus关键字:STM32  按键电路  时钟体系

一、按键电路


什么是上拉电阻?按键的上拉电阻为什么是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;

}

三、时钟体系


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)对于每个时钟源来说,在未使用时都可单独打开或者关闭,以降低功耗。


详细倍频计算参考如下:

由于官方的代码是使用外部高速晶振25MHz,我的M4开发板是使用外部高速晶振8MHz,所以PLL的倍频因子要进行修改,只修改PLL_M为8.


修改stm32f4xx.h以下内容,行127将外部晶振频率值修改为8MHz。


#if !defined  (HSE_VALUE)


  #define HSE_VALUE    ((uint32_t)8000000) /*!< Value of the External oscillator in Hz */


#endif /* HSE_VALUE */



关键字:STM32  按键电路  时钟体系

编辑:什么鱼 引用地址:http://www.eeworld.com.cn/mcu/ic467318.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM32入门之旅(第四天)-------位带操作、中断
下一篇:STM32入门之旅(第二天)-------开发环境搭建、库函数使用

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM32开发笔记20: STM32L053R8T6的keil配置

单片机型号:STM32L053R8T6    使用STM32CubeMX生成STM32L053R8T6相关的应用程序代码后,使用Keil开发环境第1次下载的时候,提示如下错误,我使用F0和F4的单片机,没有遇到过。    仔细查看工程设置,原因在工程设置中,我们需加入相应的Flash配置信息,如下图所示,具体的选择,要根据单片机的类型,我们可以仔细查看数据手册。    但下载的时候,偶尔还会提示如下错误:    这件事情网上说了很多的解决方法,我自己测试,更改2处Keil的设置既可以解决,如下图所示。    此2处更改后,反复
发表于 2019-07-16
STM32开发笔记20: STM32L053R8T6的keil配置

STM32开发笔记21: USB驱动的移植

单片机型号:STM32L053R8T6    现在使用的STM32L053R8T6单片机带有USB接口,原先一直使用UART转USB芯片来完成USB功能的支持,现在这款单片机带了就希望使用以下。由于已经建立了自己的工程目录,再重新使用STM32CubeMX生成的工程文件,重新建立是不显示的,所以本文探索将USB驱动文件移植到自己项目中的方法,我使用的是USB的CDCD类,步骤如下:    1、使用STM32CubeMX使能USB,如下图所示:    2、设置时钟,USB需要48M时钟,使用内部和外部均可,我这里使用外部时钟。    3、生成工程文件
发表于 2019-07-16
STM32开发笔记21: USB驱动的移植

STM32开发笔记22: 手动添加驱动文件

单片机型号:STM32L053R8T6    我们可以通过STM32CubeMX生成工程代码,但是如果我们的工程已经建立完毕了,或者说我们在原有的工程上,开始新的项目设计,此时又需加入新的驱动,该如何呢?本文探讨其解决方法。    1、STM32CubeMX的驱动路径如下图所示,我们希望加入什么驱动,就直接将其对应的.c文件加入到工程中即可。    2、为了使该模块生效,我们还学将其使能。其使能宏,在stm32l0xx_hal_conf.h中,如下图所示。    3、上述工作完成后,我们就可以对工程进行编译了,至于驱动的具体调用方法,我们可以参看ST
发表于 2019-07-16
STM32开发笔记22: 手动添加驱动文件

STM32开发笔记23: 使用__weak修饰符

单片机型号:STM32L053R8T6在 HAL 库中,很多回调函数前面使用__weak 修饰符。 weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。 举个例子:我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 HAL_MspInit,定义如下:__weak void 
发表于 2019-07-16

STM32开发笔记24:STM32L0低功耗设计——需求概述

单片机型号:STM32L053R8T6    这几篇日志将详细记录,自己应用stm32进行低功耗设计的全过程。    使用芯片:STM32L053R8T6    运行模式:        Range 1:电源电压限制在1.71-3.6V,CPU最大运行频率为32MHz。        Range 2:CPU最大运行频率为16MHz。        Range 3:CPU最大运行频率4.2MHz    低功耗模式: 
发表于 2019-07-16
STM32开发笔记24:STM32L0低功耗设计——需求概述

STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

单片机型号:STM32L053R8T6    继续项目的开发工作,突然发现,程序不能够正常下载到单片机中了,提示如下图所示的错误,我使用的是keil和ST-Link。    这个问题在我第1次调试的时候发生过1次,我认为是我误操作将芯片烧坏了,因为当时又反复的焊接了一下芯片,也没有修好,就把这件事情放下了。    今天再次出现,自己感觉可能和低功耗有关,仔细查看刚刚下载的程序,里面上来程序就进入低功耗,没有任何退出语句,所以应该是CPU不响应下载命令了。    按照这种思路,先将单片机的复位引脚接地,然后点击下载按钮的同时,放开复位引脚,居然成功
发表于 2019-07-16
STM32开发笔记25:STM32L0低功耗设计-使用Keil和ST-Link下载程序

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved