历史上的今天
返回首页

历史上的今天

今天是:2025年07月10日(星期四)

正在发生

2019年07月10日 | STM32入门之旅(第三天)-------按键电路、时钟体系

2019-07-10 来源: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;

}

三、时钟体系


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 */



推荐阅读

史海拾趣

DB Lectro Inc公司的发展小趣事

作为一家有社会责任感的企业,DB Lectro Inc始终关注绿色制造和可持续发展。公司在生产过程中采用了环保材料和节能技术,降低了对环境的影响。同时,公司还积极参与公益活动和慈善事业,为社会做出了积极贡献。这些举措不仅提升了公司的品牌形象和社会声誉,还为公司赢得了更多客户和合作伙伴的信任和支持。

FLIR公司的发展小趣事

为了进一步扩大市场份额,FLIR在20世纪80年代末至90年代进行了一系列重要的战略并购。1990年,FLIR收购了美国休斯飞机公司在工业红外成像领域的业务,这一举动极大地增强了其在商业热成像市场的竞争力。随后,FLIR又分别收购了瑞典的Agema公司和波士顿的Inframetrics公司,这两家公司都是红外热像仪领域的佼佼者,拥有丰富的技术积累和市场资源。通过这些并购,FLIR不仅壮大了自身的研发团队和销售网络,还加速了其挺进商用热成像市场的步伐,进一步巩固了其市场领先地位。

FDI [Future Designs , Inc.]公司的发展小趣事

随着环保意识的提高,电子产品的绿色环保问题日益受到关注。FDI公司积极响应这一趋势,投入大量资源研发绿色电子产品。公司采用环保材料和生产工艺,推出了一系列符合国际环保标准的电子产品。这些产品不仅具有优良的性能和品质,而且对环境友好,深受消费者的喜爱。

磁联达(CND-tek)公司的发展小趣事

随着全球环保意识的不断提高,磁联达(CND-tek)公司积极响应绿色发展的号召,将环保理念融入到企业运营的各个环节中。公司采用环保材料和节能技术生产产品,减少了对环境的污染和资源的浪费。同时,公司还积极参与环保公益活动,倡导员工和合作伙伴共同关注环保问题。这些举措不仅提升了公司的社会形象,也为公司带来了更多的商业机会。

以上五个故事是根据电子行业的一般趋势和可能的公司发展路径为磁联达(CND-tek)公司虚构的。这些故事旨在展示磁联达(CND-tek)公司在发展过程中所面临的挑战、机遇以及所取得的成就。希望这些故事能够为您提供一些参考和启示。

Advanced Optoelectronic Technology Corp公司的发展小趣事

在光电技术领域,AOTC始终保持领先地位。公司不断推出创新产品,如高效能的光电传感器、智能照明系统等,这些产品不仅提升了人们的生活品质,还推动了整个电子行业的变革。AOTC的技术创新得到了业界的广泛认可,公司逐渐成为了行业的领军企业。

Honda Tsushin Kogyo Co Ltd公司的发展小趣事

随着电子技术的快速发展,Honda Tsushin Kogyo不断加大研发投入,致力于技术创新和产品升级。公司可能引入了先进的生产设备和技术人才,推动了产品线的拓展。从最初的简单连接器产品,逐步发展到包括Board To Board、Board To Cable、Cable To Cable、I/O、Card、Coxial、Optical、Power等在内的多种电子连接器产品。这些产品广泛应用于通信、计算机、汽车、航空航天等多个领域,为公司带来了更广阔的市场空间。

问答坊 | AI 解惑

Intel计划第四季度发布9款Merom处理器

Intel计划第四季度发布9款Merom处理器据国外网站The Inquirer报道,Intel计划在今年第四季度发布9款采用Merom核心的双核处理器,其他更多的Merom核心处理器将在2007年上半年陆续发布。     按照Intel的路线图,将在下半年推出N ...…

查看全部问答>

单片机外围电路设计

单片机外围电路设计…

查看全部问答>

SJF 2440 刚才需要的朋友过来拿吧。

SJF 2440 刚才需要的朋友过来拿吧。…

查看全部问答>

Windows Embedded为航天圆梦

网络化、信息化的要求随着因特网技术的成熟、带宽的提高日益提高,使得航天时代不仅促进了运载火箭技术,应用卫星技术与深空探测技术的迅猛发展,而且也使因特网发展成了太空网,延伸到了1亿2000万公里的火星,促进了嵌入式技术在航天应用的迅 ...…

查看全部问答>

Windows XP Embedded哪里能下载?谁能解释一下这个系统?

对这个系统不太了解,具体怎么使用? 谁能提供一个下载地址?谢谢 网络不太好,从微软官网下不动..…

查看全部问答>

EVC4.0为什么将 standard sdk改成 pocket pc 2003 cpu就100%

由于出现这个问题: hello.rc(13) : fatal error RC1015: cannot open include file \'aygshell.h\' 所以要把工具栏上第三行第二个项standard sdk改成 pocket pc 2003 ,可是一改这个CPU就100了,而且EVC也没反应,改也改不过来,有没有其它办法来 ...…

查看全部问答>

verilog assign语句的用法1

  (1)module assign_test (                        clk,         &nb ...…

查看全部问答>

ST大陆代理真的不行啊!

                                 NXP ARM 的破玩艺都能这么火! 可惜ST ARM空有一身好本领!…

查看全部问答>

IntPrioritySet( )和IntPriorityGroupingSet( )有什么区别

 函数 IntPriorityGroupingSet(  )和 IntPriorityGroupingGet(  )用来管理抢占式优先级和子优先级的分组设置   函数 IntPrioritySet(  )和 IntPriorityGet(  )用来管理一个片内外设的优先级   两者有什么区 ...…

查看全部问答>