GD32F450寄存器和库函数

文章详细介绍了GD32F4xx系列微控制器的存储器映射,包括固定由Cortex-M4系统外设占用的地址空间和芯片供应商自定义的部分。讨论了寄存器映射、总线基地址,特别是GPIO在外设中的角色以及其在AHB1总线上的位置。此外,还提及了库函数的使用,如gd32f4xx_gpio.c,用于操作GPIO的外设库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GD32F4xx用户手册

GD32F450xx数据手册

GD32F3x0固件库使用指南

一、寄存器介绍

1. 存储器映射表

GD32是一个32位的单片机,它的地址范围为2的32次方,也就是4GB的地址空间。

为了降低不同客户在相同应用时的软件复杂度,存储映射是按Cortex-M4处理器提供的规则预先定义的。

在存储器映射表中,一部分地址空间由Arm Cortex-M4的系统外设所占用,且不可更改。其余部分地址空间可由芯片供应商定义使用。

2. 寄存器映射表

寄存器是具有特定功能的内存单元,通过操作这些内存单元可以驱动外设工作。

通常会给每个寄存器对应的内存单元赋予一个名字,即寄存器映射。

3. 总线基地址

片上外设区域分为三条总线,分别为AHB总线、APB1总线和APB2总线。

AHB总线最高时钟可达200MHZ,APB1总线最高时钟可达50MHZ,APB2总线时钟最高可达100MHZ。

根据外设速度的不同,不同的总线挂载着不同的外设。

总线的最低地址我们称为该总线的基地址,总线基地址也是挂载在该总线上的首个外设的地址。

 

 4. GPIO

GD32 GPIO外设挂载在AHB1总线上

 相应的寄存器地址

 5. 寄存器操作

二、库函数介绍

参考文件:

(1)标准外设库文件gd32f4xx_gpio.c

(2)GD32F3x0固件库使用手册

GD32F450是一款由GigaDevice公司生产的高性能、低功耗的32位通用微控制器,基于ARM®Cortex®-M4内核。在使用GD32F450配置I2C与EEPROM通信时,一般需要遵循以下步骤: 1. 硬件连接:确保EEPROM的I2C接口与GD32F450的I2C接口正确连接。通常包括SDA(数据线)SCL(时钟线)两根线,有时还需要考虑连接上拉电阻。 2. 初始化I2C接口:在微控制器中配置I2C接口的GPIO,设置为开漏输出,并配置I2C时钟速率、地址模式等。这通常通过设置一系列寄存器来完成,包括使能I2C模块,配置I2C时钟速率,设置设备地址,以及配置为主机模式等。 3. I2C通信:初始化完成后,可以通过I2C接口与EEPROM进行读写操作。这涉及编写发送特定的序列,包括开始信号、设备地址(写或读模式)、内部EEPROM地址、数据以及结束信号等。 4. 数据操作:在与EEPROM进行数据交互时,可能需要进行写入读取。写入数据前,通常需要发送一个写命令目标地址;读取数据时,需要先发送读命令目标地址,然后再读取数据。 5. 错误处理:在通信过程中,应适当处理可能出现的错误情况,比如检查应答信号,处理超时情况等。 以下是一个简化的示例代码,展示如何使用GD32F450进行基本的I2C配置EEPROM读写操作: ```c // 假设已经配置好了I2C时钟GPIO,以下代码仅为示例 // 初始化I2C i2c_parameter_struct i2c_init_struct; i2c_struct_para_init(&i2c_init_struct); i2c_init_struct.device_mode = I2C_DEVICE_MODE_MASTER; i2c_init_struct.clock_speed = 100000; i2c_init_struct.saddr0 = 0xA0; // EEPROM I2C地址 i2c_init_struct.saddr_mode = I2C_SADDR_7BIT_MODE; i2c_init_struct.saddr1 = I2C_SADDR1_NA; i2c_init_struct.saddr2 = I2C_SADDR2_NA; i2c_init(I2C0, &i2c_init_struct); // 写EEPROM uint16_t eeprom_addr = 0x0000; // EEPROM内部地址 uint8_t data_to_write = 0xAA; // 要写入的数据 i2c_start_on_bus(I2C0); i2c_master_addressing(I2C0, true); i2c_master_send_start(I2C0); i2c_master_send_address(I2C0, (eeprom_addr << 1) | I2C_TRANSMITTER); i2c_master_send_data(I2C0, data_to_write); i2c_master_send_stop(I2C0); // 读EEPROM uint8_t data_read = 0; i2c_start_on_bus(I2C0); i2c_master_addressing(I2C0, true); i2c_master_send_start(I2C0); i2c_master_send_address(I2C0, (eeprom_addr << 1) | I2C_RECEIVER); i2c_master_send_start(I2C0); i2c_master_send_address(I2C0, (eeprom_addr << 1) | I2C_TRANSMITTER); i2c_master_send_stop(I2C0); i2c_master_send_start(I2C0); i2c_master_addressing(I2C0, false); i2c_master_receive_data(I2C0); data_read = i2c_master_read_data(I2C0); i2c_master_send_stop(I2C0); ``` 在实际应用中,还需要考虑具体I2C库函数的使用、错误处理、EEPROM的页写限制延时等复杂情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值