STM32_引脚初始化与时钟基础

news/2024/12/28 21:46:03/文章来源:https://www.cnblogs.com/blogofzcfu/p/18638014

为什么每用一个GPIO引脚,都要初始化一次时钟?

TM32 微控制器采用了 时钟门控(Clock Gating)机制,这是现代微控制器的一种功耗管理策略。时钟门控机制的核心思想是,只有在外设需要运行时,才使能相应外设的时钟,而在不使用时关闭时钟,以减少功耗和节省电源。

    //初始化时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//GPIO引脚初始化GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //把初始化的值重新在检查赋值一次,与硬件对应上GPIO_Init(GPIOA, &GPIO_InitStructure);

时钟设置

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{/* Check the parameters */assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));assert_param(IS_FUNCTIONAL_STATE(NewState));if (NewState != DISABLE){//RCC->APB2ENR寄存器对应的RCC_APB2Periph位被置位1,选择响应的时钟RCC->APB2ENR |= RCC_APB2Periph;}else{//RCC->APB2ENR寄存器对应的RCC_APB2Periph位被置位0,其余为不变,关闭响应的时钟RCC->APB2ENR &= ~RCC_APB2Periph;}
}

GPIO引脚的参数选择

typedef struct
{uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins_define */GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.This parameter can be a value of @ref GPIOSpeed_TypeDef */GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
//速度可选项
typedef enum
{ GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz, GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
//模式可选项
typedef enum
{ GPIO_Mode_AIN = 0x0,GPIO_Mode_IN_FLOATING = 0x04,GPIO_Mode_IPD = 0x28,GPIO_Mode_IPU = 0x48,GPIO_Mode_Out_OD = 0x14,GPIO_Mode_Out_PP = 0x10,GPIO_Mode_AF_OD = 0x1C,GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;

每个外设(如 GPIO、USART、SPI、ADC 等)都有自己的时钟源。

#define RCC_APB2Periph_AFIO              ((uint32_t)0x00000001)
//ABCDEFG 其实是代表不同的 GPIO 端口组,而每个端口组下面可以包含多个 GPIO 引脚(Pin)//GPIOA代表一个时钟组,00000004代表位掩码    用于给寄存器RCC->APB2ENR确定是那一组的时钟使能
//RCC->APB2ENR |= RCC_APB2Periph_GPIOA;  #define RCC_APB2Periph_GPIOA             ((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB             ((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC             ((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD             ((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE             ((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF             ((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG             ((uint32_t)0x00000100)#define RCC_APB2Periph_ADC1              ((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2              ((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1              ((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1              ((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8              ((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1            ((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3              ((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15             ((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16             ((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17             ((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9              ((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10             ((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11             ((uint32_t)0x00200000)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860568.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Blog-3 题目集7~8的总结

22207203-陈思思 一、前言 (一)第7次题目集(家居强电电路模拟程序-3)知识点:串联电路:电流相同,电压分配。 并联电路:电压相同,电流分配。 类的设计:电路设备类、受控设备类、控制设备类、串联电路类、并联电路类。 数据结构:使用列表或字典存储电路信息、设备状态。…

已有docker镜像构建过程分析

转载请注明出处: 1.使用docker history进行分析  docker history 命令用于查看指定镜像的历史层信息,它显示了镜像创建过程中的每一层,包括创建时间、创建者、大小和注释等信息。 查看镜像历史docker history myimage:latest使用示例:root@controller1:~# docker images …

Linux操作文件IO

Linux操作文件IO参考自:【北京迅为】嵌入式linux开发指南_v1.1(i.MX6ULL)文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制; 标准 IO 是 C 语言函数库里的标准 I/O 模型,在 stdio.h 中定义,通过缓冲区操作文件,带缓存机制。Linux 系统中一切皆文…

K230学习记录

K230学习记录 参考自: # 立创庐山派-K230-CanMV开发板资料与相关扩展板软硬件资料官网全部开源 # 开发板官网:www.lckfb.com # 技术支持常驻论坛,任何技术问题欢迎随时交流学习 # 立创论坛:www.jlc-bbs.com/lckfb串口0(115200),连接进入打印U-Boot信息ctrl+R可以快速重装…

windows与虚拟机linux通过ssh进行连接并上传文件

windows与虚拟机linux通过ssh进行连接并上传文件 windows配置 以管理员打开powershell下载和启动安装ssh客服端 Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 Start-Service sshd Set-Servi…

[Java/网络/HTTP(S)] 基于`Http(s)URLConnection`的网络请求工具(HttpRequestUtils)

1 序轻量级HTTP网络请求工具,接续:[Java SE/JDK/网络] 核心源码精讲:java.net.HttpURLConnection - 博客园/千千寰宇 [身份认证/JWT] 身份认证方案与HTTP请求中Authorization Header - 博客园/千千寰宇 【推荐】 [网络/HTTPS/Java] PKI公钥基础设施体系:数字证书(X.509)、C…

2024/12/17 【字符串】LeetCode 459.重复的子字符串 【❌】

https://programmercarl.com/0459.%E9%87%8D%E5%A4%8D%E7%9A%84%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2.html#%E6%80%9D%E8%B7%AF https://leetcode.cn/problems/repeated-substring-pattern/ 子串结束位置大于中间位置的话,一定不能重复组成字符串。 如果 next[len - 1] != -1…

一起鸿蒙吧,现在到了「绝佳时刻」

摘要:它已经不止于可用和好用,而是迈向“必用”的新阶段了。 10月22日,原生鸿蒙操作系统如约而至。 作为一个全新的操作系统,原生鸿蒙拥有流畅、安全、智能、互联、精致五大原生特性,为无数用户开启了一个全新的数字生活方式。 如果你正在犹豫是否要升级原生鸿蒙系统,那么…

题目集7~8总结性博客

前言 在本学期的学习过程中,我们共完成了三次题目集的练习,其中第七题和第八题集在知识点、题量和难度上具有一定的代表性。总体而言,这两次题目集涵盖了面向对象编程(OOP)、设计模式、数据结构与算法、软件工程等多个核心知识点。 知识点总结: 面向对象编程(OOP): 类…

Python 中使用 Matplotlib 进行多图绘制

Python 中使用 Matplotlib 进行多图绘制 Matplotlib 是 Python 中非常强大的数据可视化工具,它可以用来生成简单到复杂的各种图形。无论是处理单张图表还是多图并列展示,Matplotlib 都能提供高效的支持。在本篇文章中,我们将介绍如何使用 Matplotlib 绘制多图,以便在同一画…

fping 的使用方法

fping简介 fping是一个小型命令行工具,用于向网络主机发送ICMP回应请求,类似于ping,但在ping多个主机时性能要高得多。 fping完全不同于ping,因为可以在命令行上定义任意数量的主机,或者指定包含要ping的IP地址或主机列表的文件。 与ping要等待某一主机连接超时或发回反馈…