STM32—GPIO简介

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本文基于正点原子官方提供的资料,仅供个人学习使用。

一、STM32工程目录介绍

1. 目录结构介绍

前面基于固件库新建了一个工程模板,在此模板下可以进行进一步的实验开发。下面基于正点原子提供的一个例程源码来分析一下,对于实际开发中,一个工程包含哪些东西,这些文件各自的作用是什么?
我们选取了第一个实验:跑马灯。用keil打开后,分析一下它的目录结构。
在这里插入图片描述
接下来我们逐一讲解一下我们的工程目录下面的组以及重要文件。
截取自正点原子STM32学习参考资料
(1)USER :存放的主要是用户代码

system_stm32f10x.c 里面主要是系统时钟初始化函数 SystemInit 相关的定义,一般情况下文件用户不需要修改。 stm32f10x_it.c 里面存放的是部分中断服务函数,main.c就是主函数。

(2)HARDWARE :外设驱动代码
他的实现是通过调用 FWLib下面的固件库文件实现的,比如 led.c 里面调用 stm32f10x_gpio.c 里面的函数对 led 进行初始化,这里面的函数是讲解的重点,也是我们编写代码的重点。后面的实验中可以看到会引入多个源文件。

(3)SYSTEM :ALIENTEK 提供的共用代码
包含 Systick 延时函数, IO 口位带操作以及串口相关函数。

(4)CORE:固件库必须的核心文件和启动文件
这里面的文件用户不需要修改。

(5)FWLib : ST 官方提供的外设驱动固件库文件
这些文件大家可以根据工程需要来添加和删除。每个 stm32f10x_ppp.c 源文件对应一个 stm32f10x_ppp.h 头文件。

README 分组主要就是添加了 README.TXT 说明文件,对实验操作进行相关说明。

2. 各目录结构之间的层次关系

这些分组之间的层次结构关系:
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。
从层次图中可以看出, 我们的用户代码和 HARDWARE 下面的外设驱动代码再不需要直接
操作寄存器,而是直接或间接操作官方提供的固件库函数。 但是后面我们的为了让大家更全面
方便的了解外设,我们会增加重要的外设寄存器的讲解,这样对底层知识更加了解,方便我们
深入学习固件库。

二、寄存器与GPIO口的配置

虽然说固件库给予了我们开发很大的帮助,但为了更深层次的理解外设的功能,以及固件库函数与寄存器配置的一些关系,学习了解寄存器还是很有必要的。
首先提一下,在固件库中, GPIO 端口操作对应的库函数函数以及相关定义在文件stm32f10x_gpio.h 和 stm32f10x_gpio.c 中。

1.GPIO简介

在这里插入图片描述
七组IO口:GPIOA、GPIOB…GPIOG,每组有16个IO口,如PA0—PA15,总共112个IO。

STM32 的 IO 口相比 51 而言要复杂得多,所以使用起来也困难很多。 首先 STM32 的 IO 口
可以由软件配置成如8 种模式:四种输入、四种输出。

2. IO口控制寄存器

STM32 的每个 IO 端口都有 7 个寄存器来控制。他们分别是:配置模式的 2 个 32 位的端口
配置寄存器 CRL 和 CRH; 2 个 32 位的数据寄存器 IDR 和 ODR; 1 个 32 位的置位/复位寄存器
BSRR;一个 16 位的复位寄存器 BRR; 1 个 32 位的锁存寄存器 LCKR。
在这里插入图片描述
在这里插入图片描述
STM32F103有7组I/O口,一组I/O是16个PIN,一组I/O含7个寄存器,一共可以控制一组GPIO的16个I/O口。
在这里插入图片描述
STM32F103有7组配置每一个I/O口要4个位,也就是4个位控制一个I/O口,因此端口配置低寄存器只能配置低8个IO口(如:PA0-PA7),同理,还有一个端口配置高寄存器,配置另外高8个IO口(如:PA8-PA15)。/O口,一组I/O是16个PIN,一组I/O含7个寄存器,一共可以 控制一组GPIO的16个I/O口。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、端口复用和端口重映射

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/little_rookie__/article/details/120563554