STM32中I/O口操作为什么要不断设置使能时钟?

demi的头像

先来总结一下 STM32 操作 I/O 口的步骤(以精英板为例):
① 使能 I/O 口时钟,调用函数为RCC_APB2PeriphClockCmd();
② 初始化 I/O 参数,调用GPIO_Init();
③ 操作 I/O 口

看了STM32操作 I/O 口的步骤,是不是一头雾水,因为我们以前学习51单片机的时候,根本没有这么麻烦,I/O 想输入就直接读,想输出就直接赋值,串口、AD转化、外部中断等等也都是想用就用,不需要单独配置时钟。

51单片机的这种做法确实很方便,不需要有乱七八糟的设置就能让芯片跑起来,但是随之带来的就是所谓的功耗问题。换句话来说就是一些资源根本用不上,但是芯片却还给它分配资源,即增加了芯片的负担,又浪费了资源。

随着电子产品集成度越来越高,如果还用51单片机的那套,功耗和发热越来越严重,芯片厂商非常无奈也在开始想办法避免这个问题,而最直接的思路当然就是用多少功能就使能多少功能,对每个外设的时钟都设置了开关,让用户可以精确地控制,关闭不需要的设备,达到节省供电的目的。我们学51单片机就知道,单片机之所以能够单独工作,就是因为他又独立的时钟(晶振),那如果想关闭某些功能,就直接关闭它的时钟就好了,所以就出现了这么多的时钟和IO配置。

最后总结就是,默认情况下这些时钟都是disable的。你要使用它,当然需要enable了。

寄存器是由D触发器组成的,只有送来了时钟,触发器才能被改写值,这样寄存器才能工作。只不过,在51单片机一个时钟系统把一切都包了,在STM32中,我们很明确地做好了分工,让大家各司其职,其实这样还有一个好处就是,不是每个外设都需要系统时钟那么高的频率,就像是高射炮打蚊子一个道理。

来源:https://blog.csdn.net/weixin_44174528/article/details/107355795
转载此文目的在于传递更多信息,版权归原作者所有。