一、GPIO原理

首先要提一下,在固件库中,GPIO 端口操作对应的库函数函数以及相关定义在文件
stm32f10x_gpio.h 和 stm32f10x_gpio.c 中。STM32 的 IO 口相比 51 而言要复杂得多,所以使用起来也困难很多。首先 STM32 的 IO 口可以由软件配置成如下 8 种模式:
1、输入浮空
2、输入上拉
3、输入下拉
4、模拟输入
5、开漏输出
6、推挽输出
7、推挽式复用功能
8、开漏复用功能
每个 IO 口可以自由编程,但 IO 口寄存器必须要按 32 位字被访问。STM32 的很多 IO 口都是 5V 兼容的,这些 IO 口在与 5V 电平的外设连接的时候很有优势,具体哪些 IO 口是 5V 兼容的,可以从该芯片的数据手册管脚描述章节查到(I/O Level 标 FT 的就是 5V 电平兼容的)。STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口配置寄存器 CRL 和 CRH;2 个 32 位的数据寄存器 IDR 和 ODR;1 个 32 位的置位/复位寄存器BSRR;一个 16 位的复位寄存器 BRR;1 个 32 位的锁存寄存器 LCKR。CRL 和 CRH 控制着每个 IO 口的模式及输出速率。大家如果想要了解每个寄存器的详细使用方法,可以参考《STM32 中文参考手册 》。
表1 端口位配置表

表2 输出模式配置表

一般通用I/O分组是从GPIOA~GPIOG(具体有多少组和板子的IO口数量有关),每个GPI/O端口有:两个32位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个32位数据寄存器(GPIOx_IDR和GPIOx_ODR),一个32位置位/复位寄存器(GPIOx_BSRR),一个16位复位寄存器(GPIOx_BRR)和一个32位锁定寄存器(GPIOx_LCKR)。这些寄存器在库函数中都是配置好的,我们只需要对应上面的表格中按模式调用即可。
其中STM32 的 CRL 控制着每组 IO 端口(A~G)的低 8 位的模式。每个 IO 端口的位占用 CRL 的 4 个位,高两位为 CNF,低两位为 MODE。这里我们可以记住几个常用的配置,比如 0X0 表示模拟输入模式(ADC 用)、0X3 表示推挽输出模式(做输出口用,50M 速率)、0X8 表示上/下拉输入模式(做输入口用)、0XB 表示复用输出(使用 IO 口的第二功能,50M 速率)。CRH 的作用和 CRL 完全一样,只是 CRL 控制的是低 8 位输出口,而 CRH 控制的是高 8位输出口。

二、实例分析

接下来我们讲讲GPIO初始化的代码

每个GPIO使用前都必须进行时钟使能,(不管是通用IO还是复用为其他功能,都必须按照IO使用的时钟进行初始化,关于时钟是比较复杂但是非常重要,之后在进行串口通信实验时我会给大家做个详细总结。)

1. GPIO时钟使能

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);//使能GPIOB和GPIOE的时钟,必定的操作

2. GPIO初始化函数
GPIO 相关的函数和定义分布在固件库文件 stm32f10x_gpio.c 和头文件 stm32f10x_gpio.h 文件中。在固件库开发中,操作寄存器 CRH 和 CRL 来配置 IO 口的模式和速度是通过 GPIO 初始化函数完成:
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
这个函数有两个参数,第一个参数是用来指定 GPIO组别,取值范围为 GPIOA~GPIOG。
第二个参数为初始化参数结构体指针,结构体类型为 GPIO_InitTypeDef。

typedef struct
{ uint16_t GPIO_Pin; //IO口的引脚GPIOSpeed_TypeDef GPIO_Speed; //IO工作频率GPIOMode_TypeDef GPIO_Mode; //IO口的工作模式
}GPIO_InitTypeDef;

这些初始化函数和结构体已经在库函数stm32f10x_gpio.c 和头文件 stm32f10x_gpio.h中由系统定义好,我们只需在主函数中调用即可。下面是初始化PB5引脚作为输出的例子。

int main(void)
{GPIO_InitTypeDef GPIO_InitStructure;//定义GPIO初始化结构体RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE);//使能GPIOB和GPIOE的时钟GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//初始化IO口模式为推挽输出GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;//输出的引脚PB5GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;//输出速度50MHZGPIO_Init(GPIOB,&GPIO_InitStructure);//调用GPIO初始化函数,配置PB5GPIO_SetBits(GPIOB,GPIO_Pin_5);//设置端口位 PB5输出1
}

这样PB5的初始化就完成了,其他IO口也是用同样的方式进行初始化。以上的GPIO结构体中对应的成员类型都可以在stm32f10x_gpio.h中找到,可以根据自己的需求初始化GPIO。

STM32编程--GPIO配置相关推荐

  1. STM32编程环境配置(kile5)

    2018-08-2513:53:33 折腾了很久,花了两天的空闲时间终于烧进去程序了.完成了kile5对stm32编程的环境配置. 1.下载kile5 激活破解 2.安装stm32配置环境 3.加载工 ...

  2. 零基础入门STM32编程——GPIO(五)

    系列教程链接 HAL库编程点灯篇https://blog.csdn.net/oHaoEr/article/details/122999523 一 GPIO简介 1.1 概述 GPIO(通用输入输出端口 ...

  3. 番外篇:STM32之GPIO口速率配置究竟代表什么

    番外篇:STM32之GPIO口速率配置究竟代表什么 用过STM32的童鞋们都知道,STM32在GPIO配置时都需要选择一个GPIO速率,对于STM32F103系列芯片来说最快的配置应该是50Mhz左右 ...

  4. STM32编程(一)STM32 GPIO配置的4大步骤

    GPIO配置的4大步骤 前言:只要初始化了GPIO完成后 在主函数中调用GPIO_SetBits(xxxx),GPIO_ResetBits(xxxx)就可以控制它的引脚了. 1  定义GPIO引脚的结 ...

  5. 【浅析STM32之GPIO寄存器(CRL/CRH)配置 】

    浅析STM32之GPIO寄存器(CRL/CRH)配置 一.前言 GPIO的配置可以说是STM单片机的一大特色,通过GPIO的配置我们可以进行多种不同模式的输入和输出,并且进行配置的方式也有多种,一般我 ...

  6. STM32学习——GPIO的操作

    写在前面 1.应项目要求,要迅速熟悉stm32的GPIO.串口以及TIM高级定时器(输出PWM) 2.初步了解stm32学习方法以及编程要领(疯狂地赋值粘贴库函数,学会看库函数的函数介绍以及参数选择, ...

  7. stm32核心板可以点亮灯吗_二、STM32的GPIO输出操作

    这是我STM32F103C8T6开发笔记专栏的一部分.可以到专栏中查阅更多内容. STM32F103C8T6开发笔记整理​zhuanlan.zhihu.com [写在前面]: 这篇笔记的内容,主要是指 ...

  8. 基于标准库函数与基于HAL库函数的stm32编程方式

    文章目录 基于标准库函数与基于HAL库函数的stm32编程方式 一.基于标准库 1. 介绍 2. 库函数的STM32串口程序编写 二.基于HAL库 1.介绍 2.HAL库STM32串口程序编写 三.差 ...

  9. STM32笔记 GPIO介绍及IO口操作 STM32F0 利用C语言位域实现仿位带操作

    文章目录 GPIO简介 工作方式 相关寄存器介绍 IO 操作步骤 IO口三种操作细解 附录:C语言相关 偏移地址与绝对地址 GPIO简介 GPIO:每个连接到I/O总线上的设备都有自己的I/O地址集, ...

  10. STM32中GPIO_Mode--GPIO配置

    本篇由转载而来,有侵权请联系作者,谢谢. 原博客地址:https://blog.csdn.net/snow416/article/details/6540646 一.GPIO配置 (1)GPIO_Mo ...

最新文章

  1. android手势放大自动还原,ImageView通过matrix实现手势缩放,放大,缩小 ,移动
  2. USB启动盘制作的几种方式
  3. linux grep 详细深入学习
  4. 笔记-项目采购管理-索赔的处理
  5. 如何查看类型为LRAW的SAP ABAP数据库表字段的内容
  6. php符号教程,PHP教程:网站开发编程中的特殊符号处理_php
  7. 华润置地php面试题_长春华润置地崑崙御,以至臻匠心,成就城市典范
  8. python 贴吧自动回复_利用Python实现微信自动回复!我打游戏再也不怕女朋友发信息了...
  9. 【HTML5】在canvas上绘制简单的2D图形 (+太极图)
  10. 框架通讯契约——接口
  11. 6.高性能MySQL --- 查询性能优化(2)
  12. c++ 虚函数实现原理
  13. TT安全小学生成长记
  14. 全网搜索 6.0 - 超级网搜 SuperSearch 最新版 - 主要更新内容
  15. 1stopt(应用集锦)
  16. 【SpringMVC】DispatcherServlet重要组件之一MultipartResolver
  17. YAML详解 是什么
  18. 三角剖分与Delaunay三角剖分及带约束的Delaunay三角剖分
  19. AI 算法是如何改变智能风控的 | 文末赠书
  20. 有没有什么靠谱的副业?

热门文章

  1. HTML5九宫格拼图小游戏
  2. 抽象工厂模式(通俗易懂)
  3. Sqlserver添加或修改字段
  4. qq西游服务器制作教程,QQ西游修罗版开区一键服务端+完整客户端+GM辅助工具+教程...
  5. Xmind 8 Update 8 安装及补丁下载
  6. oracle 存储 秘密,鲜为人知的Exadata存储性能秘密
  7. 关于主机的思维导图_【思维导图大咖分享干货】关于思维导图中插图的用法细解!!...
  8. OSEK网络管理入门
  9. 《Python金融大数据风控建模实战》 第8章 Logistic回归模型
  10. java 随机抽取数组内容_工具类:随机抽取数组或集合中的几个不重复元素