GD32F303VET6定时器各通道对应IO及重映射

该专题还在整理中。

GD32F303VET6这颗Cortex-M4内核的MCU,定时器资源非常丰富,但很多新手(甚至老手)第一次画板子时,最头疼的就是查表找IO映射。直接给你结论:高级定时器TIMER0/7的通道输出并非固定在某个引脚上,而是通过重映射功能在多个GPIO之间切换;通用定时器TIMER1/2/3/4的通道映射相对固定,但部分引脚也支持重映射。下面我把每个定时器的通道对应IO、重映射选项、以及AFIO配置要点一次性给你讲透,建议直接收藏。

一、先搞懂GD32的“重映射”机制(和STM32不完全一样)

GD32F303的定时器引脚映射逻辑上兼容STM32F103,但细节有差异。核心是AFIO(复用功能IO)寄存器组里的TIMERx_REMAP位段。你需要记住:重映射不是“随意选引脚”,而是芯片出厂定义好的几组固定组合,你只能在这些组合里选。

另外,GD32的定时器通道编号是TIMERx_CH0~CH3(对应STM32的CH1~CH4),别搞混了。下面所有表格里我直接写GD32的通道名。

二、高级定时器TIMER0(对应STM32的TIM1)

TIMER0是16位高级定时器,带互补输出和死区插入,常用于电机控制。它的通道映射有3种重映射模式,通过AFIO_CFG0寄存器的TIMER0_CFG位段(2位)选择。

映射模式 CH0 CH1 CH2 CH3 备注
默认(无重映射) PA8 PA9 PA10 PA11 最常用,引脚少时首选
部分重映射1 PA8 PA9 PA10 PA11 此模式CH3不变,实际与默认相同(部分型号无差异)
部分重映射2 PE9 PE10 PE11 PE12 适合PB口被占用时
完全重映射 PE9 PE10 PE11 PE12 与部分重映射2引脚一致

关键点:TIMER0的互补输出通道(CH0N/CH1N/CH2N)默认在PB13/PB14/PB15,重映射后变为PE8/PE10/PE12(注意PE10和CH1复用同一个引脚,需错开使用)。刹车输入BKIN默认在PB12,重映射后到PE15。

三、高级定时器TIMER7(对应STM32的TIM8)

TIMER7同样有互补输出,但映射选项和TIMER0不同。它只有2种映射模式,由AFIO_CFG0的TIMER7_CFG位段控制。

映射模式 CH0 CH1 CH2 CH3
默认 PC6 PC7 PC8 PC9
完全重映射 PE14 PE13 PE12 PE11

注意:TIMER7的互补输出CH0N/CH1N/CH2N在默认模式下是PA7/PB0/PB1,完全重映射后变为PE10/PE11/PE12(这里PE12既当CH3又当CH2N,实际使用时需检查数据手册的AFIO冲突说明)。

四、通用定时器TIMER1/2/3/4(对应STM32的TIM2/3/4/5)

这四个定时器都是16位通用定时器,没有互补输出。它们的映射分两类:TIMER1(TIM2)和TIMER2(TIM3)有部分重映射,TIMER3(TIM4)、TIMER4(TIM5)无重映射

4.1 TIMER1(32位定时器,对应TIM2)

映射模式 CH0 CH1 CH2 CH3
默认 PA0 PA1 PA2 PA3
部分重映射(仅CH2/CH3) PA0 PA1 PB10 PB11

这个重映射由AFIO_CFG0的TIMER1_CFG位段控制,置1即可。注意PA0~PA3同时也是ADC和DAC的引脚,用的时候要检查模拟功能是否冲突。

4.2 TIMER2(对应TIM3)

映射模式 CH0 CH1 CH2 CH3
默认 PA6 PA7 PB0 PB1
部分重映射 PB4 PB5 PB0 PB1

注意:TIMER2的部分重映射只改变CH0和CH1,CH2/CH3不变。PB4/PB5默认是JTAG的NJTRST和JTDI,如果你用了SWD调试而不关闭JTAG,这两个引脚会冲突,需要在代码里先关闭JTAG功能(GPIO_ConfigPinRemap(GPIO_REMAP_SWJ_JTAG_DISABLE))。

4.3 TIMER3和TIMER4(对应TIM4和TIM5)

这两个定时器没有任何重映射功能,引脚固定:

  • TIMER3(TIM4):CH0=PB6,CH1=PB7,CH2=PB8,CH3=PB9
  • TIMER4(TIM5):CH0=PA0,CH1=PA1,CH2=PA2,CH3=PA3(和TIMER1默认模式完全一样!)

这里有个大坑:TIMER1和TIMER4的默认通道都在PA0~PA3上,如果你同时使用这两个定时器,必须把其中一个重映射走,否则引脚冲突。

五、基础定时器TIMER5/6(对应TIM6/7)

这两个是纯定时器,没有外部IO引脚,只能内部计数,别浪费时间找映射了。

六、代码配置要点(以TIMER0重映射为例)

实际写代码时,顺序很重要。先开启AFIO时钟,再配置重映射,最后初始化GPIO和定时器。下面给个标准片段(使用标准外设库):

// 开启AFIO时钟
rcu_periph_clock_enable(RCU_AFIO);
// 选择TIMER0完全重映射(PE9~PE12)
gpio_pin_remap_config(GPIO_TIMER0_FULL_REMAP, ENABLE);
// 配置PE9为复用推挽输出
gpio_init(GPIOE, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_9 | GPIO_PIN_10 | GPIO_PIN_11 | GPIO_PIN_12);
// 然后初始化TIMER0结构体...

如果你用的是GD32的固件库,注意函数名是gpio_pin_remap_config而不是STM32的GPIO_PinRemapConfig。另外,重映射必须在定时器使能之前完成,否则不生效。

七、实战避坑指南(我踩过的坑)

  • 查手册别只看引脚定义表:GD32的数据手册里,GPIO复用功能表(AFIO mapping)和定时器章节是分开的,你得交叉看。推荐直接看GD32F303用户手册的“Table 4. Alternate function mapping”那张大表。
  • JTAG/SWD引脚冲突:上面提到的TIMER2重映射到PB4/PB5,如果你用J-Link的SWD模式,PB3(JTDO)和PB4(NJTRST)会被占用。解决办法是禁用JTAG保留SWD:gpio_pin_remap_config(GPIO_SWJ_SWDPENABLE_REMAP, ENABLE);(不同库函数名略有差异)。
  • 同一引脚多个外设功能:比如PE12同时是TIMER7的CH3、TIMER0的CH2N、TIMER7完全重映射的CH2N。这种复用关系在芯片内部有仲裁,但物理上只能选一个外设的复用功能。用CubeMX(如果是STM32)或GD32的图形配置工具最好,但手写代码就得自己注意。
  • GD32F303VET6是100脚封装,引脚多,但很多重映射后的引脚(比如PE口)在100脚封装上都有引出,如果你用的是48脚或64脚的GD32F303CBT6等型号,部分重映射引脚可能不存在,选型时要核对封装引脚数。

八、一张图总结所有定时器映射(VET6可用引脚)

定时器 默认通道引脚 重映射后引脚 重映射控制位
TIMER0 PA8/PA9/PA10/PA11 PE9/PE10/PE11/PE12 TIMER0_CFG[1:0]
TIMER1 PA0/PA1/PA2/PA3 PA0/PA1/PB10/PB11 TIMER1_CFG
TIMER2 PA6/PA7/PB0/PB1 PB4/PB5/PB0/PB1 TIMER2_CFG
TIMER3 PB6/PB7/PB8/PB9
TIMER4 PA0/PA1/PA2/PA3
TIMER7 PC6/PC7/PC8/PC9 PE14/PE13/PE12/PE11 TIMER7_CFG

最后提醒一句:如果你用的是GD32F303系列的其他型号(比如CBT6、RBT6),引脚数量不同,重映射表可能删减了部分选项,务必以你手里芯片对应的数据手册(Datasheet)为准,而不是参考手册(Reference Manual)。国产芯片的文档有时候更新不及时,官网下载的最新版PDF才靠谱。

相关问题

1. GD32F303和STM32F103的定时器重映射代码能直接通用吗?
基本可以,但要注意库函数名不同(gpio_pin_remap_config vs GPIO_PinRemapConfig),且GD32的TIMER编号比STM32少1(GD的TIMER0=STM32的TIM1),寄存器地址不一样,直接搬寄存器代码会出错。

2. 同时使用TIMER1和TIMER4但引脚冲突怎么办?
把TIMER1重映射到PA0/PA1/PB10/PB11,或者把TIMER4的通道挪到其他定时器上(如果功能允许)。实在不行,用TIMER3(PB6~PB9)替代其中一个。

3. 为什么我配置了重映射但引脚没输出波形?
先检查AFIO时钟是否开启(RCU_AFIO),再确认重映射函数参数是否写对了(有的库要传ENABLE/DISABLE)。另外,检查GPIO模式是否为复用推挽(GPIO_MODE_AF_PP),且定时器通道已使能输出。

4. GD32F303的TIMER0能做6步PWM互补输出吗?
可以,CH0~CH2输出PWM,CH0N~CH2N输出互补波形,配合刹车输入BKIN实现电机控制。但注意重映射后互补引脚会变,比如完全重映射后CH2N在PE12,此时PE12不能再当普通IO用。

5. 有没有GD32的图形化引脚配置工具?
兆易创新官方有GD32 MCU选型工具GD32F3xx的固件库例程,但图形化配置不如STM32CubeMX成熟。第三方工具如SEGGER Embedded Studio的引脚视图可以辅助查看,但最终还是要对着数据手册核对。

内容由 AI 生成,产品信息请以官网为准。