当前位置: 首页 > news >正文

GD32F407入坑指南 第三章

前言

GD32系列文章均采用KEIL5(V5.35版本),芯片包及固件库版本V3.2.0,使用GD32F407VGT6芯片。

相关文档下载地址,后续更新内容也会放在这个文件路径中。

链接:https://pan.baidu.com/s/1qJEMaxVjLQHTjE1yh4df6Q 
提取码:amvj

本章将GD32F407和STM32F407的GPIO进行对比。

1.GPIO外设地址

1.1 STM32的GPIO基地址

其中AHB1PERIPH_BASE地址为:

其中PERIPH_BASE地址为:

那么GPIOA的基地址为:

0x4000 0000 + 0x0002 0000 = 0x4002 0000

那么依次可以得到:

GPIOA基地址:0x4002 0000

GPIOB基地址:0x4002 0400

GPIOC基地址:0x4002 0800

GPIOD基地址:0x4002 0C00

GPIOE基地址:0x4002 1000

GPIOF基地址:0x4002 1400

GPIOG基地址:0x4002 1800

GPIOH基地址:0x4002 1C00

GPIOI基地址:0x4002 2000

 STM32F4XX中文参考手册第53页

 1.2 GD32的GPIO基地址

GD32F4XX 用户手册7.4章节 171页有相应的介绍。

 gd32f4xx_gpio.h中有相应的说明

 

 在gd32f4xx.h中,GPIO_BASE 等于AHB1_BUS_BASE

 AHB1_BUS_BASE等于 0x4002 0000,因此GPIO_BASE基地址等于 0x4002 0000,GPIOA的偏移量为0,因此也等于 0x4002 0000。

根据地址偏移量,不难得到其他GPIO的基地址:

GPIOA基地址:0x4002 0000

GPIOB基地址:0x4002 0400

GPIOC基地址:0x4002 0800

GPIOD基地址:0x4002 0C00

GPIOE基地址:0x4002 1000

GPIOF基地址:0x4002 1400

GPIOG基地址:0x4002 1800

GPIOH基地址:0x4002 1C00

GPIOI基地址:0x4002 2000

 1.3 对比结果

对比STM32F407和GD32F407,GPIO外设的基地址完全一样,其实芯片也是P2P兼容,STM32F407最高频率为168MHZ,GD32F407最高频率为200MHZ。

2.GPIO的寄存器对比

2.1 STM32的GPIO寄存器

STM32F407的GPIO共有10个寄存器

 在STM32中GPIO的寄存器是以结构体的方式进行访问,其他外设都是如此。

 2.2 GD32的GPIO寄存器

GD32F407的GPIO寄存器是12个,前面10个寄存器跟STM32F407一模一样,功能也一样,名字有点区别,仅此而已。后面增加了两个寄存器,位清除寄存器和端口位翻转寄存器,功能从名字上显而易见。

2.3 对比结果 

GD32F407的GPIO寄存器是12个,前面10个寄存器跟STM32F407一模一样,功能也一样。后面增加了两个寄存器,位清除寄存器和端口位翻转寄存器,功能从名字上显而易见。

3.GPIO配置

3.1 STM32的GPIO配置

GPIO的初始化函数,MX_GPIO_Init(),配置基本的时钟、引脚、输出模式、上下拉、输出速度等参数,通过HAL_GPIO_Init()函数完成相关的参数配置。

3.2 GD32的GPIO配置

GD32F4系列的GPIO初始化,需要配置的参数都是一样的,需要两个函数来完成参数的配置,gpio_mode_set()和gpio_output_options_set()

 GD32F1系列的GPIO初始化,只需要一个函数gpio_init(),不理解为什么GD32F4又改成两个函数来完成初始化。

3.3 对比结果

STM32的GPIO配置相比来说简单一些,与GD32F1系列大致相同,与GD32F4系列有差异,使用需要注意。

 

相关文章:

  • nssctf(Web刷题)
  • ffmpeg-webrtc(metartc)给ffmpeg添加webrtc协议
  • 如何申请免费域名级SSL证书,实现HTTPS访问
  • AI大模型探索之路-实战篇4:DB-GPT数据应用开发框架调研实践
  • 谷歌快速收录怎么做?
  • 如何选择序列化协议:关键因素与场景分析
  • echarts取消纵坐标,自定义提示内容,完整 echarts 布局代码
  • Pytorch深度学习实践笔记1
  • ubuntu nginx 配置php 网站
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • pip(包管理器) for Python
  • 基于深度学习OCR文本识别
  • 1791.找出星形图的中心节点
  • zdppy_mcrud操作MySQL数据库教程
  • Leetcode 第 130 场双周赛题解
  • [译] React v16.8: 含有Hooks的版本
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • MQ框架的比较
  • Odoo domain写法及运用
  • overflow: hidden IE7无效
  • Promise面试题,控制异步流程
  • ucore操作系统实验笔记 - 重新理解中断
  • 服务器从安装到部署全过程(二)
  • 前嗅ForeSpider中数据浏览界面介绍
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • Java性能优化之JVM GC(垃圾回收机制)
  • 正则表达式-基础知识Review
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​MySQL主从复制一致性检测
  • (04)odoo视图操作
  • (30)数组元素和与数字和的绝对差
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (floyd+补集) poj 3275
  • (Java数据结构)ArrayList
  • (LeetCode) T14. Longest Common Prefix
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (笔试题)合法字符串
  • (定时器/计数器)中断系统(详解与使用)
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (小白学Java)Java简介和基本配置
  • .gitattributes 文件
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net中的Queue和Stack
  • // an array of int
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [1204 寻找子串位置] 解题报告
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [Android]创建TabBar
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [C#]winform基于opencvsharp结合Diffusion-Low-Light算法实现低光图像增强黑暗图片变亮变清晰