【CH32】

您所在的位置:网站首页 使用库函数实现操作gpio口 【CH32】

【CH32】

2023-06-03 12:31| 来源: 网络整理| 查看: 265

系列文章目录 【CH32】| 00——开发环境搭建 【CH32】| 01——新建工程 | 下载 | 运行 |调试 【CH32】| 02——常用外设 | GPIO

失败了也挺可爱,成功了就超帅。

文章目录 前言1. GPIO简介2. IO口的内部结构框图保护二极管上下拉电阻施密特触发器两个MOS管输出寄存器和输入寄存器 3. GPIO的几种模式3.1 输入模拟输入浮空输入上拉输入下拉输入 3.2 输出推挽输出开漏输出复用推挽/开漏输出 4. GPIO模式如何选择5. 引脚的复用功能6. 引脚产生的中断 | 外部中断7. 引脚的锁定机制8. GPIO相关寄存器配置寄存器低位 GPIOx_CFGLR端口输入寄存器 GPIOx_INDR端口输出寄存器 GPIOx_OURDR端口复位/置位寄存器 GPIOx_BSHR端口复位寄存器 GPIOx_BCR配置锁存寄存器 GPIOx_LCKR 9. 实践(代码篇)9.1 点灯前看查原理图 LED灯的电路 及控制引脚 9.2 寄存器操作——点灯9.3 库函数操作——点灯

前言

白嫖了开发板那不得做些事情。现在好多刚入门单片机的都是从库函数入手的 大多教程也是库函数的 这样导致对一些底层怎么实现的不是很清楚。我在学习的时候 老师强烈要求寄存器 然后在学完stm32后 用一些其他单片机也是很容易上手的。所以我就通过带大家看寄存器以及库函数的底层实现深入了解各个外设。

1. GPIO简介

GPIO就是引脚,我们在使用引脚时根据作用 应配置了其模式再去使用。通过看它的参考手册(最好的资料) 了解到GPIO可以配置为很多模式。和stm32一模一样。毕竟抄的 这点可以理解 这样我们再用这个芯片可以无缝上手。当然它也有些自已的特点啦。

2. IO口的内部结构框图

在这里插入图片描述 先简单认识下它内部结构

保护二极管

在这里插入图片描述 IO进来之后遇到的第一个就是保护二极管。这两个二极管的作用就是 引脚外部电压过高/过低时 这两个二极管对其进行电压钳位 电压不会流通到后面 从而保护引脚 在这里插入图片描述

上下拉电阻

在这里插入图片描述 这组上拉下拉电阻的作用给IO口配置默认电平 拉高/拉低如果没有上拉/下拉操作 那么这个引脚是出于浮空状态的也就说会受外界因素干扰 。一般单片机复位后大多数IO口都是处于浮空状态的。通过上拉 给IO口一个高电平 ,下拉给IO低电平。让IO口有一个明确的状态。 在这里插入图片描述

施密特触发器

在这里插入图片描述 施密特触发器就是 电压高于某个值 输出变为高电平 低于某个值 输出变为低电平。

两个MOS管

输出模式下有两个Mos管 在这里插入图片描述 一个PMOS 一个NMOS 他两是让其具有推挽输出和开漏输出的关键。后面详细说。

输出寄存器和输入寄存器

在这里插入图片描述 我们操作单片机 也是通过操作相关寄存器实现相关功能的。寄存器就是我们和机器交互的桥梁 我们不需要管它之后时怎么操作的 只需要配置设置寄存器让他去执行就和。在这里我们通过配置GPIO 输出 和输入 寄存器 来配置IO口模式以及IO输出高低电平。

3. GPIO的几种模式

引脚 无非 输入、输出两大类

3.1 输入

在这里插入图片描述 IO配置为输入模式时 是没有复用功能的

模拟输入

模拟输入:一般 ADC采集时 配置为该模式,ADC即采集模拟信号所以 不会经过施密特触发器

在这里插入图片描述

浮空输入

浮空输入:在系统复位后 大多数引脚处于该状态 很容易受外部干扰 这种状态下引脚处于不确定状态 不是高电平也不是低电平 一般测得电压1.几V 还不停变化。

上拉输入

上拉输入:引脚电平拉为高电平(=VDD) 该模式可以确定引脚默认状态 处于高电平 逻辑1 。一般使用在需要检测外部 信号是 低电平有效的情况下 比如 按键检测(低电平有效、某些低电平有效的数字输出传感器) 注意:芯片内部上拉 电流能力很弱 在需要电流高的情况下 外接上拉。

下拉输入

下拉输入: 设置引脚默认电平为 低电平(VSS) 逻辑0 0V 一般用在检测高电平有效的情况下。

3.2 输出 推挽输出

在这里插入图片描述 PMOS管相当于NPN三极管 NMOS相当于PNP三极管 动图通过正弦波 模拟高低电平切换时电流的流向。 在这里插入图片描述 当输出控制 IN输出高电平时,PMOS管导通,NMOS截至 OUT输出高电平。这种情况我们也称为推(灌电流)。 当输出控制 IN输出低电平时,NMOS管导通,PMOS截至 OUT输出低电平。这种情况我们也称为挽(拉电流)。

推挽输出的优点 1、可以快速输出(切换)高低电平 2、驱动能力较强,一般IO口驱动电流可以达到20ma 缺点 不能线与(两个推挽输出IO不能接一起) 推挽时线与等于直接短接VCC和地 会烧了芯片。 推挽输出使用场景: 一般用在需要快速切断的状态 驱动LED 驱动一些数字芯片控制引脚

开漏输出

开漏输出只有一个NMOS管 在工作 在这里插入图片描述 当漏输出 通过上拉实现高电平输出能力 输出的高电平=VDD电压 驱动能力和上拉电阻有关。 开漏输出的特点: 可以线与(该模式多个引脚可以连载一起) 可以通过上拉电阻实现 电平转换 电平切换速度也和电阻相关 开漏输出一般用在一些总线信号线比如I2C、电机驱动器信号线等

复用推挽/开漏输出

IO除了本身功能 还可以复用其他功能( 好比我这个IO口 通过复用实现ADC输入引脚的功能等)。在这种复用情况下使用开漏/推挽。

4. GPIO模式如何选择

官方参考手册给出了推荐配置 P52页 我只截取了一部分 在这里插入图片描述

5. 引脚的复用功能

一个IO口除了作为普通引脚 用作输入输出外 还可以有其他功能 我们把这个赋予引脚其他功能的操作叫做复用(重映射) 一个IO口可以复用多个功能 引脚映射有 默认映射 部分 完全三种 不同的映射 让引脚实现不同的作用

在这里插入图片描述 可以看到 复用功能 可以通过 不同的重映射方式 选择好多引脚 其他重映射 P57

6. 引脚产生的中断 | 外部中断

所以IO口都可以配置为外部中断模式。就是将一个中断线 绑定到引脚上 中短线是由编号的 需要和 IO口的对应 比如我 PA1 PB1 PC1 三个端口 他们序号是 1 做外部中断时 是绑定到 中断线1 上的 EXTI1 PC2 即 绑定到EXTI2上的 必须对应。 在这里插入图片描述

7. 引脚的锁定机制

可以让IO口处于锁定状态。无法被修改。只有复位后才可修改。 如何锁定;通过给引脚写1或0完成 锁定时序。 比如:让这个引脚写1 写1 读1 读0 类似

8. GPIO相关寄存器

每个外设的寄存器都有一个基地址(起始地址) 。即这个外设寄存器有固定范围。一个外设有又好几个寄存器 这些是在基地址基础上偏移得到。 我们GPIO也是一样的 不同端口有不同的基地 它的地址在哪看 参考手册 如图该芯片 GPIO 不同端口的基地址 在这里插入图片描述 GPIO相关寄存器名称即地址如下

在这里插入图片描述 下面我们详细介绍相关寄存器

配置寄存器低位 GPIOx_CFGLR

为什么叫配置寄存器低位 因为我手里这个芯片CHV003 一个端口 只有8个引脚 如PA0-7 一个配置寄存器是32位4字节 负责8个IO 引脚更多的芯片 就有配置寄存器高位 (一个端口 16个IO口) 在这里插入图片描述 那么具体怎么写呢

eg: 配置PA1为推挽输出 速度为50MHZ 1、可以看到一个IO口由 MODE CNF 一共四位配置 MODE[1:0]这两位在低位 2、配置PA1 A端口引脚 是不是要通过配置A端口的配置寄存器 GPIOA_CFGLR 3、要配置为输出模式 速度50MHZ MODE和CNF时配套的 可以看到 由8组 序号是从0-7它对应8个引脚0-7 我们是PA1 那么 要设置 CNF1 MODE1 这四位 输出模式 50MHZ MODE1[1:0] =0x3或3; 3 就是二进制11 推挽输出 CNF1[1:0]=0x00或0;二进制00 合在一起 二进制 0011 是不是就是十进制3; 4、将设置值给这个寄存器 GPIOA_CFGLR | = 3



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3