[综合信息] N32使用定时器TIM1注意事项

[复制链接]
10|2
flycamelaaa 发表于 2026-5-22 15:35 | 显示全部楼层 |阅读模式
一、最重要的:使能主输出(常见“踩坑点”)
高级定时器需要额外使能主输出,这是最容易被忽略的一步。

在使用TIM1输出PWM时,完成所有常规配置后,必须调用以下函数使能主输出:

c
TIM_PWM_Output_Enable(TIM1);   // 高级定时器专用
通用定时器(如TIM3)不需要这一步,但TIM1作为高级定时器必须有这个操作。

二、GPIO复用功能配置
2.1 正确配置GPIO模式
使用TIM1的PWM输出通道时,GPIO需要配置为复用推挽输出模式:

c
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;   // 复用推挽输出
不是普通的推挽输出(GPIO_MODE_OUT_PP),这一点需要注意。

2.2 正确选择AF复用编号
不同引脚对应的TIM1通道,AF编号可能不同。必须查阅对应芯片的用户手册中“引脚复用”章节确认具体值。

例如N32G003中:

PA8使用 TIM1_CH1 → GPIO_AF2_TIM1

PA7使用 TIM1_CH2 → GPIO_AF4_TIM1

同一个TIM1的不同通道可能使用不同的AF编号,不要凭经验假设。

c
// 示例:PA7配置为TIM1_CH2
GPIO_InitStructure.Pin = GPIO_PIN_7;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_TIM1;   // 确认具体型号的手册
三、时钟配置
3.1 TIM1时钟源配置
TIM1挂在APB2总线上,需要单独配置时钟源:

c
RCC_TIM1_Clock_Config(RCC_TIM1_CLKSRC_PCLK);   // 选择PCLK作为时钟源
RCC_APB_Peripheral_Clock_Enable(RCC_APB_PERIPH_TIM1);
3.2 使能AFIO时钟
使用引脚复用功能时,需要使能AFIO时钟:

c
RCC_APB_Peripheral_Clock_Enable(RCC_APB_PERIPH_AFIO);
四、互补PWM与死区配置(电机控制场景)
TIM1支持带死区时间的互补PWM输出,适用于H桥驱动和电机控制。

4.1 死区时间计算
死区时间通过 TIM_BDTRInitStruct.DeadTime 寄存器配置,计算公式与时基时钟(T_DTS)相关:

配置情况        死区时间范围
DTGN[7:5]=0xx        0 ~ 1176 ns
DTGN[7:5]=10x        1185 ~ 2352 ns
DTGN[7:5]=110        2370 ~ 4667 ns
DTGN[7:5]=111        4741 ~ 9334 ns
4.2 BDTR寄存器完整配置示例
c
TIM_BDTRInitType TIM_BDTRInitStruct;
TIM_BDTRInitStruct.OssrState = TIM_OSSR_STATE_ENABLE;
TIM_BDTRInitStruct.OssiState = TIM_OSSI_STATE_ENABLE;
TIM_BDTRInitStruct.LockLevel = TIM_LOCK_LEVEL_OFF;
TIM_BDTRInitStruct.DeadTime = 0xFF;      // 死区时间配置
TIM_BDTRInitStruct.Break = TIM_BREAK_IN_DISABLE;
TIM_BDTRInitStruct.BreakPolarity = TIM_BREAK_POLARITY_HIGH;
TIM_BDTRInitStruct.AutomaticOutput = TIM_AUTO_OUTPUT_ENABLE;
TIM_ConfigBkdt(TIM1, &TIM_BDTRInitStruct);
4.3 互补通道配置
使用互补输出时,需要同时配置OutputState和OutputNState:

c
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;     // 主通道使能
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;   // 互补通道使能
TIM_OCInitStructure.OcPolarity = TIM_OC_POLARITY_HIGH;         // 主通道极性
TIM_OCInitStructure.OcNPolarity = TIM_OCN_POLARITY_HIGH;       // 互补通道极性
五、定时器同步功能
TIM1可以作为主定时器,触发其他从定时器(如TIM3)工作。配置时需要注意:同步功能不支持动态修改连接关系,应在使能主定时器触发输出之前,先配置并使能从定时器。

c
// TIM1作为TIM3的预分频器配置步骤:
// 1. 设置TIM1_CTRL2.MMSEL='010',选择更新事件作为触发输出
// 2. 配置TIM3_SMCTRL.TSEL,连接TIM1的TRGO到TIM3
// 3. 配置TIM3的从模式
// 4. 启动TIM3
// 5. 启动TIM1
六、检查清单
如果TIM1输出PWM没有波形,按以下顺序检查:

序号        检查项
1        TIM1时钟是否使能(RCC_APB_PERIPH_TIM1)
2        AFIO时钟是否使能(RCC_APB_PERIPH_AFIO)
3        GPIO模式是否为复用推挽输出(GPIO_MODE_AF_PP)
4        GPIO_Alternate是否选择了正确的AF编号
5        是否调用了TIM_PWM_Output_Enable(TIM1) ← 最容易遗漏
6        引脚物理连接是否正确
七、不同型号间的差异提醒
不同N32系列芯片的TIM1特性可能存在差异,例如:

N32G003:TIM1通道与引脚的AF映射需查手册确认

N32G031:TIM1支持6个通道,通道1/2/3支持互补输出

N32L43x:TIM1和TIM8均支持互补PWM和死区功能

实际开发时,建议以对应型号的用户手册和数据手册为准。

评论

高级定时器TIM1  发表于 2026-5-22 16:37
tpgf 发表于 2026-5-22 16:37 | 显示全部楼层
TIM1作为高级定时器,通常挂载于APB2总线,而非通用定时器的APB1总线
您需要登录后才可以回帖 登录 | 注册

本版积分规则

982

主题

5823

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0