跳过正文

ch32v00x_gpio.h

Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 9: 本文

描述
#

该文件包含 CH32V00x 系列微控制器 GPIO 固件库的所有函数原型、常量定义、枚举类型和结构体定义。本库提供对 GPIO 引脚的初始化、读写、复用映射、外部中断配置等完整控制功能,支持推挽输出、开漏输出、上拉/下拉输入、模拟输入等多种工作模式,并兼容复用功能(AF)和引脚重映射(Remap)机制。所有引脚操作均基于位掩码设计,支持单引脚或组合引脚操作,适用于嵌入式系统中对 I/O 端口的高效、精确控制。

常量
#

GPIO_pins_define
#

GPIO 引脚选择掩码,每个引脚对应一个独立的位掩码,支持组合使用(如 GPIO_Pin_0 | GPIO_Pin_2)以同时配置多个引脚。GPIO_Pin_All 用于一次性配置所有可用引脚(0~7),适用于初始化或复位场景。该设计兼容标准 STM32 GPIO 模型,便于代码移植。

名称 简述
GPIO_Pin_0 0x0001 选择引脚 0
GPIO_Pin_1 0x0002 选择引脚 1
GPIO_Pin_2 0x0004 选择引脚 2
GPIO_Pin_3 0x0008 选择引脚 3
GPIO_Pin_4 0x0010 选择引脚 4
GPIO_Pin_5 0x0020 选择引脚 5
GPIO_Pin_6 0x0040 选择引脚 6
GPIO_Pin_7 0x0080 选择引脚 7
GPIO_Pin_All 0xFFFF 选择所有引脚(0~7)

以上所有值都强制转换为 uint16_t

GPIO_Remap_define
#

引脚复用映射配置常量,用于重新映射外设信号到其他 GPIO 引脚,实现灵活的 PCB 布局。每个映射常量包含位置信息与映射类型,通过 GPIO_PinRemapConfig() 函数启用或禁用。部分映射(如 I2C1、USART1、TIM1/2)支持部分重映射(Partial)和完全重映射(Full),以适应不同封装引脚分布。GPIO_Remap_SDI_Disable 用于禁用 SDI 功能,避免与用户引脚冲突。

名称 简述
GPIO_Remap_SPI1 0x00000001 SPI1 重映射
GPIO_PartialRemap_I2C1 0x10000002 I2C1 部分重映射
GPIO_FullRemap_I2C1 0x10400002 I2C1 完全重映射
GPIO_PartialRemap1_USART1 0x80000004 USART1 部分重映射1
GPIO_PartialRemap2_USART1 0x80200000 USART1 部分重映射2
GPIO_FullRemap_USART1 0x80200004 USART1 完全重映射
GPIO_PartialRemap1_TIM1 0x00160040 TIM1 部分重映射1
GPIO_PartialRemap2_TIM1 0x00160080 TIM1 部分重映射2
GPIO_FullRemap_TIM1 0x001600C0 TIM1 完全重映射
GPIO_PartialRemap1_TIM2 0x00180100 TIM2 部分重映射1
GPIO_PartialRemap2_TIM2 0x00180200 TIM2 部分重映射2
GPIO_FullRemap_TIM2 0x00180300 TIM2 完全重映射
GPIO_Remap_PA1PA2 0x00008000 PA1 和 PA2 重映射
GPIO_Remap_ADC1_ETRGINJ 0x00200002 ADC1 注入通道外部触发重映射
GPIO_Remap_ADC1_ETRGREG 0x00200004 ADC1 常规通道外部触发重映射
GPIO_Remap_LSI_CAL 0x00200080 LSI 校准信号重映射
GPIO_Remap_SDI_Disable 0x00300400 禁用 SDI 功能
GPIO_Remap_PA1_2 GPIO_Remap_PA1PA2 GPIO_Remap_PA1PA2 的别名

以上所有值都强制转换为 uint32_t

GPIO_Port_Sources
#

外部中断(EXTI)或事件输出(Event Output)的端口源选择,用于指定哪个 GPIO 端口作为 EXTI 线的输入源。仅支持 A、C、D 三个端口,B 端口未被定义,可能因芯片引脚限制或功能保留。

名称 简述
GPIO_PortSourceGPIOA 0x00 选择 GPIOA 作为端口源
GPIO_PortSourceGPIOC 0x02 选择 GPIOC 作为端口源
GPIO_PortSourceGPIOD 0x03 选择 GPIOD 作为端口源

以上所有值都强制转换为 uint8_t

GPIO_Pin_sources
#

外部中断(EXTI)的引脚源选择,与 GPIO_Port_Sources 配合使用,指定具体哪一位(07)连接到 EXTI 线。每个引脚源对应一个 EXTI 线(EXTI0EXTI7),实现独立中断触发。

名称 简述
GPIO_PinSource0 0x00 选择引脚 0 作为 EXTI 源
GPIO_PinSource1 0x01 选择引脚 1 作为 EXTI 源
GPIO_PinSource2 0x02 选择引脚 2 作为 EXTI 源
GPIO_PinSource3 0x03 选择引脚 3 作为 EXTI 源
GPIO_PinSource4 0x04 选择引脚 4 作为 EXTI 源
GPIO_PinSource5 0x05 选择引脚 5 作为 EXTI 源
GPIO_PinSource6 0x06 选择引脚 6 作为 EXTI 源
GPIO_PinSource7 0x07 选择引脚 7 作为 EXTI 源

以上所有值都强制转换为 uint8_t

枚举
#

GPIOSpeed_TypeDef
#

输出引脚的最大切换频率配置,直接影响驱动能力和功耗。频率越高,驱动能力越强,但电磁干扰(EMI)和功耗也越高。GPIO_Speed_50MHz 是对 GPIO_Speed_30MHz 的别名,用于兼容部分文档或代码习惯,实际硬件最大支持 30MHz。

名称
GPIO_Speed_10MHz 1
GPIO_Speed_2MHz 2
GPIO_Speed_30MHz 3

GPIOMode_TypeDef
#

GPIO 引脚工作模式配置,决定引脚的电气行为。输入模式(AIN、IN_FLOATING、IPD、IPU)用于读取外部信号;输出模式(Out_OD、Out_PP)用于驱动负载;复用模式(AF_OD、AF_PP)用于连接内部外设(如 UART、SPI)。注意:GPIO_Mode_AIN 会禁用数字输入缓冲器,适用于模拟采集场景。

名称
GPIO_Mode_AIN 0x0
GPIO_Mode_IN_FLOATING 0x04
GPIO_Mode_IPD 0x28
GPIO_Mode_IPU 0x48
GPIO_Mode_Out_OD 0x14
GPIO_Mode_Out_PP 0x10
GPIO_Mode_AF_OD 0x1C
GPIO_Mode_AF_PP 0x18

BitAction
#

位操作状态枚举,用于 GPIO_WriteBit() 等函数中指定写入值。Bit_SET 表示置高(输出 1),Bit_RESET 表示置低(输出 0),与标准库命名一致,提高代码可读性。

名称
Bit_RESET 0
Bit_SET 1

结构体
#

GPIO_InitTypeDef
#

GPIO 初始化结构体,用于批量配置一个或多个引脚的模式、速度和引脚选择。该结构体是 GPIO_Init() 函数的唯一输入参数,通过 GPIO_StructInit() 可初始化为默认值(浮空输入、2MHz 速度、所有引脚),便于快速配置。

名称 类型 简述
GPIO_Pin uint16_t 指定要配置的 GPIO 引脚,可为 GPIO_Pin_0~GPIO_Pin_7 的组合或 GPIO_Pin_All
GPIO_Speed GPIOSpeed_TypeDef 指定引脚输出速度,影响驱动能力和功耗
GPIO_Mode GPIOMode_TypeDef 指定引脚工作模式,决定电气行为(输入/输出/复用)

函数
#

GPIO_DeInit
#

void GPIO_DeInit(GPIO_TypeDef *GPIOx)
将指定 GPIO 外设(A、C、D)的所有寄存器恢复为复位默认值。通过复位时钟实现,而非直接写寄存器,确保完全清除所有配置状态,避免残留设置干扰新配置。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要复位的 GPIO 外设,x 可为 A、C、D(B 未实现)

返回值:

GPIO_AFIODeInit
#

void GPIO_AFIODeInit(void)
将复用功能(AFIO)寄存器(包括引脚重映射、EXTI 配置、事件输出)恢复为复位默认值。用于系统初始化阶段或切换功能前清除所有映射配置,防止冲突。

参数:

返回值:

GPIO_Init
#

void GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)
根据 GPIO_InitTypeDef 结构体配置指定 GPIO 外设的引脚模式、速度和引脚选择。支持同时配置多个引脚(通过位掩码),并自动处理上拉/下拉配置(IPU/IPD)。输出模式下,速度由 GPIO_Speed 字段决定;复用模式下,需确保 AFIO 已正确配置。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要配置的 GPIO 外设(A、C、D)
GPIO_InitStruct GPIO_InitTypeDef * 指向包含配置参数的结构体指针

返回值:

GPIO_StructInit
#

void GPIO_StructInit(GPIO_InitTypeDef *GPIO_InitStruct)
GPIO_InitTypeDef 结构体的所有成员初始化为默认值:所有引脚(GPIO_Pin_All)、2MHz 速度、浮空输入模式。用于避免结构体中未初始化成员导致的不可预测行为。

参数:

名称 类型 简述
GPIO_InitStruct GPIO_InitTypeDef * 指向待初始化的结构体指针

返回值:

GPIO_ReadInputDataBit
#

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
读取指定 GPIO 引脚的当前输入电平。仅适用于输入模式(包括浮空、上拉、下拉、模拟),读取结果为 Bit_SET(高)或 Bit_RESET(低)。不适用于输出模式引脚。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设(A、C、D)
GPIO_Pin uint16_t 指定要读取的引脚(0~7)

返回值:
输入引脚的电平状态(Bit_SETBit_RESET

GPIO_ReadInputData
#

uint16_t GPIO_ReadInputData(GPIO_TypeDef *GPIOx)
一次性读取指定 GPIO 外设所有引脚(0~7)的输入电平,返回 16 位值,低 8 位有效。适用于需要批量读取多个输入状态的场景,如按键矩阵扫描。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设(A、C、D)

返回值:
当前所有引脚的输入状态(低 8 位有效)

GPIO_ReadOutputDataBit
#

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
读取指定 GPIO 引脚的输出锁存器值,即最后一次写入的值,而非实际引脚电平。适用于调试或确认输出状态,但不能反映外部负载影响(如开漏输出被拉低时)。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设(A、C、D)
GPIO_Pin uint16_t 指定要读取的引脚(0~7)

返回值:
输出锁存器的值(Bit_SETBit_RESET

GPIO_ReadOutputData
#

uint16_t GPIO_ReadOutputData(GPIO_TypeDef *GPIOx)
读取指定 GPIO 外设所有引脚的输出锁存器值,返回 16 位值,低 8 位有效。用于批量确认输出状态,常用于状态回读或调试。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要读取的 GPIO 外设(A、C、D)

返回值:
所有引脚的输出锁存器值(低 8 位有效)

GPIO_SetBits
#

void GPIO_SetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
将指定引脚置高(输出 1),不影响其他引脚。内部使用 BSHR 寄存器实现,为原子操作,安全高效。支持多引脚同时置高。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设(A、C、D)
GPIO_Pin uint16_t 指定要置高的引脚(可组合)

返回值:

GPIO_ResetBits
#

void GPIO_ResetBits(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
将指定引脚置低(输出 0),不影响其他引脚。内部使用 BCR 寄存器实现,为原子操作。支持多引脚同时置低。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设(A、C、D)
GPIO_Pin uint16_t 指定要置低的引脚(可组合)

返回值:

GPIO_WriteBit
#

void GPIO_WriteBit(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
根据 BitVal 的值(Bit_SETBit_RESET)写入指定引脚。是 GPIO_SetBits()GPIO_ResetBits() 的封装,适用于单引脚精确控制,代码语义清晰。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设(A、C、D)
GPIO_Pin uint16_t 指定要写入的引脚(0~7)
BitVal BitAction 写入值:Bit_SET(高)或 Bit_RESET(低)

返回值:

GPIO_Write
#

void GPIO_Write(GPIO_TypeDef *GPIOx, uint16_t PortVal)
一次性写入整个端口的输出值。PortVal 的低 8 位对应引脚 0~7,高 8 位被忽略。适用于需要快速更新多个输出引脚的场景(如 LED 显示、DAC 模拟输出)。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要操作的 GPIO 外设(A、C、D)
PortVal uint16_t 要写入的端口值(低 8 位有效)

返回值:

GPIO_PinLockConfig
#

void GPIO_PinLockConfig(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
锁定指定引脚的配置寄存器,防止运行时被意外修改。一旦锁定,除非复位芯片,否则无法更改该引脚的模式或速度。常用于安全关键应用(如启动配置、调试接口保护)。

参数:

名称 类型 简述
GPIOx GPIO_TypeDef * 选择要锁定的 GPIO 外设(A、C、D)
GPIO_Pin uint16_t 指定要锁定的引脚(可组合)

返回值:

GPIO_PinRemapConfig
#

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
启用或禁用指定的引脚重映射功能。通过修改 AFIO 的 PCFR1 寄存器实现,支持 SPI1、I2C1、USART1、TIM1/2 等外设的引脚重定位。注意:重映射必须在 GPIO 初始化前完成,否则可能无效。

参数:

名称 类型 简述
GPIO_Remap uint32_t 选择要配置的重映射常量(如 GPIO_Remap_SPI1
NewState FunctionalState ENABLE(启用)或 DISABLE(禁用)

返回值:

GPIO_EXTILineConfig
#

void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource)
配置指定 GPIO 引脚作为外部中断(EXTI)线的输入源。必须与 EXTI 模块配合使用,用于触发中断。每个 EXTI 线(0~7)只能绑定一个端口,需在初始化前调用。

参数:

名称 类型 简述
GPIO_PortSource uint8_t 选择端口源(GPIO_PortSourceGPIOA 等)
GPIO_PinSource uint8_t 选择引脚源(GPIO_PinSource0~GPIO_PinSource7

返回值:

GPIO_IPD_Unused
#

void GPIO_IPD_Unused(void)
为未使用的 GPIO 引脚配置为上拉输入,防止悬空引脚引入噪声或增加功耗。根据芯片型号(通过内部 ID 判断)自动配置不同端口的引脚,适用于量产固件,提升系统稳定性。

参数:

返回值:

Ch32v00x软件文档 - 这篇文章属于一个选集。
§ 9: 本文

相关文章

ch32v00x.h

该文件是 CH32V003 微控制器的外设访问层头文件,定义了所有外设寄存器的内存映射、位域常量、中断向量、时钟配置、GPIO 控制结构及系统级常量。它为标准外设库提供底层硬件抽象,使开发者可通过结构体指针直接访问寄存器,或通过位掩码配置外设功能。本文件不包含函数原型,仅提供寄存器定义与常量,是所有外设驱动开发的基础。

ch32v00x_adc.h

该文件定义了 CH32V00x 系列微控制器 ADC 外设的固件库所有函数原型、常量、枚举和结构体。ADC(模数转换器)支持单通道与多通道扫描转换、注入通道、模拟看门狗、DMA 请求、软件与外部触发等多种模式,适用于高精度模拟信号采集场景。本库通过寄存器掩码操作实现灵活配置,所有常量均以 uint32_t 或 uint8_t 类型定义,确保与硬件寄存器位域精确匹配。函数设计遵循标准外设库风格,支持初始化、启动、中断、校准、偏移设置等完整功能链,适用于工业控制、传感器接口、电源管理等嵌入式应用。

ch32v00x_dma.h

该文件定义了 CH32V00x 系列微控制器 DMA(直接存储器访问)外设的固件库函数原型、数据结构及常量宏。DMA 用于在不占用 CPU 资源的情况下实现外设与内存、内存与内存之间的高效数据传输,适用于高速数据采集、串口/ADC 缓冲、图像处理等场景。本库支持 7 个 DMA 通道,每个通道可独立配置传输方向、数据宽度、地址递增模式、优先级和循环模式,极大提升系统并发处理能力。