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

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

先来总结一下 STM32 操作 I/O 口的步骤(以精英板为例):

  1. 使能 I/O 口时钟,调用函数为RCC_APB2PeriphClockCmd();
  2. 初始化 I/O 参数,调用GPIO_Init();
  3. 操作 I/O 口

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

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

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

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

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

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
STM32通用I/O的库函数编程方法一般包括以下几个步骤: 1. 初始化GPIO:在使用GPIO之前,需要先对其进行初始化设置。可以使用库函数GPIO_Init()函数进行初始化。 2. 配置GPIO的工作模式:根据实际需求,选择GPIO的输入/输出模式、推挽/开漏输出、上拉/下拉等工作模式。可以使用库函数GPIO_InitStructure结构体的成员变量进行设置。 3. 配置GPIO的输出值:如果GPIO设置为输出模式,需要设置其输出的值。可以使用库函数GPIO_WriteBit()函数进行设置。 4. 读取GPIO的输入值:如果GPIO设置为输入模式,需要读取其输入的值。可以使用库函数GPIO_ReadInputDataBit()函数进行读取。 示例代码如下: ```c #include "stm32f10x.h" void GPIO_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; //使能GPIOA时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //配置PA5为推挽输出模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); //配置PA0为上拉输入模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } int main(void) { GPIO_Configuration(); //设置PA5输出高电平 GPIO_WriteBit(GPIOA, GPIO_Pin_5, Bit_SET); //读取PA0输入状态 if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == Bit_RESET) { //执行某些操作 } while(1) { //程序循环体 } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值