电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
Longan nano(GD32VF103)之GPIO最小配置
分 享
扫描二维码分享
Longan nano(GD32VF103)之GPIO最小配置
longan
GPIO
RISC-V
gcrisis
关注
发布时间: 2020-09-18
丨
阅读: 4309
![](https://cf05.ickimg.com/bbsimages/202009/5618661d0b57539e2ff8e6680b894e29.png) 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(红)。 ![](https://cf05.ickimg.com/bbsimages/202009/c95b61040e19d21671ec025fb2b89f32.png) ![](https://cf05.ickimg.com/bbsimages/202009/ac938eca73af38657716aed62b4a2422.png) ####1、使能GPIO的时钟 根据系统架构示意图,可以看到GPIO都挂在APB2上。 ![](https://cf05.ickimg.com/bbsimages/202009/7a0f532bf702cecbdb6e9eaaf6142221.png) 通过用户手册在复位和时钟单元(RCU)可以找到RCU寄存器,它的基地址是0x40021000。然后找到RCU_APB2EN寄存器,它的地址偏移是0x18,寄存器的2到6位就是GPIO[A-E]的使能位。 ![](https://cf05.ickimg.com/bbsimages/202009/59b30a7a46fb4baf792134157e64e93b.png) 将用到的GPIO时钟使能: ![](https://cf05.ickimg.com/bbsimages/202009/dbdccf2470f98f5a65fdae849c84f244.png) ####2、配置GPIO的属性参数 控制led需要将gpio配置为输出模式,在用户手册中通用和备用输入输出接口(GPIO和AFIO)一章可以找到GPIO寄存器,它们的基地址如图所示。 ![](https://cf05.ickimg.com/bbsimages/202009/f02bb11a7a1fc164aeb754b164e98c88.png) 端口模式通过端口控制寄存器配置,端口控制寄存器0配置端口0-7,端口控制寄存器1配置端口8-15。 ![](https://cf05.ickimg.com/bbsimages/202009/df81083fa6309fda07f48c16a5058922.png)![](https://cf05.ickimg.com/bbsimages/202009/85f5afc6198b34c27895840932d25ee1.png) 一个端口由4位配置,低两位配置输入还是输出,并且决定输出的最大速度,高两位决定具体的输入输出形式。 ![](https://cf05.ickimg.com/bbsimages/202009/dd489866df4b6d5c1c94beb5e162f336.png) PA1、PA2和PC13的具体配置如下: ![](https://cf05.ickimg.com/bbsimages/202009/80259cace1f3272e90ee3162122e303d.png) 这里要注意,0x1就表示二进制b0001,如果配置为b0101,十六进制应该是0x5,可千万别写成0x0101。 ####3、设置或者读取引脚控制寄存器 GPIO模式配置好后,就可以读取或者控制端口的状态了。 输入读取输入状态寄存器,然后查询对应的位的状态即可获得端口的值。 ![](https://cf05.ickimg.com/bbsimages/202009/c3249673630100a68ffd1e5ea9222bb6.png) 输出则可以用不同的方法控制。 可以使用端口输出控制寄存器控制输出高低: ![](https://cf05.ickimg.com/bbsimages/202009/da214de9e013a43e513ce88d4c6daeb5.png) 可以使用端口位操作寄存器控制输出高低: ![](https://cf05.ickimg.com/bbsimages/202009/edfa12b6e6e8874dbd4379b343719a7b.png) 可以使用位清除寄存器让对应端口输入低电平: ![](https://cf05.ickimg.com/bbsimages/202009/bf00818d6ed614cbb4db5f53ade4bc7c.png) 这里说一下它们的区别,端口输出控制寄存器是直接决定端口状态的寄存器,它是1就输出高,是0就输出低。而后两个是通过控制端口输出控制寄存器来间接控制端口状态的。对后两个寄存器写1才会改变端口输出控制寄存器的值,写0不会改变端口输出控制寄存器的值。 所以如果通过端口输出控制寄存器控制端口,需要先读取、改变再写回(|=或者&=),而后两个寄存器可以直接赋值,只要不想改变的位是0即可(=)。 控制端口输出1可以通过端口输出控制寄存器和端口位操作寄存器; 控制端口输出0可以通过端口输出控制寄存器,端口位操作寄存器和位清除寄存器。 ![](https://cf05.ickimg.com/bbsimages/202009/d5626c879b1d2187896a3b187086c1d7.png) 通过上面三步配置,GPIO基本的输入输出功能就可以使用了,点亮led就so easy了。下一篇文章我们使用内核的systick来实现延时的功能,这样就可以实现led闪烁和流水灯了。 ![](https://cf05.ickimg.com/bbsimages/202009/8e321b564924942b70721fbeed6aaa9e.jpg)
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
0
)
gcrisis
关注
评论
(0)
登录后可评论,请
登录
或
注册
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交