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 生成,产品信息请以官网为准。











