GD32VF103之GPIO最小配置

2023-05-16

longan nano是Sipeed(矽速科技)推出的开发板,使用兆易创新的gd32vf103cbt6芯片,该芯片是基于芯来科技的Nuclei Bumblebee处理器的32位通用微控制器,Bumblebee处理器是基于RISC-V架构指令集开发,由芯来科技(Nuclei System Technology)和台湾晶心科技(Andes Technology)联合开发。

 

gd32vf103cbt6跟stm32的使用非常相似,如果使用C开发,基本上与指令集架构没啥关系。本文介绍GPIO的最小配置,不使用sdk,直接操作寄存器,这样可以更加直观的了解芯片和外设。控制gpio就跟学编程语言打印hello world一样,是开始学习新知识的第一步。gd32vf103配置和使用gpio的基本步骤如下所示:

1、使能GPIO的时钟;

2、配置GPIO的属性参数;

3、设置或者读取引脚控制寄存器;

这里使用longan nano的三个led gpio为例,它们分别是PA1(绿)、PA2(蓝)和PC13(红)。

 

01、使能GPIO的时钟

 

根据系统架构示意图,可以看到GPIO都挂在APB2上。

通过用户手册在复位和时钟单元(RCU)可以找到RCU寄存器,它的基地址是0x40021000。然后找到RCU_APB2EN寄存器,它的地址偏移是0x18,寄存器的2到6位就是GPIO[A-E]的使能位。

将用到的GPIO时钟使能:

 

 

02、配置GPIO的属性参数

 

控制led需要将gpio配置为输出模式,在用户手册中通用和备用输入输出接口(GPIO和AFIO)一章可以找到GPIO寄存器,它们的基地址如图所示。

 

端口模式通过端口控制寄存器配置,端口控制寄存器0配置端口0-7,端口控制寄存器1配置端口8-15.。

一个端口由4位配置,低两位配置输入还是输出,并且决定输出的最大速度,高两位决定具体的输入输出形式。

PA1、PA2和PC13的具体配置如下:

这里要注意,0x1就表示二进制b0001,如果配置为b0101,十六进制应该是0x5,可千万别写成0x0101。

 

03、设置或者读取引脚控制寄存器

 

GPIO模式配置好后,就可以读取或者控制端口的状态了。

输入读取输入状态寄存器,然后查询对应的位的状态即可获得端口的值。

输出则可以用不同的方法控制。

可以使用端口输出控制寄存器控制输出高低:

可以使用端口位操作寄存器控制输出高低:

可以使用位清除寄存器让对应端口输入低电平:

这里说一下它们的区别,端口输出控制寄存器是直接决定端口状态的寄存器,它是1就输出高,是0就输出低。而后两个是通过控制端口输出控制寄存器来间接控制端口状态的。对后两个寄存器写1才会改变端口输出控制寄存器的值,写0不会改变端口输出控制寄存器的值。

所以如果通过端口输出控制寄存器控制端口,需要先读取、改变再写回(|=或者&=),而后两个寄存器可以直接赋值,只要不想改变的位是0即可(=)。

控制端口输出1可以通过端口输出控制寄存器和端口位操作寄存器;

控制端口输出0可以通过端口输出控制寄存器,端口位操作寄存器和位清除寄存器。

通过上面三步配置,GPIO基本的输入输出功能就可以使用了,点亮led就so easy了。下一篇文章我们使用内核的systick来实现延时的功能,这样就可以实现led闪烁和流水灯了。

bilibili:科G栈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GD32VF103之GPIO最小配置 的相关文章

  • xilinx ZYNQ 7000 AXI GPIO

    0AXI GPIO 第一部分 PS 和 PL之间的通讯有一个接口称为AXI AXI总线具体的内容这边不去深究 xff0c 可以理解为一种特殊协议的通讯方式 AXI GPIO是什么意思 xff1f PL是FPGA它可以做成任何你想要的东西 x
  • TX2/Xavier Linux GPIO 计算

    目录 Linux GPIO子系统TX2 Linux GPIO计算Xavier Linux GPIO计算参考用C快捷计算TX2 Linux GPIO用C快捷计算Xavier Linux GPIODebug微信公众号 Linux GPIO子系统
  • NVIDIA Jetson Xavier NX 控制GPIO

    NVIDIA Jetson Xavier NX 控制GPIO 文章目录 NVIDIA Jetson Xavier NX 控制GPIO前言一 简介二 代码实例1 gpio h2 gpio cpp 三 拓展 前言 在linux系统中以文件io的
  • Jetson Xavier gpio编程 (8)

    GPIO lines are attached to gpiochips Look in sys class gpio and you should see gpiochip240 248 and 288 I haven t yet det
  • 28335之GPIO输入

    include 34 DSP2833x Device h 34 include 34 DSP2833x Examples h 34 define LED GpioDataRegs GPADAT bit GPIO0 GPIO配置函数 void
  • 树莓派GPIO

    命令行执行下行 xff0c 即可得树莓派管脚编码表 gpio readall 也可看下图 xff1a BOARD 编号参考 Raspberry Pi 主板上 P1 接线柱的针脚编号 使用该方式的优点是无需考虑主板的修订版本 xff0c 无需
  • RT-Thread记录(十三、I/O 设备模型之PIN设备)

    讲完UART设备之后 我们已经熟悉RT Thread I O 设备模型了 回头看看基本的 PIN 设备 目录 前言 一 PIN 设备模型解析 1 1 初识 GPIO 操作函数 1 2 PIN 设备框架 1 3 PIN 设备驱动框架层 实现的
  • 新唐NUC980使用记录(5.10.y内核):在用户应用中使用GPIO

    文章目录 目的 使用参考与演示 使用参考 存在的问题 问题定位 修改设备树 使用测试 总结 设备树文件内容 目的 GPIO是最基础的外设 使用频率也非常高 这篇文章将简单体验在NUC980 Liunx用户应用中使用GPIO功能 这篇文章中内
  • MC9S12XEP100引脚的复用方式

    嵌入式码农小明最近在研发一个嵌入式产品 用的MC9S12XEP100芯片 其中三个需求需要通过几个使用SPI通讯的芯片实现 硬件开发人员小红照着芯片原理图布好了线 不知是否是没考虑到SPI通讯可以通过CS line来控制要通讯的从机从而实现
  • X2000 Linux 驱动中配置GPIO的上下拉

    由于sdk不支持标准gpio api函数int gpio pull updown unsigned gpio unsigned value 需要用到soc gpio h中的int jzgpio set func int port enum
  • Python 按键和按键释放监听器

    我正在使用 python 代码控制一辆遥控玩具车 截至目前 代码如下 def getkey fd sys stdin fileno old termios tcgetattr fd new termios tcgetattr fd new
  • 在 ARM 上的 Linux 中写入和读取内存映射设备寄存器

    我正在尝试按照以下步骤读取和写入 ARM9 SAM9X25 上的寄存器 http infocenter arm com help index jsp topic com arm doc faqs ka3750 html我以以下代码结束 in
  • 使用 Node.js 通过 Raspberry Pi 3 model B 进行 GPIO

    我正在尝试使用树莓派 3 B 型让 LED 闪烁 我的机器上安装了所有必需的模块 即 npm nodejs pi gpio 修复了检测 gpio 的微小更改 代码是 var gpio require pi gpio gpio open 16
  • [Firefly-Linux] RK3568 gpio-leds驱动详解

    文章目录 一 GPIO 介绍 二 RK3568 GPIO 状况 三 GPIO 引脚计算 四 ITX 3568JQ LED 4 1 LED 原理图 4 2 LED 设备树
  • 橙色 PI 上的双 RC522

    我的目标是使用带有 Orange PI 的双 RFID RC522 读取器 到目前为止 我只成功完成了一项工作 阅读 google armbian 和 Orange pi 论坛 这是我到目前为止所做的 硬件连接 单RC 522 MOSI g
  • 如何为连接到 I2C gpio 扩展器的虚拟 mdio-gpio 设备配置 ACPI *.asl

    我正在使用 Q7 模块 x86 并尝试在 Linux 上使用 ACPI SSDT Overlay 配置我们的外设 但我对此很挣扎 我想我误解了ACPI的一些核心概念 Problem CPU gt I2C gt PCA9575 GPIO Ex
  • linux GPIO C API

    我有一个 powerpc 板 上面运行着 3 2 内核 使用 sysfs 访问 GPIO 按预期工作 例如 gt echo 242 gt sys class gpio export gt cat sys class gpio gpio242
  • mmap 比 ioremap 慢

    我正在为运行 Linux 2 6 37 的 ARM 设备进行开发 我正在尝试尽快切换 IO 引脚 我制作了一个小内核模块和一个用户空间应用程序 我尝试了两件事 使用以下命令直接从内核空间操作 GPIO 控制寄存器ioremap mmap G
  • gpiod - 在设备树中使用标签

    我想用libgpiod通过自定义板上的用户空间控制一些 GPIO 我有一个 i MX6UL 处理器 它有数百个引脚 我将只使用其中 8 个 作为 GPIO 我读到了关于libgpiod因为它正在取代旧的 sysfs API 我很高兴您可以为
  • Beaglebone Black 上的 GPIO

    我目前遇到了 Beaglebone black GPIO 引脚的问题 我正在寻找一种正确的方法来读取 C 中的 GPIO 引脚 p8 4 的值 如果我理解正确的话 我尝试使用一个库 该库使用了在引入设备树之前不支持的旧方法 我尝试寻找其他解

随机推荐