5.27 TIM 使用说明
本章说明 N32H49x 标准外设库中 TIM 驱动(n32h49x_tim.h / n32h49x_tim.c)的文件组成、153 个公开函数,以及 TIM 分类下的 21 个示例。内容覆盖高级定时器 ATIM、通用定时器 GTIM 与基本定时器 BTIM 的复位与初始化、时钟源与从模式、输出比较与 PWM、输入捕获与 PWM 输入、刹车与死区、DMA 传输、编码器接口以及主从定时器同步。寄存器位定义、时基单元、外部时钟与编码器接口、刹车与输出模式请配合用户手册第 9~13 章阅读。
5.27.1 相关文件
| 相对路径 | 作用 |
|---|---|
firmware/n32h49x_std_periph_driver/inc/n32h49x_tim.h |
定义 TIM_TimeBaseInitType、OCInitType、TIM_ICInitType、TIM_BDTRInitType、TIM_FiltInitType 等结构体与计数模式、时钟分频、输出比较模式、输入捕获选择、刹车源、触发源等宏,并按复位与初始化、通道初始化、刹车、时钟与从模式、输出、输入、中断等区段声明 153 个公开函数 |
firmware/n32h49x_std_periph_driver/src/n32h49x_tim.c |
实现上述 153 个函数:时基与各通道初始化、时钟源与从模式、输出比较与 PWM、输入捕获与 PWM 输入、刹车与死区、DMA 与突发传输、中断与标志状态 |
projects/n32h49x_EVAL/examples/TIM/ |
TIM 示例根目录,21 个示例:TimeBase、TimeBasic_ATIM1/BTIM1/GTIM2/GTIM8、6Steps、PWM_Output、PWM_Input、ComplementarySignals、ATIM1_Synchro、Cascade_Synchro、Parallel_Synchro、ExtTrigger_Synchro、OCActive、OCInactive、OCToggle、OnePulse、InputCapture、DMA、DMABurst、Quadrature_Output。 |
projects/n32h49x_EVAL/examples/TIM/TimeBase/ |
该示例的工程目录组成:MDK-ARM/、EWARM/、inc/、src/、readme.txt |
firmware/CMSIS/device/n32h49x.h |
器件寄存器与外设实例定义,各示例通过 inc/main.h 间接引用 |
5.27.2 API 参考
以下 153 个公开函数按 n32h49x_tim.h 的声明顺序分为 19 组;每个条目给出功能摘要与 n32h49x_tim.c 中该函数正上方的注释原文。
复位与初始化
TIM_DeInit、TIM_InitTimeBase、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_InitOc5、TIM_InitOc6
输入捕获与 PWM 输入初始化
TIM_ICInit、TIM_ConfigPwmIc
刹车与死区配置
TIM_ConfigBkdt、TIM_BreakFiltConfig、TIM_BreakFiltEnable、TIM_Break2FiltEnable、TIM_Break2FiltConfig、TIM_BreakInputSourceEnable、TIM_Break2InputSourceEnable、TIM_BidirectionDisarm、TIM_BidirectionRearm、TIM_Bidirection2Disarm、TIM_Bidirection2Rearm
结构体默认值
TIM_InitTimBaseStruct、TIM_InitOcStruct、TIM_InitIcStruct、TIM_InitBkdtStruct
使能、中断、DMA 与事件
TIM_Enable、TIM_EnableCtrlPwmOutputs、TIM_ConfigInt、TIM_GenerateEvent、TIM_ConfigDma、TIM_EnableDma
时钟源与从模式
TIM_ConfigInternalClk、TIM_ConfigInternalTrigToExt、TIM_ConfigExtTrigAsClk、TIM_ConfigExtClkMode1、TIM_ConfigExtClkMode2、TIM_ConfigPrescaler、TIM_ConfigCntMode、TIM_ConfigEncoderInterface
强制输出与自动重载预装载
TIM_ConfigForcedOc1、TIM_ConfigForcedOc2、TIM_ConfigForcedOc3、TIM_ConfigForcedOc4、TIM_ConfigForcedOc5、TIM_ConfigForcedOc6、TIM_ConfigArPreload
换相事件、捕获比较 DMA 与预装载控制
TIM_SelectComEvt、TIM_SelectCapCmpDmaSrc、TIM_EnableCapCmpPreloadControl
输出比较预装载
TIM_ConfigOc1Preload、TIM_ConfigOc2Preload、TIM_ConfigOc3Preload、TIM_ConfigOc4Preload、TIM_ConfigOc5Preload、TIM_ConfigOc6Preload、TIM_ConfigOc7Preload、TIM_ConfigOc8Preload、TIM_ConfigOc9Preload
输出比较快速使能
TIM_ConfigOc1Fast、TIM_ConfigOc2Fast、TIM_ConfigOc3Fast、TIM_ConfigOc4Fast、TIM_ConfigOc5Fast、TIM_ConfigOc6Fast
OCREF 清除
TIM_ClrOc1Ref、TIM_ClrOc2Ref、TIM_ClrOc3Ref、TIM_ClrOc4Ref、TIM_ClrOc5Ref、TIM_ClrOc6Ref、TIM_ClrOcRefInputSource
输出极性
TIM_ConfigOc1Polarity、TIM_ConfigOc1NPolarity、TIM_ConfigOc2Polarity、TIM_ConfigOc2NPolarity、TIM_ConfigOc3Polarity、TIM_ConfigOc3NPolarity、TIM_ConfigOc4Polarity、TIM_ConfigOc4NPolarity、TIM_ConfigOc5Polarity、TIM_ConfigOc6Polarity
通道使能与输出比较模式
TIM_EnableCapCmpCh、TIM_EnableCapCmpChN、TIM_SelectOcMode、TIM_EnableUpdateEvt
更新事件、单脉冲、从模式与主从模式
TIM_ConfigUpdateEvt、TIM_ConfigUpdateRequestIntSrc、TIM_SelectHallSensor、TIM_SelectOnePulseMode、TIM_SelectOutputTrig、TIM_SelectOutputTrig2、TIM_SelectSlaveMode、TIM_SelectMasterSlaveMode
计数器与比较值设置
TIM_SetCnt、TIM_SetAutoReload、TIM_SetCmp1、TIM_SetCmp2、TIM_SetCmp3、TIM_SetCmp4、TIM_SetCmp5、TIM_SetCmp6、TIM_SetCmp7、TIM_SetCmp8、TIM_SetCmp9、TIM_SetCmp1D、TIM_SetCmp2D、TIM_SetCmp3D、TIM_SetCmp4D
输入通道、输入捕获预分频与触发配置
ConfigTI1、ConfigTI2、ConfigTI3、ConfigTI4、TIM_SetInCap1Prescaler、TIM_SetInCap2Prescaler、TIM_SetInCap3Prescaler、TIM_SetInCap4Prescaler、TIM_SelectInputTrig、TIM_ConfigExtTrig、TIM_SelectETRInputSource、TIM_SetClkDiv
捕获值读取
TIM_GetCap1、TIM_GetCap2、TIM_GetCap3、TIM_GetCap4、TIM_GetCap5、TIM_GetCap6、TIM_GetCap7、TIM_GetCap8、TIM_GetCap9、TIM_GetCap1D、TIM_GetCap2D、TIM_GetCap3D、TIM_GetCap4D
计数器与状态读取
TIM_GetCnt、TIM_GetPrescaler、TIM_GetAutoReload、TIM_GetCCENStatus、TIM_GetFlagStatus、TIM_ClearFlag、TIM_GetIntStatus、TIM_ClrIntPendingBit
中央对齐、非对称、ADC 触发与通道滤波
TIM_SelectCenterAlignTrig、TIM_AsymmetricEnable、TIM_OCxRefTriggerADC、TIM_IC1FiltConfig、TIM_IC2FiltConfig、TIM_IC3FiltConfig、TIM_IC4FiltConfig、TIM_IC1FiltEnable、TIM_IC2FiltEnable、TIM_IC3FiltEnable、TIM_IC4FiltEnable、TIM_GetFiltStatus
void TIM_DeInit(TIM_Module* TIMx)将 TIMx 外设寄存器复位为默认值。
name TIM_DeInit
fun Deinitializes the TIMx registers.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
return none
void TIM_InitTimeBase(TIM_Module* TIMx, TIM_TimeBaseInitType* TIM_TimeBaseInitStruct)初始化 TIMx 的时基单元。
name TIM_InitTimeBase
fun Initializes the TIMx time base unit.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_TimeBaseInitStruct: refer to the definition of TIM_TimeBaseInitType
- Prescaler
* 0x0000 ~ 0xFFFF
- CounterMode
* TIM_CNT_MODE_UP
* TIM_CNT_MODE_DOWN
* TIM_CNT_MODE_CENTER_ALIGN1
* TIM_CNT_MODE_CENTER_ALIGN2
* TIM_CNT_MODE_CENTER_ALIGN3
- Period
* GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
- ClkDiv
* TIM_CLK_DIV1
* TIM_CLK_DIV2
* TIM_CLK_DIV4
- RepetCnt
* 0x00 ~ 0xFF
- CapCh1Sel
* TIM_CAPCH1SEL_0
* TIM_CAPCH1SEL_5
* TIM_CAPCH1SEL_6
* TIM_CAPCH1SEL_7
- CapCh2Sel
* TIM_CAPCH2SEL_0
* TIM_CAPCH2SEL_1
* TIM_CAPCH2SEL_4
* TIM_CAPCH2SEL_TIMXCAPLSE
- CapCh3Sel
* TIM_CAPCH3SEL_0
* TIM_CAPCH3SEL_1
* TIM_CAPCH3SEL_TIMXCAPLSI
- CapCh4Sel
* TIM_CAPCH4SEL_0
* TIM_CAPCH4SEL_1
* TIM_CAPCH4SEL_2
* TIM_CAPCH4SEL_TIMXCAPHSEDIV128
- EtrOrClr
* TIM_ETRSEL
* TIM_CLRSEL
- CapEtrClrSel
* TIM_CAPETRSEL_0
* TIM_CAPETRSEL_8
* TIM_CAPETRSEL_10
* TIM_CAPETRSEL_11
* TIM_CAPETRSEL_12
* TIM_CAPETRSEL_13
return none
void TIM_InitOc1(TIM_Module* TIMx, OCInitType* TIM_OCInitStruct)初始化 TIMx 的通道 1。
name TIM_InitOc1
fun Initializes the TIMx Channel 1.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
* TIM_OCMODE_OPMOD_RETRIG1
* TIM_OCMODE_OPMOD_RETRIG2
* TIM_OCMODE_COMBI_PWM1
* TIM_OCMODE_COMBI_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- OutputNState
* TIM_OUTPUT_NSTATE_DISABLE
* TIM_OUTPUT_NSTATE_ENABLE
- Pulse
* GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCNPolarity
* TIM_OCN_POLARITY_HIGH
* TIM_OCN_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
- OCNIdleState
* TIM_OCN_IDLE_STATE_SET
* TIM_OCN_IDLE_STATE_RESET
return none
void TIM_InitOc2(TIM_Module* TIMx, OCInitType* TIM_OCInitStruct)初始化 TIMx 的通道 2。
name TIM_InitOc2
fun Initializes the TIMx Channel 2.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
* TIM_OCMODE_OPMOD_RETRIG1
* TIM_OCMODE_OPMOD_RETRIG2
* TIM_OCMODE_COMBI_PWM1
* TIM_OCMODE_COMBI_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- OutputNState
* TIM_OUTPUT_NSTATE_DISABLE
* TIM_OUTPUT_NSTATE_ENABLE
- Pulse
* GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCNPolarity
* TIM_OCN_POLARITY_HIGH
* TIM_OCN_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
- OCNIdleState
* TIM_OCN_IDLE_STATE_SET
* TIM_OCN_IDLE_STATE_RESET
return none
void TIM_InitOc3(TIM_Module* TIMx, OCInitType* TIM_OCInitStruct)初始化 TIMx 的通道 3。
name TIM_InitOc3
fun Initializes the TIMx Channel 3.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
* TIM_OCMODE_OPMOD_RETRIG1
* TIM_OCMODE_OPMOD_RETRIG2
* TIM_OCMODE_COMBI_PWM1
* TIM_OCMODE_COMBI_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- OutputNState
* TIM_OUTPUT_NSTATE_DISABLE
* TIM_OUTPUT_NSTATE_ENABLE
- Pulse
* GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCNPolarity
* TIM_OCN_POLARITY_HIGH
* TIM_OCN_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
- OCNIdleState
* TIM_OCN_IDLE_STATE_SET
* TIM_OCN_IDLE_STATE_RESET
return none
void TIM_InitOc4(TIM_Module* TIMx, OCInitType* TIM_OCInitStruct)初始化 TIMx 的通道 4。
name TIM_InitOc4
fun Initializes the TIMx Channel 4.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
* TIM_OCMODE_OPMOD_RETRIG1
* TIM_OCMODE_OPMOD_RETRIG2
* TIM_OCMODE_COMBI_PWM1
* TIM_OCMODE_COMBI_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- OutputNState
* TIM_OUTPUT_NSTATE_DISABLE
* TIM_OUTPUT_NSTATE_ENABLE
- Pulse
* GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCNPolarity
* TIM_OCN_POLARITY_HIGH
* TIM_OCN_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
- OCNIdleState
* TIM_OCN_IDLE_STATE_SET
* TIM_OCN_IDLE_STATE_RESET
return none
void TIM_InitOc5(TIM_Module* TIMx, OCInitType* TIM_OCInitStruct)初始化 TIMx 的通道 5。
name TIM_InitOc5
fun Initializes the TIMx Channel 5.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- Pulse
* 0x0000 ~ 0xFFFF
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
return none
void TIM_InitOc6(TIM_Module* TIMx, OCInitType* TIM_OCInitStruct)初始化 TIMx 的通道 6。
name TIM_InitOc6
fun Initializes the TIMx Channel 6.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- Pulse
* 0x0000 ~ 0xFFFF
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
return none
void TIM_ICInit(TIM_Module* TIMx, TIM_ICInitType* TIM_ICInitStruct)根据 TIM_ICInitStruct 中指定的参数初始化 TIM 外设。
name TIM_ICInit
fun Initializes the TIM peripheral according to the specified
parameters in the TIM_ICInitStruct.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ICInitStruct: refer to the definition of TIM_ICInitType
- Channel
* TIM_CH_1
* TIM_CH_2
* TIM_CH_3
* TIM_CH_4
- ICPolarity
* TIM_IC_POLARITY_RISING
* TIM_IC_POLARITY_FALLING
- ICSelection
* TIM_IC_SELECTION_DIRECTTI
* TIM_IC_SELECTION_INDIRECTTI
* TIM_IC_SELECTION_TRC
- ICPrescaler
* TIM_IC_PSC_DIV1
* TIM_IC_PSC_DIV2
* TIM_IC_PSC_DIV4
* TIM_IC_PSC_DIV8
- ICFilter
* ICFilter can be a number between 0x0 and 0xF
return none
void TIM_ConfigPwmIc(TIM_Module* TIMx, TIM_ICInitType* TIM_ICInitStruct)根据 TIM_ICInitStruct 中指定的参数配置 TIM 外设,以测量外部 PWM 信号。
name TIM_ConfigPwmIc
fun Configures the TIM peripheral according to the specified
parameters in the TIM_ICInitStruct to measure an external PWM signal.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ICInitStruct: refer to the definition of TIM_ICInitType
- Channel
* TIM_CH_1
* TIM_CH_2
- ICPolarity
* TIM_IC_POLARITY_RISING
* TIM_IC_POLARITY_FALLING
- ICSelection
* TIM_IC_SELECTION_DIRECTTI
* TIM_IC_SELECTION_INDIRECTTI
- ICPrescaler
* TIM_IC_PSC_DIV1
* TIM_IC_PSC_DIV2
* TIM_IC_PSC_DIV4
* TIM_IC_PSC_DIV8
- ICFilter
* ICFilter can be a number between 0x0 and 0xF
return none
void TIM_ConfigBkdt(TIM_Module* TIMx, TIM_BDTRInitType* TIM_BDTRInitStruct)配置刹车功能、死区时间、锁定级别、OSSI、OSSR 状态以及 AOE(自动输出使能)。
name TIM_ConfigBkdt
fun Configures the: Break feature, dead time, Lock level, the OSSI,
the OSSR State and the AOE(automatic output enable).
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_BDTRInitStruct: refer to the definition of TIM_BDTRInitType
- OSSRState
* TIM_OSSR_STATE_ENABLE
* TIM_OSSR_STATE_DISABLE
- OSSIState
* TIM_OSSI_STATE_ENABLE
* TIM_OSSI_STATE_DISABLE
- LOCKLevel
* TIM_LOCK_LEVEL_OFF
* TIM_LOCK_LEVEL_1
* TIM_LOCK_LEVEL_2
* TIM_LOCK_LEVEL_3
- DeadTime
* DeadTime can be a number between 0x00 and 0xFF
- Break
* TIM_BREAK_IN_ENABLE
* TIM_BREAK_IN_DISABLE
- BreakPolarity
* TIM_BREAK_POLARITY_LOW
* TIM_BREAK_POLARITY_HIGH
- Bidirection
* TIM_BREAK_BID_ENABLE
* TIM_BREAK_BID_DISABLE
- AutomaticOutput
* TIM_AUTO_OUTPUT_ENABLE
* TIM_AUTO_OUTPUT_DISABLE
- Break2
* TIM_BREAK2_IN_ENABLE
* TIM_BREAK2_IN_DISABLE
- Break2Polarity
* TIM_BREAK2_POLARITY_LOW
* TIM_BREAK2_POLARITY_HIGH
- Bidirection2
* TIM_BREAK2_BID_ENABLE
* TIM_BREAK2_BID_DISABLE
return none
void TIM_BreakFiltConfig(TIM_Module* TIMx, TIM_FiltInitType* TIM_FiltInitStruct)配置刹车输入的滤波器。
name TIM_BreakFiltConfig
fun Config the filter of break input.
param TIMx:
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_FiltInitStruct:
- refer to the definition of TIM_FiltInitType
return none
void TIM_BreakFiltEnable(TIM_Module* TIMx,FunctionalState Cmd)使能或禁用刹车输入的滤波器。
name TIM_BreakFiltEnable
fun Enable or disable the filter of break input.
param TIMx:
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_Break2FiltEnable(TIM_Module* TIMx,FunctionalState Cmd)使能或禁用刹车2输入的滤波器。
name TIM_Break2FiltEnable
fun Enable or disable the filter of break2 input.
param TIMx:
- ATIM1
- ATIM2
- ATIM3
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_Break2FiltConfig(TIM_Module* TIMx, TIM_FiltInitType* TIM_FiltInitStruct)配置刹车2输入的滤波器。
name TIM_Break2FiltConfig
fun Config the filter of break2 input.
param TIMx:
- ATIM1
- ATIM2
- ATIM3
param TIM_FiltInitStruct:
- refer to the definition of TIM_FiltInitType
return none
void TIM_BreakInputSourceEnable(TIM_Module* TIMx, uint32_t Source, uint32_t Polarity, FunctionalState Cmd)使能或禁用刹车输入源,并设置刹车输入源的极性。
name TIM_BreakInputSourceEnable
fun Enable or disable the break input source , and set the polarity of the break input source.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Source
- TIM_BREAK_LOCKUP
- TIM_BREAK_PVD
- TIM_BREAK_SMPAR
- TIM_BREAK_FLECC
- TIM_BREAK_SMECC
- TIM_BREAK_IOM
- TIM_BREAK_DSMU0
- TIM_BREAK_DSMU1
- TIM_BREAK_DSMU2
- TIM_BREAK_DSMU3
param Polarity
- TIM_BREAK_SOURCE_POLARITY_INVERT
- TIM_BREAK_SOURCE_POLARITY_NONINVERT
param Cmd
- ENABLE
- DISABLE
return none
void TIM_Break2InputSourceEnable(TIM_Module* TIMx, uint32_t Source, uint32_t Polarity, FunctionalState Cmd)使能或禁用刹车2输入源,并设置刹车2输入源的极性。
name TIM_Break2InputSourceEnable
fun Enable or disable the break2 input source , and set the polarity of the break2 input source.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param Source
- TIM_BREAK2_IOM
- TIM_BREAK2_DSMU0
- TIM_BREAK2_DSMU1
- TIM_BREAK2_DSMU2
- TIM_BREAK2_DSMU3
param Polarity
- TIM_BREAK2_SOURCE_POLARITY_INVERT
- TIM_BREAK2_SOURCE_POLARITY_NONINVERT
param Cmd
- ENABLE
- DISABLE
return none
void TIM_BidirectionDisarm(TIM_Module* TIMx)解除刹车的双向功能。
name TIM_BidirectionDisarm
fun Disarm bidirection of break.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
return none
void TIM_BidirectionRearm(TIM_Module* TIMx)重新使能刹车的双向功能。
name TIM_BidirectionRearm
fun Rearm bidirection of break.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
return none
void TIM_Bidirection2Disarm(TIM_Module* TIMx)解除刹车2的双向功能。
name TIM_Bidirection2Disarm
fun Disarm bidirection of break2.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return none
void TIM_Bidirection2Rearm(TIM_Module* TIMx)重新使能刹车2的双向功能。
name TIM_Bidirection2Rearm
fun Rearm bidirection of break2.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return none
void TIM_InitTimBaseStruct(TIM_TimeBaseInitType* TIM_TimeBaseInitStruct)将 TIM_TimeBaseInitStruct 的每个成员填充为默认值。
name TIM_InitTimBaseStruct
fun Fills each TIM_TimeBaseInitStruct member with its default value.
param TIM_TimeBaseInitStruct: refer to the definition of TIM_TimeBaseInitType
- Prescaler
* 0x0000 ~ 0xFFFF
- CounterMode
* TIM_CNT_MODE_UP
* TIM_CNT_MODE_DOWN
* TIM_CNT_MODE_CENTER_ALIGN1
* TIM_CNT_MODE_CENTER_ALIGN2
* TIM_CNT_MODE_CENTER_ALIGN3
- Period
* GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
- ClkDiv
* TIM_CLK_DIV1
* TIM_CLK_DIV2
* TIM_CLK_DIV4
- RepetCnt
* 0x00 ~ 0xFF
- CapCh1Sel
* TIM_CAPCH1SEL_0
* TIM_CAPCH1SEL_5
* TIM_CAPCH1SEL_6
* TIM_CAPCH1SEL_7
- CapCh2Sel
* TIM_CAPCH2SEL_0
* TIM_CAPCH2SEL_1
* TIM_CAPCH2SEL_4
* TIM_CAPCH2SEL_TIMXCAPLSE
- CapCh3Sel
* TIM_CAPCH3SEL_0
* TIM_CAPCH3SEL_1
* TIM_CAPCH3SEL_TIMXCAPLSI
- CapCh4Sel
* TIM_CAPCH4SEL_0
* TIM_CAPCH4SEL_1
* TIM_CAPCH4SEL_2
* TIM_CAPCH4SEL_TIMXCAPHSEDIV128
- EtrOrClr
* TIM_ETRSEL
* TIM_CLRSEL
- CapEtrClrSel
* TIM_CAPETRSEL_0
* TIM_CAPETRSEL_8
* TIM_CAPETRSEL_10
* TIM_CAPETRSEL_11
* TIM_CAPETRSEL_12
* TIM_CAPETRSEL_13
return none
void TIM_InitOcStruct(OCInitType* TIM_OCInitStruct)将 TIM_OCInitStruct 的每个成员填充为默认值。
name TIM_InitOcStruct
fun Fills each TIM_OCInitStruct member with its default value.
param TIM_OCInitStruct: refer to the definition of OCInitType
- OCMode
* TIM_OCMODE_TIMING
* TIM_OCMODE_ACTIVE
* TIM_OCMODE_INACTIVE
* TIM_OCMODE_TOGGLE
* TIM_FORCED_ACTION_INACTIVE
* TIM_FORCED_ACTION_ACTIVE
* TIM_OCMODE_PWM1
* TIM_OCMODE_PWM2
* TIM_OCMODE_OPMOD_RETRIG1
* TIM_OCMODE_OPMOD_RETRIG2
* TIM_OCMODE_COMBI_PWM1
* TIM_OCMODE_COMBI_PWM2
- OutputState
* TIM_OUTPUT_STATE_DISABLE
* TIM_OUTPUT_STATE_ENABLE
- OutputNState
* TIM_OUTPUT_NSTATE_DISABLE
* TIM_OUTPUT_NSTATE_ENABLE
- Pulse
* 0x0000 ~ 0xFFFF
- OCPolarity
* TIM_OC_POLARITY_HIGH
* TIM_OC_POLARITY_LOW
- OCNPolarity
* TIM_OCN_POLARITY_HIGH
* TIM_OCN_POLARITY_LOW
- OCIdleState
* TIM_OC_IDLE_STATE_SET
* TIM_OC_IDLE_STATE_RESET
- OCNIdleState
* TIM_OCN_IDLE_STATE_SET
* TIM_OCN_IDLE_STATE_RESET
return none
void TIM_InitIcStruct(TIM_ICInitType* TIM_ICInitStruct)将 TIM_ICInitStruct 的每个成员填充为默认值。
name TIM_InitIcStruct
fun Fills each TIM_ICInitStruct member with its default value.
param TIM_ICInitStruct: refer to the definition of TIM_ICInitType
- Channel
* TIM_CH_1
* TIM_CH_2
* TIM_CH_3
* TIM_CH_4
- ICPolarity
* TIM_IC_POLARITY_RISING
* TIM_IC_POLARITY_FALLING
- ICSelection
* TIM_IC_SELECTION_DIRECTTI
* TIM_IC_SELECTION_INDIRECTTI
* TIM_IC_SELECTION_TRC
- ICPrescaler
* TIM_IC_PSC_DIV1
* TIM_IC_PSC_DIV2
* TIM_IC_PSC_DIV4
* TIM_IC_PSC_DIV8
- ICFilter
* ICFilter can be a number between 0x0 and 0xF
return none
void TIM_InitBkdtStruct(TIM_BDTRInitType* TIM_BDTRInitStruct)将 TIM_BDTRInitStruct 的每个成员填充为默认值。
name TIM_InitBkdtStruct
fun Fills each TIM_BDTRInitStruct member with its default value.
param TIM_BDTRInitStruct: refer to the definition of TIM_BDTRInitType
- OSSRState
* TIM_OSSR_STATE_ENABLE
* TIM_OSSR_STATE_DISABLE
- OSSIState
* TIM_OSSI_STATE_ENABLE
* TIM_OSSI_STATE_DISABLE
- LOCKLevel
* TIM_LOCK_LEVEL_OFF
* TIM_LOCK_LEVEL_1
* TIM_LOCK_LEVEL_2
* TIM_LOCK_LEVEL_3
- DeadTime
* DeadTime can be a number between 0x00 and 0xFF
- Break
* TIM_BREAK_IN_ENABLE
* TIM_BREAK_BID_DISABLE
- BreakPolarity
* TIM_BREAK_POLARITY_LOW
* TIM_BREAK_POLARITY_HIGH
- Bidirection
* TIM_BREAK_BID_ENABLE
* TIM_BREAK_BID_DISABLE
- AutomaticOutput
* TIM_AUTO_OUTPUT_ENABLE
* TIM_AUTO_OUTPUT_DISABLE
- Break2
* TIM_BREAK2_IN_ENABLE
* TIM_BREAK2_IN_DISABLE
- Break2Polarity
* TIM_BREAK2_POLARITY_LOW
* TIM_BREAK2_POLARITY_HIGH
- Bidirection2
* TIM_BREAK2_BID_ENABLE
* TIM_BREAK2_BID_DISABLE
return none
void TIM_Enable(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用指定的 TIM 外设。
name TIM_Enable
fun Enables or disables the specified TIM peripheral.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_EnableCtrlPwmOutputs(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用 TIM 外设的主输出。
name TIM_EnableCtrlPwmOutputs
fun Enables or disables the TIM peripheral Main Outputs.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_ConfigInt(TIM_Module* TIMx, uint32_t TIM_IT, FunctionalState Cmd)使能或禁用指定的 TIM 中断。
name TIM_ConfigInt
fun Enables or disables the specified TIM interrupts.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_IT:
- TIM_INT_CC1
- TIM_INT_CC2
- TIM_INT_CC3
- TIM_INT_CC4
- TIM_INT_CC5
- TIM_INT_CC6
- TIM_INT_CC7
- TIM_INT_CC8
- TIM_INT_CC9
- TIM_INT_UPDATE
- TIM_INT_TRIG
- TIM_INT_BREAK
- TIM_INT_COM
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_GenerateEvent(TIM_Module* TIMx, uint32_t TIM_EventSource)配置由软件产生的 TIMx 事件。
name TIM_GenerateEvent
fun Configures the TIMx event to be generate by software.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_EventSource:
- TIM_EVT_SRC_CC1
- TIM_EVT_SRC_CC2
- TIM_EVT_SRC_CC3
- TIM_EVT_SRC_CC4
- TIM_EVT_SRC_UPDATE
- TIM_EVT_SRC_COM
- TIM_EVT_SRC_TRIG
- TIM_EVT_SRC_BREAK
- TIM_EVT_SRC_BREAK2
return none
void TIM_ConfigDma(TIM_Module* TIMx, uint32_t TIM_DMABase, uint32_t TIM_DMABurstLength)配置 TIMx 的 DMA 接口。
name TIM_ConfigDma
fun Configures the TIMx's DMA interface.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_DMABase:
- TIM_DMABASE_CTRL1
- TIM_DMABASE_CTRL2
- TIM_DMABASE_STS
- TIM_DMABASE_EVTGEN
- TIM_DMABASE_SMCTRL
- TIM_DMABASE_DMAINTEN
- TIM_DMABASE_CAPCMPMOD1
- TIM_DMABASE_CAPCMPMOD2
- TIM_DMABASE_CAPCMPMOD3
- TIM_DMABASE_CAPCMPEN
- TIM_DMABASE_CAPCMPDAT1
- TIM_DMABASE_CAPCMPDAT2
- TIM_DMABASE_CAPCMPDAT3
- TIM_DMABASE_CAPCMPDAT4
- TIM_DMABASE_CAPCMPDAT5
- TIM_DMABASE_CAPCMPDAT6
- TIM_DMABASE_PSC
- TIM_DMABASE_AR
- TIM_DMABASE_CNT
- TIM_DMABASE_REPCNT
- TIM_DMABASE_BKDT
- TIM_DMABASE_CAPCMPDAT7
- TIM_DMABASE_CAPCMPDAT8
- TIM_DMABASE_CAPCMPDAT9
- TIM_DMABASE_BKFR
- TIM_DMABASE_C1FILT
- TIM_DMABASE_C2FILT
- TIM_DMABASE_C3FILT
- TIM_DMABASE_C4FILT
- TIM_DMABASE_FILTO
- TIM_DMABASE_INSEL
- TIM_DMABASE_AF1
- TIM_DMABASE_AF2
- TIM_DMABASE_BKFR2
- TIM_DMABASE_SLIDFPSC
param TIM_DMABurstLength:
- This parameter can be one value between:
TIM_DMABURST_LENGTH_1TRANSFER and TIM_DMABURST_LENGTH_35TRANSFERS.
return none
void TIM_EnableDma(TIM_Module* TIMx, uint32_t TIM_DMASource, FunctionalState Cmd)使能或禁用 TIMx 的 DMA 请求。
name TIM_EnableDma
fun Enables or disables the TIMx's DMA Requests.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_DMASource:
- TIM_DMA_CC1
- TIM_DMA_CC2
- TIM_DMA_CC3
- TIM_DMA_CC4
- TIM_DMA_UPDATE
- TIM_DMA_COM
- TIM_DMA_TRIG
param Cmd:
- DISABLE
- ENABLE
return none
void TIM_ConfigInternalClk(TIM_Module* TIMx)配置 TIMx 的内部时钟。
name TIM_ConfigInternalClk
fun Configures the TIMx internal Clock
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
return none
void TIM_ConfigInternalTrigToExt(TIM_Module* TIMx, uint32_t TIM_InputTriggerSource)将 TIMx 的内部触发配置为外部时钟。
name TIM_ConfigInternalTrigToExt
fun Configures the TIMx Internal Trigger as External Clock
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_InputTriggerSource:
- TIM_TRIG_SEL_IN_TR0
- TIM_TRIG_SEL_IN_TR1
- TIM_TRIG_SEL_IN_TR2
- TIM_TRIG_SEL_IN_TR3
- TIM_TRIG_SEL_IN_TR4
- TIM_TRIG_SEL_IN_TR5
- TIM_TRIG_SEL_IN_TR6
- TIM_TRIG_SEL_IN_TR7
- TIM_TRIG_SEL_IN_TR8
- TIM_TRIG_SEL_IN_TR9
- TIM_TRIG_SEL_IN_TR10
- TIM_TRIG_SEL_IN_TR11
- TIM_TRIG_SEL_IN_TR12
- TIM_TRIG_SEL_IN_TR13
- TIM_TRIG_SEL_IN_TR14
return none
void TIM_ConfigExtTrigAsClk(TIM_Module* TIMx, uint32_t TIM_TIxExternalCLKSource, uint32_t IcPolarity, uint32_t ICFilter)将 TIMx 的触发配置为外部时钟。
name TIM_ConfigExtTrigAsClk
fun Configures the TIMx Trigger as External Clock
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_TIxExternalCLKSource:
- TIM_TRIG_SEL_TI1F_ED
- TIM_TRIG_SEL_TI1FP1
- TIM_TRIG_SEL_TI2FP2
param ICPolarity
- TIM_IC_POLARITY_RISING
- TIM_IC_POLARITY_FALLING
param ICFilter
- ICFilter can be a number between 0x0 and 0xF
return none
void TIM_ConfigExtClkMode1(TIM_Module* TIMx,uint32_t TIM_ETRInputSource,uint32_t TIM_ExtTRGPrescaler,uint32_t TIM_ExtTRGPolarity,uint32_t ExtTRGFilter)配置外部时钟模式 1。
name TIM_ConfigExtClkMode1
fun Configures the External clock Mode1
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ETRInputSource:
- TIM_CAPETRSEL_0
- TIM_CAPETRSEL_8
- TIM_CAPETRSEL_9
- TIM_CAPETRSEL_10
- TIM_CAPETRSEL_11
- TIM_CAPETRSEL_12
- TIM_CAPETRSEL_13
param TIM_ExtTRGPrescaler:
- TIM_EXT_TRG_PSC_OFF
- TIM_EXT_TRG_PSC_DIV2
- TIM_EXT_TRG_PSC_DIV4
- TIM_EXT_TRG_PSC_DIV8
param TIM_ExtTRGPolarity
- TIM_EXT_TRIG_POLARITY_INVERTED
- TIM_EXT_TRIG_POLARITY_NONINVERTED
param ExtTRGFilter
- ExtTRGFilter can be a number between 0x0 and 0xF
return none
void TIM_ConfigExtClkMode2(TIM_Module* TIMx,uint32_t TIM_ETRInputSource,uint32_t TIM_ExtTRGPrescaler,uint32_t TIM_ExtTRGPolarity,uint32_t ExtTRGFilter)配置外部时钟模式 2。
name TIM_ConfigExtClkMode2
fun Configures the External clock Mode2
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ETRInputSource:
- TIM_CAPETRSEL_0
- TIM_CAPETRSEL_8
- TIM_CAPETRSEL_9
- TIM_CAPETRSEL_10
- TIM_CAPETRSEL_11
- TIM_CAPETRSEL_12
- TIM_CAPETRSEL_13
param TIM_ExtTRGPrescaler:
- TIM_EXT_TRG_PSC_OFF
- TIM_EXT_TRG_PSC_DIV2
- TIM_EXT_TRG_PSC_DIV4
- TIM_EXT_TRG_PSC_DIV8
param TIM_ExtTRGPolarity
- TIM_EXT_TRIG_POLARITY_INVERTED
- TIM_EXT_TRIG_POLARITY_NONINVERTED
param ExtTRGFilter
- ExtTRGFilter can be a number between 0x0 and 0xF
return none
void TIM_ConfigPrescaler(TIM_Module* TIMx, uint32_t Prescaler, uint32_t TIM_PSCReloadMode)配置 TIMx 的预分频器。
name TIM_ConfigPrescaler
fun Configures the TIMx Prescaler.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Prescaler:
- 0x0000 ~ 0xFFFF
param TIM_PSCReloadMode
- TIM_PSC_RELOAD_MODE_UPDATE
- TIM_PSC_RELOAD_MODE_IMMEDIATE
return none
void TIM_ConfigCntMode(TIM_Module* TIMx, uint32_t CntMode)指定要使用的 TIMx 计数器模式。
name TIM_ConfigCntMode
fun Specifies the TIMx Counter Mode to be used.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param CntMode
- TIM_CNT_MODE_UP
- TIM_CNT_MODE_DOWN
- TIM_CNT_MODE_CENTER_ALIGN1
- TIM_CNT_MODE_CENTER_ALIGN2
- TIM_CNT_MODE_CENTER_ALIGN3
return none
void TIM_ConfigEncoderInterface(TIM_Module* TIMx,uint32_t TIM_EncoderMode,uint32_t TIM_IC1Polarity,uint32_t TIM_IC2Polarity)配置 TIMx 的编码器接口。
name TIM_ConfigEncoderInterface
fun Configures the TIMx Encoder Interface.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_EncoderMode
- TIM_ENCODE_QUA_MODE_TI1
- TIM_ENCODE_QUA_MODE_TI2
- TIM_ENCODE_QUA_MODE_TI12
- TIM_ENCODE_QUA_MODE_SINGLE_TI1
- TIM_ENCODE_QUA_MODE_SINGLE_TI2
- TIM_ENCODE_DUL_CLKPLUS_MODE1
- TIM_ENCODE_DUL_CLKPLUS_MODE2
- TIM_ENCODE_SINGLE_CLKPLUS_MODE1
- TIM_ENCODE_SINGLE_CLKPLUS_MODE2
param TIM_IC1Polarity
- TIM_IC_POLARITY_FALLING
- TIM_IC_POLARITY_RISING
param TIM_IC2Polarity
- TIM_IC_POLARITY_FALLING
- TIM_IC_POLARITY_RISING
return none
void TIM_ConfigForcedOc1(TIM_Module* TIMx, uint32_t TIM_ForcedAction)强制将 TIMx 输出 1 的波形置为有效电平或无效电平。
name TIM_ConfigForcedOc1
fun Forces the TIMx output 1 waveform to active or inactive level.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ForcedAction
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
return none
void TIM_ConfigForcedOc2(TIM_Module* TIMx, uint32_t TIM_ForcedAction)强制将 TIMx 输出 2 的波形置为有效电平或无效电平。
name TIM_ConfigForcedOc2
fun Forces the TIMx output 2 waveform to active or inactive level.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ForcedAction
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
return none
void TIM_ConfigForcedOc3(TIM_Module* TIMx, uint32_t TIM_ForcedAction)强制将 TIMx 输出 3 的波形置为有效电平或无效电平。
name TIM_ConfigForcedOc3
fun Forces the TIMx output 3 waveform to active or inactive level.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ForcedAction
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
return none
void TIM_ConfigForcedOc4(TIM_Module* TIMx, uint32_t TIM_ForcedAction)强制将 TIMx 输出 4 的波形置为有效电平或无效电平。
name TIM_ConfigForcedOc4
fun Forces the TIMx output 4 waveform to active or inactive level.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ForcedAction
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
return none
void TIM_ConfigForcedOc5(TIM_Module* TIMx, uint32_t TIM_ForcedAction)强制将 TIMx 输出 5 的波形置为有效电平或无效电平。
name TIM_ConfigForcedOc5
fun Forces the TIMx output 5 waveform to active or inactive level.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_ForcedAction
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
return none
void TIM_ConfigForcedOc6(TIM_Module* TIMx, uint32_t TIM_ForcedAction)强制将 TIMx 输出 6 的波形置为有效电平或无效电平。
name TIM_ConfigForcedOc6
fun Forces the TIMx output 6 waveform to active or inactive level.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_ForcedAction
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
return none
void TIM_ConfigArPreload(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用 TIMx 外设在 AR 上的预装载寄存器。
name TIM_ConfigArPreload
fun Enables or disables TIMx peripheral Preload register on AR.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Cmd
- ENABLE
- DISABLE
return none
void TIM_SelectComEvt(TIM_Module* TIMx, FunctionalState Cmd)选择 TIM 外设的换相事件。
name TIM_SelectComEvt
fun Selects the TIM peripheral Commutation event.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Cmd
- ENABLE
- DISABLE
return none
void TIM_SelectCapCmpDmaSrc(TIM_Module* TIMx, FunctionalState Cmd)选择 TIMx 外设的捕获比较 DMA 源。
name TIM_SelectCapCmpDmaSrc
fun Selects the TIMx peripheral Capture Compare DMA source.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Cmd
- ENABLE
- DISABLE
return none
void TIM_EnableCapCmpPreloadControl(TIM_Module* TIMx, FunctionalState Cmd)置位或复位 TIM 外设的捕获比较预装载控制位。
name TIM_EnableCapCmpPreloadControl
fun Sets or Resets the TIM peripheral Capture Compare Preload Control bit.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Cmd
- ENABLE
- DISABLE
return none
void TIM_ConfigOc1Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT1 上的预装载寄存器。
name TIM_ConfigOc1Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT1.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc2Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT2 上的预装载寄存器。
name TIM_ConfigOc2Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT2.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc3Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT3 上的预装载寄存器。
name TIM_ConfigOc3Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT3.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc4Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT4 上的预装载寄存器。
name TIM_ConfigOc4Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT4.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc5Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT5 上的预装载寄存器。
name TIM_ConfigOc5Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT5.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc6Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT6 上的预装载寄存器。
name TIM_ConfigOc6Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT6.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc7Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT6 上的预装载寄存器。
name TIM_ConfigOc7Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT6.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc8Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT6 上的预装载寄存器。
name TIM_ConfigOc8Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT6.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc9Preload(TIM_Module* TIMx, uint32_t TIM_OCPreload)使能或禁用 TIMx 外设在 CCDAT6 上的预装载寄存器。
name TIM_ConfigOc9Preload
fun Enables or disables the TIMx peripheral Preload register on CCDAT6.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_PRE_LOAD_ENABLE
- TIM_OC_PRE_LOAD_DISABLE
return none
void TIM_ConfigOc1Fast(TIM_Module* TIMx, uint32_t TIM_OCFast)配置 TIMx 的输出比较 1 快速功能。
name TIM_ConfigOc1Fast
fun Configures the TIMx Output Compare 1 Fast feature.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_FAST_ENABLE
- TIM_OC_FAST_DISABLE
return none
void TIM_ConfigOc2Fast(TIM_Module* TIMx, uint32_t TIM_OCFast)配置 TIMx 的输出比较 2 快速功能。
name TIM_ConfigOc2Fast
fun Configures the TIMx Output Compare 2 Fast feature.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_FAST_ENABLE
- TIM_OC_FAST_DISABLE
return none
void TIM_ConfigOc3Fast(TIM_Module* TIMx, uint32_t TIM_OCFast)配置 TIMx 的输出比较 3 快速功能。
name TIM_ConfigOc3Fast
fun Configures the TIMx Output Compare 3 Fast feature.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_FAST_ENABLE
- TIM_OC_FAST_DISABLE
return none
void TIM_ConfigOc4Fast(TIM_Module* TIMx, uint32_t TIM_OCFast)配置 TIMx 的输出比较 4 快速功能。
name TIM_ConfigOc4Fast
fun Configures the TIMx Output Compare 4 Fast feature.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_FAST_ENABLE
- TIM_OC_FAST_DISABLE
return none
void TIM_ConfigOc5Fast(TIM_Module* TIMx, uint32_t TIM_OCFast)配置 TIMx 的输出比较 5 快速功能。
name TIM_ConfigOc5Fast
fun Configures the TIMx Output Compare 5 Fast feature.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_FAST_ENABLE
- TIM_OC_FAST_DISABLE
return none
void TIM_ConfigOc6Fast(TIM_Module* TIMx, uint32_t TIM_OCFast)配置 TIMx 的输出比较 6 快速功能。
name TIM_ConfigOc6Fast
fun Configures the TIMx Output Compare 6 Fast feature.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_FAST_ENABLE
- TIM_OC_FAST_DISABLE
return none
void TIM_ClrOc1Ref(TIM_Module* TIMx, uint32_t TIM_OCClear)在外部事件上清除或保护 OCREF1 信号。
name TIM_ClrOc1Ref
fun Clears or safeguards the OCREF1 signal on an external event
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_CLR_ENABLE
- TIM_OC_CLR_DISABLE
return none
void TIM_ClrOc2Ref(TIM_Module* TIMx, uint32_t TIM_OCClear)在外部事件上清除或保护 OCREF2 信号。
name TIM_ClrOc2Ref
fun Clears or safeguards the OCREF2 signal on an external event
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_CLR_ENABLE
- TIM_OC_CLR_DISABLE
return none
void TIM_ClrOc3Ref(TIM_Module* TIMx, uint32_t TIM_OCClear)在外部事件上清除或保护 OCREF3 信号。
name TIM_ClrOc3Ref
fun Clears or safeguards the OCREF3 signal on an external event
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_CLR_ENABLE
- TIM_OC_CLR_DISABLE
return none
void TIM_ClrOc4Ref(TIM_Module* TIMx, uint32_t TIM_OCClear)在外部事件上清除或保护 OCREF4 信号。
name TIM_ClrOc4Ref
fun Clears or safeguards the OCREF4 signal on an external event
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_CLR_ENABLE
- TIM_OC_CLR_DISABLE
return none
void TIM_ClrOc5Ref(TIM_Module* TIMx, uint32_t TIM_OCClear)在外部事件上清除或保护 OCREF5 信号。
name TIM_ClrOc5Ref
fun Clears or safeguards the OCREF5 signal on an external event
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_CLR_ENABLE
- TIM_OC_CLR_DISABLE
return none
void TIM_ClrOc6Ref(TIM_Module* TIMx, uint32_t TIM_OCClear)在外部事件上清除或保护 OCREF6 信号。
name TIM_ClrOc6Ref
fun Clears or safeguards the OCREF6 signal on an external event
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_CLR_ENABLE
- TIM_OC_CLR_DISABLE
return none
void TIM_ClrOcRefInputSource(TIM_Module* TIMx, uint32_t OCRefClearInputSelect,uint32_t OCRefClearInputSource)设置 OCREF 清除输入源。
name TIM_ClrOcRefInputSource
fun Set the OCREF clear input source
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param OCRefClearInputSelect
- TIM_ETRSEL
param OCRefClearInputSource
- TIM_CAPETRSEL_0
- TIM_CAPETRSEL_8
- TIM_CAPETRSEL_9
- TIM_CAPETRSEL_10
- TIM_CAPETRSEL_11
- TIM_CAPETRSEL_12
- TIM_CAPETRSEL_13
return none
void TIM_ConfigOc1Polarity(TIM_Module* TIMx, uint32_t OcPolarity)配置 TIMx 通道 1 的极性。
name TIM_ConfigOc1Polarity
fun Configures the TIMx channel 1 polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_POLARITY_HIGH
- TIM_OC_POLARITY_LOW
return none
void TIM_ConfigOc1NPolarity(TIM_Module* TIMx, uint32_t OcNPolarity)配置 TIMx 通道 1N 的极性。
name TIM_ConfigOc1NPolarity
fun Configures the TIMx channel 1N polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OCN_POLARITY_HIGH
- TIM_OCN_POLARITY_LOW
return none
void TIM_ConfigOc2Polarity(TIM_Module* TIMx, uint32_t OcPolarity)配置 TIMx 通道 2 的极性。
name TIM_ConfigOc2Polarity
fun Configures the TIMx channel 2 polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_POLARITY_HIGH
- TIM_OC_POLARITY_LOW
return none
void TIM_ConfigOc2NPolarity(TIM_Module* TIMx, uint32_t OcNPolarity)配置 TIMx 通道 2N 的极性。
name TIM_ConfigOc2NPolarity
fun Configures the TIMx channel 2N polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OCN_POLARITY_HIGH
- TIM_OCN_POLARITY_LOW
return none
void TIM_ConfigOc3Polarity(TIM_Module* TIMx, uint32_t OcPolarity)配置 TIMx 通道 3 的极性。
name TIM_ConfigOc3Polarity
fun Configures the TIMx channel 3 polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_POLARITY_HIGH
- TIM_OC_POLARITY_LOW
return none
void TIM_ConfigOc3NPolarity(TIM_Module* TIMx, uint32_t OcNPolarity)配置 TIMx 通道 3N 的极性。
name TIM_ConfigOc3NPolarity
fun Configures the TIMx channel 3N polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OCN_POLARITY_HIGH
- TIM_OCN_POLARITY_LOW
return none
void TIM_ConfigOc4Polarity(TIM_Module* TIMx, uint32_t OcPolarity)配置 TIMx 通道 4 的极性。
name TIM_ConfigOc4Polarity
fun Configures the TIMx channel 4 polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_POLARITY_HIGH
- TIM_OC_POLARITY_LOW
return none
void TIM_ConfigOc4NPolarity(TIM_Module* TIMx, uint32_t OcNPolarity)配置 TIMx 通道 4N 的极性。
name TIM_ConfigOc4NPolarity
fun Configures the TIMx channel 4N polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OCN_POLARITY_HIGH
- TIM_OCN_POLARITY_LOW
return none
void TIM_ConfigOc5Polarity(TIM_Module* TIMx, uint32_t OcPolarity)配置 TIMx 通道 5 的极性。
name TIM_ConfigOc5Polarity
fun Configures the TIMx channel 5 polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param TIM_OCPreload
- TIM_OC_POLARITY_HIGH
- TIM_OC_POLARITY_LOW
return none
void TIM_ConfigOc6Polarity(TIM_Module* TIMx, uint32_t OcPolarity)配置 TIMx 通道 6 的极性。
name TIM_ConfigOc6Polarity
fun Configures the TIMx channel 6 polarity.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_OCPreload
- TIM_OC_POLARITY_HIGH
- TIM_OC_POLARITY_LOW
return none
void TIM_EnableCapCmpCh(TIM_Module* TIMx, uint32_t Channel, uint32_t TIM_CCx)使能或禁用 TIM 捕获比较通道 x。
name TIM_EnableCapCmpCh
fun Enables or disables the TIM Capture Compare Channel x.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Channel
- TIM_CH_1
- TIM_CH_2
- TIM_CH_3
- TIM_CH_4
- TIM_CH_5
- TIM_CH_6
param TIM_CCx
- TIM_CAP_CMP_ENABLE
- TIM_CAP_CMP_DISABLE
return none
void TIM_EnableCapCmpChN(TIM_Module* TIMx, uint32_t Channel, uint32_t TIM_CCxN)使能或禁用 TIM 捕获比较通道 xN。
name TIM_EnableCapCmpChN
fun Enables or disables the TIM Capture Compare Channel xN.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Channel
- TIM_CH_1
- TIM_CH_2
- TIM_CH_3
- TIM_CH_4
param TIM_CCx
- TIM_CAP_CMP_N_ENABLE
- TIM_CAP_CMP_N_DISABLE
return none
void TIM_SelectOcMode(TIM_Module* TIMx, uint32_t Channel, uint32_t OcMode)选择 TIM 输出比较模式。
name TIM_SelectOcMode
fun Selects the TIM Output Compare Mode.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Channel
- TIM_CH_1
- TIM_CH_2
- TIM_CH_3
- TIM_CH_4
- TIM_CH_5
- TIM_CH_6
param OcMode
- TIM_OCMODE_TIMING
- TIM_OCMODE_ACTIVE
- TIM_OCMODE_INACTIVE
- TIM_OCMODE_TOGGLE
- TIM_OCMODE_PWM1
- TIM_OCMODE_PWM2
- TIM_FORCED_ACTION_ACTIVE
- TIM_FORCED_ACTION_INACTIVE
- TIM_OCMODE_OPMOD_RETRIG1
- TIM_OCMODE_OPMOD_RETRIG2
- TIM_OCMODE_COMBI_PWM1
- TIM_OCMODE_COMBI_PWM2
return none
void TIM_EnableUpdateEvt(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用 TIMx 更新事件位。
name TIM_EnableUpdateEvt
fun Enables or Disables the TIMx Update event bit.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Cmd
- ENABLE
- DISABLE
return none
void TIM_ConfigUpdateEvt(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用 TIMx 更新事件。
name TIM_ConfigUpdateEvt
fun Enables or Disables the TIMx Update event.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Cmd
- ENABLE
- DISABLE
return none
void TIM_ConfigUpdateRequestIntSrc(TIM_Module* TIMx, uint32_t TIM_UpdateSource)配置 TIMx 更新请求中断源。
name TIM_ConfigUpdateRequestIntSrc
fun Configures the TIMx Update Request Interrupt source.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_UpdateSource
- TIM_UPDATE_SRC_GLOBAL
- TIM_UPDATE_SRC_REGULAR
return none
void TIM_SelectHallSensor(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用 TIMx 的霍尔传感器接口。
name TIM_SelectHallSensor
fun Enables or disables the TIMx's Hall sensor interface.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Cmd
- ENABLE
- DISABLE
return none
void TIM_SelectOnePulseMode(TIM_Module* TIMx, uint32_t TIM_OPMode)选择 TIMx 的单脉冲模式。
name TIM_SelectOnePulseMode
fun Selects the TIMx's One Pulse Mode.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_OPMode
- TIM_OPMODE_SINGLE
- TIM_OPMODE_REPET
return none
void TIM_SelectOutputTrig(TIM_Module* TIMx, uint32_t TIM_TRGOSource)选择 TIMx 触发输出模式。
name TIM_SelectOutputTrig
fun Selects the TIMx Trigger Output Mode.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_TRGOSource
- TIM_TRGO_SRC_RESET
- TIM_TRGO_SRC_ENABLE
- TIM_TRGO_SRC_UPDATE
- TIM_TRGO_SRC_OC1
- TIM_TRGO_SRC_OC1REF
- TIM_TRGO_SRC_OC2REF
- TIM_TRGO_SRC_OC3REF
- TIM_TRGO_SRC_OC4REF
- TIM_TRGO_SRC_OC4_7_8_9REF
return none
void TIM_SelectOutputTrig2(TIM_Module* TIMx, uint32_t TIM_TRGO2Source)选择 TIMx 触发输出模式。
name TIM_SelectOutputTrig2
fun Selects the TIMx Trigger Output Mode.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param TIM_TRGO2Source
- TIM_TRGO2_SRC_RESET
- TIM_TRGO2_SRC_ENABLE
- TIM_TRGO2_SRC_UPDATE
- TIM_TRGO2_SRC_OC1
- TIM_TRGO2_SRC_OC1REF
- TIM_TRGO2_SRC_OC2REF
- TIM_TRGO2_SRC_OC3REF
- TIM_TRGO2_SRC_OC4REF
- TIM_TRGO2_SRC_OC5REF
- TIM_TRGO2_SRC_OC6REF
- LL_TIM_TRGO2_OC4_RISINGFALLING
- LL_TIM_TRGO2_OC6_RISINGFALLING
- LL_TIM_TRGO2_OC4_RISING_OC6_RISING
- LL_TIM_TRGO2_OC4_RISING_OC6_FALLING
- LL_TIM_TRGO2_OC5_RISING_OC6_RISING
- LL_TIM_TRGO2_OC5_RISING_OC6_FALLING
return none
void TIM_SelectSlaveMode(TIM_Module* TIMx, uint32_t TIM_SlaveMode)选择 TIMx 从模式。
name TIM_SelectSlaveMode
fun Selects the TIMx Slave Mode.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_SlaveMode
- TIM_SLAVE_MODE_DISABLE
- TIM_SLAVE_MODE_RESET
- TIM_SLAVE_MODE_GATED
- TIM_SLAVE_MODE_TRIG
- TIM_SLAVE_MODE_EXT1
- TIM_SLAVE_MODE_GATED_RESET
- TIM_SLAVE_MODE_TRIG_RESET
return none
void TIM_SelectMasterSlaveMode(TIM_Module* TIMx, uint32_t TIM_MasterSlaveMode)设置或复位 TIMx 的主/从模式。
name TIM_SelectMasterSlaveMode
fun Sets or Resets the TIMx Master/Slave Mode.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_SlaveMode
- TIM_MASTER_SLAVE_MODE_ENABLE
- TIM_MASTER_SLAVE_MODE_DISABLE
return none
void TIM_SetCnt(TIM_Module* TIMx, uint32_t Counter)设置 TIMx 计数器寄存器的值。
name TIM_SetCnt
fun Sets the TIMx Counter Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Counter
- Counter can be a number between 0x00000000 and 0xFFFFFFFF
return none
void TIM_SetAutoReload(TIM_Module* TIMx, uint32_t Autoreload)设置 TIMx 自动重载寄存器的值。
name TIM_SetAutoReload
fun Sets the TIMx Autoreload Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param Autoreload
- Autoreload can be a number between 0x00000000 and 0xFFFFFFFF
return none
void TIM_SetCmp1(TIM_Module* TIMx, uint32_t Compare1)设置 TIMx 捕获比较 1 寄存器的值。
name TIM_SetCmp1
fun Sets the TIMx Capture Compare1 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Compare1
- GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
return none
void TIM_SetCmp2(TIM_Module* TIMx, uint32_t Compare2)设置 TIMx 捕获比较 2 寄存器的值。
name TIM_SetCmp2
fun Sets the TIMx Capture Compare2 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Compare2
- GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
return none
void TIM_SetCmp3(TIM_Module* TIMx, uint32_t Compare3)设置 TIMx 捕获比较 3 寄存器的值。
name TIM_SetCmp3
fun Sets the TIMx Capture Compare3 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Compare3
- GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
return none
void TIM_SetCmp4(TIM_Module* TIMx, uint32_t Compare4)设置 TIMx 捕获比较 4 寄存器的值。
name TIM_SetCmp4
fun Sets the TIMx Capture Compare4 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Compare4
- GTIM1 and GTIM4 range from 0x00000000 to 0xffffffff, but the others range from 0x0000 to 0xffff.
return none
void TIM_SetCmp5(TIM_Module* TIMx, uint16_t Compare5)设置 TIMx 捕获比较 5 寄存器的值。
name TIM_SetCmp5
fun Sets the TIMx Capture Compare5 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
param Compare5
- Compare5 can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp6(TIM_Module* TIMx, uint16_t Compare6)设置 TIMx 捕获比较 6 寄存器的值。
name TIM_SetCmp6
fun Sets the TIMx Capture Compare6 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param Compare6
- Compare6 can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp7(TIM_Module* TIMx, uint16_t Compare7)设置 TIMx 捕获比较 7 寄存器的值。
name TIM_SetCmp7
fun Sets the TIMx Capture Compare7 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param Compare7
- Compare7 can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp8(TIM_Module* TIMx, uint16_t Compare8)设置 TIMx 捕获比较 8 寄存器的值。
name TIM_SetCmp8
fun Sets the TIMx Capture Compare8 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param Compare8
- Compare8 can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp9(TIM_Module* TIMx, uint16_t Compare9)设置 TIMx 捕获比较 9 寄存器的值。
name TIM_SetCmp9
fun Sets the TIMx Capture Compare9 Register value
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param Compare9
- Compare9 can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp1D(TIM_Module* TIMx, uint16_t compare1D)设置 TIM1_CCDAT1 寄存器中的 CCDDAT1[16:31]。
name TIM_SetCmp1D
fun Sets the CCDDAT1[16:31] in TIM1_CCDAT1 register
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param compare1D
- compare1D can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp2D(TIM_Module* TIMx, uint16_t compare2D)设置 TIM1_CCDAT2 寄存器中的 CCDDAT2[16:31]。
name TIM_SetCmp2D
fun Sets the CCDDAT2[16:31] in TIM1_CCDAT2 register
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param compare2D
- compare2D can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp3D(TIM_Module* TIMx, uint16_t compare3D)设置 TIM1_CCDAT3 寄存器中的 CCDDAT3[16:31]。
name TIM_SetCmp3D
fun Sets the CCDDAT3[16:31] in TIM1_CCDAT3 register
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param compare3D
- compare3D can be a number between 0x0000 and 0xFFFF
return none
void TIM_SetCmp4D(TIM_Module* TIMx, uint16_t compare4D)设置 TIM1_CCDAT4 寄存器中的 CCDDAT4[16:31]。
name TIM_SetCmp4D
fun Sets the CCDDAT4[16:31] in TIM1_CCDAT4 register
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
param compare4D
- compare4D can be a number between 0x0000 and 0xFFFF
return none
void ConfigTI1(TIM_Module* TIMx, uint32_t ICPolarity, uint32_t ICSelection, uint32_t ICFilter)将 TI1 配置为输入。
name ConfigTI1
fun Configure the TI1 as Input.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPolarity
- TIM_IC_POLARITY_RISING
- TIM_IC_POLARITY_FALLING
param ICSelection
- TIM_IC_SELECTION_DIRECTTI
- TIM_IC_SELECTION_INDIRECTTI
- TIM_IC_SELECTION_TRC
param ICFilter
- ICFilter can be a number between 0x0 and 0xF
return none
void ConfigTI2(TIM_Module* TIMx, uint32_t ICPolarity, uint32_t ICSelection, uint32_t ICFilter)将 TI2 配置为输入。
name ConfigTI2
fun Configure the TI2 as Input.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPolarity
- TIM_IC_POLARITY_RISING
- TIM_IC_POLARITY_FALLING
param ICSelection
- TIM_IC_SELECTION_DIRECTTI
- TIM_IC_SELECTION_INDIRECTTI
- TIM_IC_SELECTION_TRC
param ICFilter
- ICFilter can be a number between 0x0 and 0xF
return none
void ConfigTI3(TIM_Module* TIMx, uint32_t ICPolarity, uint32_t ICSelection, uint32_t ICFilter)将 TI3 配置为输入。
name ConfigTI3
fun Configure the TI3 as Input.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPolarity
- TIM_IC_POLARITY_RISING
- TIM_IC_POLARITY_FALLING
param ICSelection
- TIM_IC_SELECTION_DIRECTTI
- TIM_IC_SELECTION_INDIRECTTI
- TIM_IC_SELECTION_TRC
param ICFilter
- ICFilter can be a number between 0x0 and 0xF
return none
void ConfigTI4(TIM_Module* TIMx, uint32_t ICPolarity, uint32_t ICSelection, uint32_t ICFilter)将 TI4 配置为输入。
name ConfigTI4
fun Configure the TI4 as Input.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPolarity
- TIM_IC_POLARITY_RISING
- TIM_IC_POLARITY_FALLING
param ICSelection
- TIM_IC_SELECTION_DIRECTTI
- TIM_IC_SELECTION_INDIRECTTI
- TIM_IC_SELECTION_TRC
param ICFilter
- ICFilter can be a number between 0x0 and 0xF
return none
void TIM_SetInCap1Prescaler(TIM_Module* TIMx, uint32_t ICPrescaler)设置 TIMx 输入捕获 1 的预分频器。
name TIM_SetInCap1Prescaler
fun Sets the TIMx Input Capture 1 prescaler.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPrescaler
- TIM_IC_PSC_DIV1
- TIM_IC_PSC_DIV2
- TIM_IC_PSC_DIV4
- TIM_IC_PSC_DIV8
return none
void TIM_SetInCap2Prescaler(TIM_Module* TIMx, uint32_t ICPrescaler)设置 TIMx 输入捕获 2 的预分频器。
name TIM_SetInCap2Prescaler
fun Sets the TIMx Input Capture 2 prescaler.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPrescaler
- TIM_IC_PSC_DIV1
- TIM_IC_PSC_DIV2
- TIM_IC_PSC_DIV4
- TIM_IC_PSC_DIV8
return none
void TIM_SetInCap3Prescaler(TIM_Module* TIMx, uint32_t ICPrescaler)设置 TIMx 输入捕获 3 的预分频器。
name TIM_SetInCap3Prescaler
fun Sets the TIMx Input Capture 3 prescaler.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPrescaler
- TIM_IC_PSC_DIV1
- TIM_IC_PSC_DIV2
- TIM_IC_PSC_DIV4
- TIM_IC_PSC_DIV8
return none
void TIM_SetInCap4Prescaler(TIM_Module* TIMx, uint32_t ICPrescaler)设置 TIMx 输入捕获 4 的预分频器。
name TIM_SetInCap4Prescaler
fun Sets the TIMx Input Capture 4 prescaler.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param ICPrescaler
- TIM_IC_PSC_DIV1
- TIM_IC_PSC_DIV2
- TIM_IC_PSC_DIV4
- TIM_IC_PSC_DIV8
return none
void TIM_SelectInputTrig(TIM_Module* TIMx, uint32_t TIM_InputTriggerSource)选择输入触发源。
name TIM_SelectInputTrig
fun Selects the Input Trigger source
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_InputTriggerSource:
- TIM_TRIG_SEL_IN_TR0
- TIM_TRIG_SEL_IN_TR1
- TIM_TRIG_SEL_IN_TR2
- TIM_TRIG_SEL_IN_TR3
- TIM_TRIG_SEL_IN_TR4
- TIM_TRIG_SEL_IN_TR5
- TIM_TRIG_SEL_IN_TR6
- TIM_TRIG_SEL_IN_TR7
- TIM_TRIG_SEL_IN_TR8
- TIM_TRIG_SEL_IN_TR9
- TIM_TRIG_SEL_IN_TR10
- TIM_TRIG_SEL_IN_TR11
- TIM_TRIG_SEL_IN_TR12
- TIM_TRIG_SEL_IN_TR13
- TIM_TRIG_SEL_IN_TR14
- TIM_TRIG_SEL_TI1F_ED
- TIM_TRIG_SEL_TI1FP1
- TIM_TRIG_SEL_TI2FP2
- TIM_TRIG_SEL_ETRF
return none
void TIM_ConfigExtTrig(TIM_Module* TIMx,uint32_t TIM_ExtTRGPrescaler,uint32_t TIM_ExtTRGPolarity,uint32_t ExtTRGFilter)配置 TIMx 外部触发(ETR)。
name TIM_ConfigExtTrig
fun Configures the TIMx External Trigger (ETR).
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ExtTRGPrescaler:
- TIM_EXT_TRG_PSC_OFF
- TIM_EXT_TRG_PSC_DIV2
- TIM_EXT_TRG_PSC_DIV4
- TIM_EXT_TRG_PSC_DIV8
param TIM_ExtTRGPolarity
- TIM_EXT_TRIG_POLARITY_INVERTED
- TIM_EXT_TRIG_POLARITY_NONINVERTED
param ExtTRGFilter
- ExtTRGFilter can be a number between 0x0 and 0xF
return none
void TIM_SelectETRInputSource(TIM_Module* TIMx, uint32_t TIM_ETRInputSource)配置 tim_etr_in 的源。
name TIM_SelectETRInputSource
fun Configures the source of tim_etr_in.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_ETRInputSource:
- TIM_CAPETRSEL_0
- TIM_CAPETRSEL_8
- TIM_CAPETRSEL_10
- TIM_CAPETRSEL_11
- TIM_CAPETRSEL_12
- TIM_CAPETRSEL_13
return none
void TIM_SetClkDiv(TIM_Module* TIMx, uint32_t TIM_CKD)设置 TIMx 时钟分频值。
name TIM_SetClkDiv
fun Sets the TIMx Clock Division value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_CKD:
- TIM_CLK_DIV1
- TIM_CLK_DIV2
- TIM_CLK_DIV4
return none
uint32_t TIM_GetCap1(TIM_Module* TIMx)获取 TIMx 输入捕获 1 的值。
name TIM_GetCap1
fun Gets the TIMx Input Capture 1 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
return Capture Compare 1 Register value.
uint32_t TIM_GetCap2(TIM_Module* TIMx)获取 TIMx 输入捕获 2 的值。
name TIM_GetCap2
fun Gets the TIMx Input Capture 2 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
return Capture Compare 2 Register value.
uint32_t TIM_GetCap3(TIM_Module* TIMx)获取 TIMx 输入捕获 3 的值。
name TIM_GetCap3
fun Gets the TIMx Input Capture 3 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
return Capture Compare 3 Register value.
uint32_t TIM_GetCap4(TIM_Module* TIMx)获取 TIMx 输入捕获 4 的值。
name TIM_GetCap4
fun Gets the TIMx Input Capture 4 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
return Capture Compare 4 Register value.
uint16_t TIM_GetCap5(TIM_Module* TIMx)获取 TIMx 输入捕获 5 的值。
name TIM_GetCap5
fun Gets the TIMx Input Capture 5 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM8
- GTIM9
- GTIM10
return Capture Compare 5 Register value.
uint16_t TIM_GetCap6(TIM_Module* TIMx)获取 TIMx 输入捕获 6 的值。
name TIM_GetCap6
fun Gets the TIMx Input Capture 6 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 6 Register value.
uint16_t TIM_GetCap7(TIM_Module* TIMx)获取 TIMx 输入捕获 7 的值。
name TIM_GetCap7
fun Gets the TIMx Input Capture 7 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 7 Register value.
uint16_t TIM_GetCap8(TIM_Module* TIMx)获取 TIMx 输入捕获 8 的值。
name TIM_GetCap8
fun Gets the TIMx Input Capture 8 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 8 Register value.
uint16_t TIM_GetCap9(TIM_Module* TIMx)获取 TIMx 输入捕获 9 的值。
name TIM_GetCap9
fun Gets the TIMx Input Capture 9 value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 9 Register value.
uint16_t TIM_GetCap1D(TIM_Module* TIMx)获取 TIMx 输入捕获 1D 的值。
name TIM_GetCap1D
fun Gets the TIMx Input Capture 1D value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 1D Register value.
uint16_t TIM_GetCap2D(TIM_Module* TIMx)获取 TIMx 输入捕获 2D 的值。
name TIM_GetCap2D
fun Gets the TIMx Input Capture 2D value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 2D Register value.
uint16_t TIM_GetCap3D(TIM_Module* TIMx)获取 TIMx 输入捕获 3D 的值。
name TIM_GetCap3D
fun Gets the TIMx Input Capture 3D value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 3D Register value.
uint16_t TIM_GetCap4D(TIM_Module* TIMx)获取 TIMx 输入捕获 4D 的值。
name TIM_GetCap4D
fun Gets the TIMx Input Capture 4D value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
return Capture Compare 4D Register value.
uint32_t TIM_GetCnt(TIM_Module* TIMx)获取 TIMx 计数器的值。
name TIM_GetCnt
fun Gets the TIMx Counter value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
return Counter Register value.
uint16_t TIM_GetPrescaler(TIM_Module* TIMx)获取 TIMx 预分频器的值。
name TIM_GetPrescaler
fun Gets the TIMx Prescaler value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
return Prescaler Register value.
uint32_t TIM_GetAutoReload(TIM_Module* TIMx)获取 TIMx 的 AR 值。
name TIM_GetAutoReload
fun Gets the TIMx AR value.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
return AR Register value.
FlagStatus TIM_GetCCENStatus(TIM_Module* TIMx, uint32_t TIM_CCEN)检查指定的 TIM 标志是否被置位。
name TIM_GetCCENStatus
fun Checks whether the specified TIM flag is set or not.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_CCEN :
- TIM_CC1EN
- TIM_CC1NEN
- TIM_CC2EN
- TIM_CC2NEN
- TIM_CC3EN
- TIM_CC3NEN
- TIM_CC4EN
- TIM_CC4NEN
- TIM_CC5EN
- TIM_CC6EN
return The new state of TIM_FLAG (SET or RESET).
FlagStatus TIM_GetFlagStatus(TIM_Module* TIMx, uint32_t TIM_FLAG)检查指定的 TIM 标志是否被置位。
name TIM_GetFlagStatus
fun Checks whether the specified TIM flag is set or not.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_FLAG :
- TIM_FLAG_UPDATE
- TIM_FLAG_CC1
- TIM_FLAG_CC2
- TIM_FLAG_CC3
- TIM_FLAG_CC4
- TIM_FLAG_CC5
- TIM_FLAG_CC6
- TIM_FLAG_CC7
- TIM_FLAG_CC8
- TIM_FLAG_CC9
- TIM_FLAG_COM
- TIM_FLAG_TRIG
- TIM_FLAG_BREAK
- TIM_FLAG_BREAK2
- TIM_FLAG_SYS_BREAK
- TIM_FLAG_CC1OF
- TIM_FLAG_CC2OF
- TIM_FLAG_CC3OF
- TIM_FLAG_CC4OF
return The new state of TIM_FLAG (SET or RESET).
void TIM_ClearFlag(TIM_Module* TIMx, uint32_t TIM_FLAG)清除 TIMx 的待处理标志。
name TIM_ClearFlag
fun Clears the TIMx's pending flags.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_FLAG :
- TIM_FLAG_UPDATE
- TIM_FLAG_CC1
- TIM_FLAG_CC2
- TIM_FLAG_CC3
- TIM_FLAG_CC4
- TIM_FLAG_CC5
- TIM_FLAG_CC6
- TIM_FLAG_CC7
- TIM_FLAG_CC8
- TIM_FLAG_CC9
- TIM_FLAG_COM
- TIM_FLAG_TRIG
- TIM_FLAG_BREAK
- TIM_FLAG_BREAK2
- TIM_FLAG_SYS_BREAK
- TIM_FLAG_CC1OF
- TIM_FLAG_CC2OF
- TIM_FLAG_CC3OF
- TIM_FLAG_CC4OF
return none.
INTStatus TIM_GetIntStatus(TIM_Module* TIMx, uint32_t TIM_IT)检查 TIM 中断是否发生。
name TIM_GetIntStatus
fun Checks whether the TIM interrupt has occurred or not.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_IT :
- TIM_INT_UPDATE
- TIM_INT_CC1
- TIM_INT_CC2
- TIM_INT_CC3
- TIM_INT_CC4
- TIM_INT_CC5
- TIM_INT_CC6
- TIM_INT_CC7
- TIM_INT_CC8
- TIM_INT_CC9
- TIM_INT_COM
- TIM_INT_TRIG
- TIM_INT_BREAK
- TIM_INT_BREAK2
- TIM_INT_SYS_BREAK
return The new state of the TIM_IT(SET or RESET).
void TIM_ClrIntPendingBit(TIM_Module* TIMx, uint32_t TIM_IT)清除 TIMx 的中断待处理位。
name TIM_ClrIntPendingBit
fun Clears the TIMx's interrupt pending bits.
param TIMx (The input parameters must be the following values):
- ATIM1
- ATIM2
- ATIM3
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
- BTIM1
- BTIM2
param TIM_IT :
- TIM_INT_UPDATE
- TIM_INT_CC1
- TIM_INT_CC2
- TIM_INT_CC3
- TIM_INT_CC4
- TIM_INT_CC5
- TIM_INT_CC6
- TIM_INT_CC7
- TIM_INT_CC8
- TIM_INT_CC9
- TIM_INT_COM
- TIM_INT_TRIG
- TIM_INT_BREAK
- TIM_INT_BREAK2
- TIM_INT_SYS_BREAK
return none.
void TIM_SelectCenterAlignTrig(TIM_Module* TIMx, uint32_t TIM_CenterAlignTriggerSource)设置中央对齐模式下的触发模式。
name TIM_SelectCenterAlignTrig.
fun Setting the trigger mode in central alignment mode.
param TIMx:
- ATIM1
- ATIM2
- ATIM3
param TIM_CenterAlignTriggerSource
- TIM_UP_COUNTING
- TIM_DOWN_COUNTING
- TIM_UP_DOWN_COUNTING
return none
void TIM_AsymmetricEnable(TIM_Module* TIMx, FunctionalState Cmd)使能或禁用中央对齐模式下的非对称模式。
name TIM_Asymmetric_Enable.
fun Enable or disable asymmetric mode in center-aligned.
param TIMx:
- ATIM1
- ATIM2
- ATIM3
- BTIM8
- BTIM9
- BTIM10
param Cmd
- ENABLE
- DISABLE
return none
使用提示: 头文件 n32h49x_tim.h 第 879 行声明为 TIM_AsymmetricEnable,而 n32h49x_tim.c 中该实现正上方的注释写成 TIM_Asymmetric_Enable.;调用时使用头文件中的名字 TIM_AsymmetricEnable。
void TIM_OCxRefTriggerADC(TIM_Module* TIMx, uint32_t OCxRef, FunctionalState Cmd)使能或禁用 OCxREF 触发 ADC(x = 4、7、8 或 9)。
name TIM_OCxRefTriggerADC.
fun Enable or disable OCxREF to trigger ADC(x = 4,7,8 or 9).
param TIMx:
- ATIM1
- ATIM2
- ATIM3
param OCxRef
- TIM_CTRL2_TRIG4
- TIM_CTRL2_TRIG7
- TIM_CTRL2_TRIG8
- TIM_CTRL2_TRIG9
param Cmd
- ENABLE
- DISABLE
return none
void TIM_IC1FiltConfig(TIM_Module* TIMx, TIM_FiltInitType* TIM_FiltInitStruct)配置通道 1 的滤波器。
name TIM_IC1FiltConfig
fun Config the filter of channel1.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_FiltInitStruct:
- refer to the definition of TIM_FiltInitType
return none
void TIM_IC2FiltConfig(TIM_Module* TIMx, TIM_FiltInitType* TIM_FiltInitStruct)配置通道 2 的滤波器。
name TIM_IC2FiltConfig
fun Config the filter of channel2.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_FiltInitStruct:
- refer to the definition of TIM_FiltInitType
return none
void TIM_IC3FiltConfig(TIM_Module* TIMx, TIM_FiltInitType* TIM_FiltInitStruct)配置通道 3 的滤波器。
name TIM_IC3FiltConfig
fun Config the filter of channel3.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_FiltInitStruct:
- refer to the definition of TIM_FiltInitType
return none
void TIM_IC4FiltConfig(TIM_Module* TIMx, TIM_FiltInitType* TIM_FiltInitStruct)配置通道 4 的滤波器。
name TIM_IC4FiltConfig
fun Config the filter of channel4.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_FiltInitStruct:
- refer to the definition of TIM_FiltInitType
return none
void TIM_IC1FiltEnable(TIM_Module* TIMx,FunctionalState Cmd)使能或禁用通道 1 的滤波器。
name TIM_IC1FiltEnable
fun Enable or disable the filter of channel1.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_IC2FiltEnable(TIM_Module* TIMx,FunctionalState Cmd)使能或禁用通道 2 的滤波器。
name TIM_IC2FiltEnable
fun Enable or disable the filter of channel2.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_IC3FiltEnable(TIM_Module* TIMx,FunctionalState Cmd)使能或禁用通道 3 的滤波器。
name TIM_IC3FiltEnable
fun Enable or disable the filter of channel3.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Cmd :
- ENABLE
- DISABLE
return none
void TIM_IC4FiltEnable(TIM_Module* TIMx,FunctionalState Cmd)使能或禁用通道 4 的滤波器。
name TIM_IC4FiltEnable
fun Enable or disable the filter of channel4.
param TIMx:
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param Cmd :
- ENABLE
- DISABLE
return none
FlagStatus TIM_GetFiltStatus(TIM_Module* TIMx, uint32_t TIM_FiltFlag)检查指定的滤波器状态。
name TIM_GetFiltStatus
fun Checks the specified filter status.
param TIMx (The input parameters must be the following values):
- GTIM1
- GTIM2
- GTIM3
- GTIM4
- GTIM5
- GTIM6
- GTIM7
- GTIM8
- GTIM9
- GTIM10
param TIM_FiltFlag :
- TIM_C1FILTO
- TIM_C2FILTO
- TIM_C3FILTO
- TIM_C4FILTO
return The new state of TIM_FiltFlag (SET or RESET).
5.27.3 Demo 示例说明
本节说明 TIM 的 21 个示例:6Steps 用软件换相事件输出六步换相波形,ATIM1_Synchro、Cascade_Synchro、Parallel_Synchro、ExtTrigger_Synchro 演示定时器主从同步,ComplementarySignals 输出带死区与刹车输入的互补 PWM,DMA 与 DMABurst 演示更新 DMA 请求与 DMA 突发传输,InputCapture 与 PWM_Input 演示输入捕获与 PWM 输入测量,OCActive、OCInactive、OCToggle、OnePulse 演示输出比较的四种模式,PWM_Output 输出四路不同占空比的 PWM,Quadrature_Output 用主定时器触发多路带固定相位差的输出,TimeBase 用比较中断翻转四路 IO,TimeBasic_ATIM1、TimeBasic_BTIM1、TimeBasic_GTIM2、TimeBasic_GTIM8 演示高级、基本与通用定时器的更新中断。
5.27.3.1 6Steps 六步换相
工程目录: projects/n32h49x_EVAL/examples/TIM/6Steps/
使能 ATIM1 与互补通道时钟→配置三路互补通道的输出引脚→初始化 ATIM1 时基、比较值与刹车→使能换相中断与主输出→每 100 ms 软件触发一次换相事件→在中断中轮换六个换相状态
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 的三路互补通道输出六步换相波形:SysTick 每 100 ms 触发一次软件换相(COM)事件,在换相中断中按 Step1 到 Step6 的顺序轮换六个通道的导通状态。 |
| 源码组成 | src/main.c:时钟、NVIC、GPIO、SysTick 配置与 ATIM1 的时基、互补通道、刹车配置;src/n32h49x_it.c:SysTick_Handler 产生换相事件,TIMx_IRQHandler 实现六步换相;inc/main.h:TIMx、六路通道引脚与中断号宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 ATIM1,Prescaler 为 0、Period 为 4095、CounterMode 递增、ClkDiv 为 DIV1;通道:CH1~CH3 比较值为 2047/1023/511, OutputState 与 OutputNState 均使能,输出极性为高;刹车: OSSR、OSSI 使能,LOCKLevel 关闭,DeadTime 为 1,Break 关闭,AutomaticOutput 使能;引脚:CH1=PC0、CH2=PA9、CH3=PC2、CH1N=PB13、CH2N=PB14、CH3N=PB1; 中断:ATIM1_TRG_COM_IRQn 抢占 1、子优先级 1,SysTick 优先级 0; 时钟:SysTick 10 ms。 |
| 程序与数据路径 | main 先调用 RCC_Configuration、NVIC_Configuration、GPIO_Configuration 配置时钟、中断与六路通道引脚,再配置 ATIM1 时基、比较值、刹车并打开 COM 中断和主输出;SysTick_Configuration 把 SysTick 设为 10 ms,SysTick_Handler 每十次中断产生一次 ATIM1 COM 事件;TIMx_IRQHandler 收到 COM 中断后按 step 状态轮换三路互补通道的输出比较模式与使能状态。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitBkdtStruct、TIM_ConfigBkdt、TIM_ConfigInt、TIM_Enable、TIM_EnableCtrlPwmOutputs、TIM_GenerateEvent、TIM_SelectOcMode、TIM_EnableCapCmpCh |
| 验证方法 | 用示波器或逻辑分析仪观察 CH1~CH3(PC0、PA9、PC2)与互补通道(PB13、PB14、PB1)的波形; 换相事件每 100 ms 出现一次,六个状态循环切换。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 使用前按 readme.txt 说明处理 PA9/PA10 之间的 NSLINK 跳线。 |
核心代码解读与移植
示例先用固定配置产生三路互补 PWM,再用软件换相事件在运行时轮换各通道的导通状态。
数据路径: SysTick_Handler 每 100 ms 产生一次 COM 事件 → TIMx_IRQHandler 响应后改写通道配置 → 三路互补通道输出新的导通状态。
1. 时基与三路互补通道用固定值初始化。 时基周期为 4095,CH1~CH3 的比较值分别为 2047、1023、511,三路主输出与互补输出均使能。
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_TimeBaseStructure.Period = 4095;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.RepetCnt = 0;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
/* Channel 1, 2 and 3 Configuration in PWM mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_TIMING;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
TIM_OCInitStructure.Pulse = 2047;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_OCInitStructure.OCNPolarity = TIM_OCN_POLARITY_HIGH;
TIM_OCInitStructure.OCIdleState = TIM_OC_IDLE_STATE_SET;
TIM_OCInitStructure.OCNIdleState = TIM_OCN_IDLE_STATE_SET;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
TIM_OCInitStructure.Pulse = 1023;
TIM_InitOc2(TIMx, &TIM_OCInitStructure);
TIM_OCInitStructure.Pulse = 511;
TIM_InitOc3(TIMx, &TIM_OCInitStructure);
2. 刹车与死区配置后使能换相中断和主输出。 DeadTime 为 1、Break 关闭、AutomaticOutput 使能,随后使能 COM 中断、计数器与主输出。
/* Automatic Output enable, Break, dead time and lock configuration*/
TIM_InitBkdtStruct(&TIM_BDTRInitStructure);
TIM_BDTRInitStructure.OSSRState = TIM_OSSR_STATE_ENABLE;
TIM_BDTRInitStructure.OSSIState = TIM_OSSI_STATE_ENABLE;
TIM_BDTRInitStructure.LOCKLevel = TIM_LOCK_LEVEL_OFF;
TIM_BDTRInitStructure.DeadTime = 1;
TIM_BDTRInitStructure.Break = TIM_BREAK_IN_DISABLE;
TIM_BDTRInitStructure.AutomaticOutput = TIM_AUTO_OUTPUT_ENABLE;
TIM_ConfigBkdt(TIMx, &TIM_BDTRInitStructure);
TIM_EnableCapCmpPreloadControl(TIMx, ENABLE);
/* interrupt Enable */
TIM_ConfigInt(TIMx, TIM_INT_COM, ENABLE);
/* TIM1 counter enable */
TIM_Enable(TIMx, ENABLE);
/* Main Output Enable */
TIM_EnableCtrlPwmOutputs(TIMx, ENABLE);
3. SysTick 每 100 ms 产生一次换相事件。 十次 10 ms 中断后由软件置位 COM 事件,把预装载的新配置一次性生效。
void SysTick_Handler(void)
{
if(temp==9)
{
/* Generate TIM1 COM event by software */
TIM_GenerateEvent(TIMx, TIM_EVT_SRC_COM);
temp=0;
}
else
{
temp++;
}
}
4. 换相中断按状态轮换通道。 每次 COM 中断按 step 改写三路通道的输出比较模式与主/互补使能,实现六个状态的循环。
/* Clear TIMx COM pending bit */
TIM_ClrIntPendingBit(TIMx, TIM_INT_COM);
if (step == 1)
{
/* Next step: Step 2 Configuration ---------------------------- */
/* Channel3 configuration */
TIM_EnableCapCmpCh(TIMx, TIM_CH_3, TIM_CAP_CMP_DISABLE);
TIM_EnableCapCmpChN(TIMx, TIM_CH_3, TIM_CAP_CMP_N_DISABLE);
/* Channel1 configuration */
TIM_SelectOcMode(TIMx, TIM_CH_1, TIM_OCMODE_PWM1);
TIM_EnableCapCmpCh(TIMx, TIM_CH_1, TIM_CAP_CMP_ENABLE);
TIM_EnableCapCmpChN(TIMx, TIM_CH_1, TIM_CAP_CMP_N_DISABLE);
/* Channel2 configuration */
TIM_SelectOcMode(TIMx, TIM_CH_2, TIM_OCMODE_PWM1);
TIM_EnableCapCmpCh(TIMx, TIM_CH_2, TIM_CAP_CMP_DISABLE);
TIM_EnableCapCmpChN(TIMx, TIM_CH_2, TIM_CAP_CMP_N_ENABLE);
step++;
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.2 ATIM1_Synchro ATIM1 门控同步
工程目录: projects/n32h49x_EVAL/examples/TIM/ATIM1_Synchro/
使能 ATIM1、GTIM3、GTIM4 的时钟→配置三路 CH1 复用输出引脚→初始化 ATIM1 为 PWM 主定时器并选更新事件作触发输出→把 GTIM3、GTIM4 配为门控从模式并选 ITR0→使能三个定时器并打开 ATIM1 主输出
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 作主定时器输出 PWM,其更新事件经触发输出门控 GTIM3 与 GTIM4; 两个从定时器在 ATIM1 每个周期内计数并输出 PWM,周期分别约为 ATIM1 的 15 倍与 10 倍。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与 ATIM1、GTIM3、GTIM4 的时基、PWM、主从模式配置;inc/main.h:标准头文件包含与函数声明;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 主定时器:ATIM1 Period 255、RepetCnt 4、Pulse 127、OCMODE_PWM2,触发输出选更新事件;从定时器:GTIM3 Period 2、GTIM4 Period 1,均为门控从模式,触发输入选 ITR0;引脚:ATIM1 CH1=PA8、GTIM3 CH1=PA11、GTIM4 CH1=PA0,均为复用推挽输出; 时钟: RCC_ConfigPclk1(RCC_HCLK_DIV4);模式:ATIM1 使能主从模式。 |
| 程序与数据路径 | main 先配置 GTIM3、GTIM4 的门控从模式与时基,再配置 ATIM1 的时基、PWM 通道与主模式;TIM_SelectOutputTrig 让 ATIM1 每次更新事件输出触发,作为两个从定时器的门控输入;依次使能 ATIM1、GTIM3、GTIM4 并打开 ATIM1 主输出,从定时器在门控窗口内计数并输出 PWM。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_SelectSlaveMode、TIM_SelectInputTrig、TIM_SelectOutputTrig、TIM_SelectMasterSlaveMode、TIM_Enable、TIM_EnableCtrlPwmOutputs |
| 验证方法 | 用示波器或逻辑分析仪同时观察 ATIM1 CH1(PA8)、GTIM3 CH1(PA11)、GTIM4 CH1(PA0); 两个从定时器的输出周期分别约为 ATIM1 的 15 倍与 10 倍。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; RCC_ConfigPclk1(RCC_HCLK_DIV4) 因 GTIM1~7、BTIM1~2 最高工作时钟为 120 MHz,PCLK1 分频不能为 1 或 2。 |
核心代码解读与移植
示例把 ATIM1 配成主定时器、GTIM3 与 GTIM4 配成门控从定时器,沿主从触发链读下面的配置点即可理解门控关系。
数据路径: ATIM1 更新事件 → ATIM1 触发输出 → GTIM3、GTIM4 门控输入(ITR0) → 从计数器在门控窗口内计数 → CH1 输出 PWM。
1. 从定时器用门控从模式接收主触发。 GTIM3、GTIM4 的触发输入选 ITR0,计数启停由 ATIM1 的触发输出控制。
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 2;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(GTIM3, &TIM_TimeBaseStructure);
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 1;
TIM_InitOc1(GTIM3, &TIM_OCInitStructure);
/* Slave Mode selection: GTIM3 */
TIM_SelectSlaveMode(GTIM3, TIM_SLAVE_MODE_GATED);
TIM_SelectInputTrig(GTIM3, TIM_TRIG_SEL_IN_TR0);
2. 主定时器用更新事件作触发输出。 ATIM1 配为 PWM2,并把更新事件选为触发输出,每个计数周期向从定时器发一次门控信号。
/* Time Base configuration */
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_TimeBaseStructure.Period = 255;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.RepetCnt = 4;
TIM_InitTimeBase(ATIM1, &TIM_TimeBaseStructure);
/* Channel 1 Configuration in PWM mode */
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM2;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
TIM_OCInitStructure.Pulse = 127;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_LOW;
TIM_OCInitStructure.OCNPolarity = TIM_OCN_POLARITY_LOW;
TIM_OCInitStructure.OCIdleState = TIM_OC_IDLE_STATE_SET;
TIM_OCInitStructure.OCNIdleState = TIM_OCN_IDLE_STATE_RESET;
TIM_InitOc1(ATIM1, &TIM_OCInitStructure);
/* Master Mode selection */
TIM_SelectOutputTrig(ATIM1, TIM_TRGO_SRC_UPDATE);
/* Select the Master Slave Mode */
TIM_SelectMasterSlaveMode(ATIM1, TIM_MASTER_SLAVE_MODE_ENABLE);
3. 三路输出引脚同为复用推挽。 ATIM1 的 CH1 用 AF3,GTIM3、GTIM4 的 CH1 用 AF2。
GPIO_InitStruct(&GPIO_InitStructure);
/* GPIOx Configuration: Pin of TIMx */
GPIO_InitStructure.Pin = GPIO_PIN_8;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_SLOW;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF3;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
/* GPIOx Configuration: Pin of TIMx */
GPIO_InitStructure.Pin = GPIO_PIN_11 | GPIO_PIN_0;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_SLOW;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF2;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
4. PCLK1 分频与定时器时钟使能。 通用定时器最高工作时钟为 120 MHz,PCLK1 需 4 分频后再使能各定时器时钟。
/* TIMx, GPIOx and AFIO clocks enable */
RCC_ConfigPclk1(RCC_HCLK_DIV4);/* The maximum operating clock of GTIM1-7/BTIM1-2 is 120MHz,the division frequency of PCLK1 cannot be 1 or 2 divisions */
RCC_EnableAHBPeriphClk(RCC_AHB_PERIPHEN_ATIM1,ENABLE);
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPHEN_GTIM3 | RCC_APB1_PERIPHEN_GTIM4,ENABLE);
RCC_EnableAHB1PeriphClk(RCC_AHB_PERIPHEN_GPIOA,ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_AFIO,ENABLE);
对应源码: src/main.c
5.27.3.3 Cascade_Synchro 级联同步
工程目录: projects/n32h49x_EVAL/examples/TIM/Cascade_Synchro/
使能 TIMx、TIMy、TIMz 的时钟→配置三路 CH1 复用输出引脚→TIMx 作 PWM 主定时器并以更新事件作触发输出→TIMy 门控于 TIMx 并再作主定时器→TIMz 门控于 TIMy 形成两级级联→依次使能三个定时器并观察三路输出
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM2 作主定时器输出 PWM,其更新事件门控 GTIM5; GTIM5 又以更新事件门控 GTIM6,三级定时器级联,周期逐级变为上一级的 4 倍。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与 TIMx、TIMy、TIMz 的时基、PWM、主从模式配置;inc/main.h:TIMx 为 GTIM2、TIMy 为 GTIM5、TIMz 为 GTIM6 及各路引脚宏;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx Period 255、TIMy 与 TIMz Period 3,Prescaler 0、ClkDiv DIV1;通道:三路 CH1 均为 OCMODE_PWM1,TIMx Pulse 64、TIMy 与 TIMz Pulse 1;从模式:TIMy 触发输入选 ITR2、TIMz 选 ITR12,均为门控从模式; 模式:TIMx 与 TIMy 都使能主从模式并把更新事件作触发输出; 引脚:GTIM2 CH1=PA6、GTIM5 CH1=PA2、GTIM6 CH1=PD5。 |
| 程序与数据路径 | main 先依次设置三个定时器的时基,TIMx 周期 255、TIMy 与 TIMz 周期 3;再把 TIMx、TIMy 都设为触发输出更新事件的主从模式,TIMy、TIMz 以门控从模式接收上一级的触发; 依次使能 TIMy、TIMx、TIMz 后,触发沿逐级向下传递,三级输出周期依次变为上一级的 4 倍。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_SelectMasterSlaveMode、TIM_SelectOutputTrig、TIM_SelectSlaveMode、TIM_SelectInputTrig、TIM_Enable |
| 验证方法 | 用示波器或逻辑分析仪同时观察 GTIM2 CH1(PA6)、GTIM5 CH1(PA2)、GTIM6 CH1(PD5); 可见 GTIM5 周期为 GTIM2 的 4 倍、GTIM6 为 GTIM5 的 4 倍。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; RCC_ConfigPclk1(RCC_HCLK_DIV4) 因 GTIM1~7、BTIM1~2 最高工作时钟为 120 MHz。 |
核心代码解读与移植
示例把三个通用定时器逐级串联,每一级都用更新事件触发下一级的门控输入。
数据路径: TIMx 更新事件 → TIMy 门控输入(ITR2) → TIMy 更新事件 → TIMz 门控输入(ITR12) → 三路 CH1 输出 PWM。
1. 三级时基与 PWM 比较值。 TIMx 周期 255、TIMy 与 TIMz 周期 3,三路 CH1 都配成 PWM1。
/* Time Base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_TimeBaseStructure.Period = 255;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 3;
TIM_InitTimeBase(TIMy, &TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 3;
TIM_InitTimeBase(TIMz, &TIM_TimeBaseStructure);
2. TIMx 作主定时器输出触发。 TIMx 使能主从模式并把更新事件选作触发输出。
/* Master Configuration in PWM1 Mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 64;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
/* Select the Master Slave Mode */
TIM_SelectMasterSlaveMode(TIMx, TIM_MASTER_SLAVE_MODE_ENABLE);
/* Master Mode selection */
TIM_SelectOutputTrig(TIMx, TIM_TRGO_SRC_UPDATE);
3. TIMy 既是从定时器又是主定时器。 TIMy 门控于 ITR2,同时把自身更新事件作为触发输出去门控 TIMz。
/* Slave Mode selection: TIMy */
TIM_SelectSlaveMode(TIMy, TIM_SLAVE_MODE_GATED);
TIM_SelectInputTrig(TIMy, TIM_TRIG_SEL_IN_TR2);
/* Select the Master Slave Mode */
TIM_SelectMasterSlaveMode(TIMy, TIM_MASTER_SLAVE_MODE_ENABLE);
/* Master Mode selection: TIMy */
TIM_SelectOutputTrig(TIMy, TIM_TRGO_SRC_UPDATE);
/* Slave Mode selection: TIMz */
TIM_SelectSlaveMode(TIMz, TIM_SLAVE_MODE_GATED);
TIM_SelectInputTrig(TIMz, TIM_TRIG_SEL_IN_TR12);
4. 时钟配置与分频限制。 三个定时器都在 APB1 上,PCLK1 需 4 分频以不超过 120 MHz。
/* TIMx, GPIOx and AFIO clocks enable */
RCC_ConfigPclk1(RCC_HCLK_DIV4);/* The maximum operating clock of GTIM1-7/BTIM1-2 is 120MHz,the division frequency of PCLK1 cannot be 1 or 2 divisions */
RCC_EnableAPB1PeriphClk(TIMx_CLK | TIMy_CLK | TIMz_CLK,ENABLE);
RCC_EnableAHB1PeriphClk(TIMx_CH1_GPIO_CLK | TIMy_CH1_GPIO_CLK | TIMz_CH1_GPIO_CLK,ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_AFIO,ENABLE);
对应源码: src/main.c
5.27.3.4 ComplementarySignals 互补信号输出
工程目录: projects/n32h49x_EVAL/examples/TIM/ComplementarySignals/
使能 ATIM1 与通道时钟→配置四对互补通道与 BKIN 引脚→按系统时钟算出周期与四路比较值→初始化 ATIM1 时基与四路 PWM→配置死区、刹车与自动输出使能→使能计数器和主输出
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 的四对互补通道输出固定占空比的 PWM:CH1 为 50%、CH2 为 25%、CH3 与 CH4 为 12.5%; 同时插入死区、使能刹车输入并配置自动输出使能,用于驱动互补桥臂。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与 ATIM1 的时基、四路互补 PWM、刹车死区配置;inc/main.h:TIMx 为 ATIM1、四路通道与互补通道、BKIN 的引脚宏;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 ATIM1,Prescaler 0、Period 由 SystemCoreClock/16000-1 得到、ClkDiv DIV1;通道:CH1~CH4 均为 OCMODE_PWM2,OutputState 与 OutputNState 使能,输出极性与空闲状态成对配置;刹车: DeadTime 11、Break 使能、BreakPolarity 高电平有效、AutomaticOutput 使能;引脚:CH1=PC0、CH2=PA9、CH3=PC2、CH4=PC3、CH1N=PA7、CH2N=PB14、CH3N=PD9、CH4N=PD5、BKIN=PA6; 输入: TIM_BreakInputSourceEnable 使能 BKIN 刹车输入源。 |
| 程序与数据路径 | main 先按 SystemCoreClock 算出周期与四路比较值,再配置 ATIM1 的时基与四路互补 PWM;随后配置刹车、死区与自动输出,并使能 BKIN 输入源; 最后依次使能计数器与主输出,四对互补通道开始输出。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_InitBkdtStruct、TIM_ConfigBkdt、TIM_BreakInputSourceEnable、TIM_Enable、TIM_EnableCtrlPwmOutputs |
| 验证方法 | 用示波器观察四对互补通道(PC0/PA7、PA9/PB14、PC2/PD9、PC3/PD5)的波形与死区; 把 BKIN(PA6)拉到有效电平可触发刹车,观察输出被强制到空闲状态。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 按 readme.txt 说明处理 PA9/PA10 之间的 NSLINK 跳线,避免调试链路影响通道输出。 |
核心代码解读与移植
示例用 ATIM1 产生四对互补 PWM,并通过刹车和死区配置演示高级定时器的互补输出路径。
数据路径: SystemCoreClock → 周期与比较值计算 → ATIM1 时基与四路 PWM → 死区与刹车配置 → 四对互补通道输出。
1. 周期与占空比由系统时钟算出。 周期取 SystemCoreClock/16000-1,四路比较值按 50%、25%、12.5%、12.5% 计算。
/* Compute the value to be set in AR register to generate signal frequency at x hz */
TimerPeriod = (SystemCoreClock / 16000) - 1;
/* Compute CCDAT1 value to generate a duty cycle at 50% for channel 1 */
Channel1Pulse = (uint16_t)(((uint32_t)5 * (TimerPeriod - 1)) / 10);
/* Compute CCDAT2 value to generate a duty cycle at 25% for channel 2 */
Channel2Pulse = (uint16_t)(((uint32_t)25 * (TimerPeriod - 1)) / 100);
/* Compute CCDAT3 value to generate a duty cycle at 12.5% for channel 3 */
Channel3Pulse = (uint16_t)(((uint32_t)125 * (TimerPeriod - 1)) / 1000);
/* Compute CCDAT4 value to generate a duty cycle at 12.5% for channel 3 */
Channel4Pulse = (uint16_t)(((uint32_t)125 * (TimerPeriod - 1)) / 1000);
2. 四路互补通道用 PWM2 输出。 主输出与互补输出使能,输出极性低、空闲状态成对设置。
/* Time Base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_TimeBaseStructure.Period = TimerPeriod;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.RepetCnt = 0;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
/* Channel 1, 2 and 3 Configuration in PWM mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM2;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
TIM_OCInitStructure.Pulse = Channel1Pulse;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_LOW;
TIM_OCInitStructure.OCNPolarity = TIM_OCN_POLARITY_LOW;
TIM_OCInitStructure.OCIdleState = TIM_OC_IDLE_STATE_SET;
TIM_OCInitStructure.OCNIdleState = TIM_OCN_IDLE_STATE_RESET;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
TIM_OCInitStructure.Pulse = Channel2Pulse;
TIM_InitOc2(TIMx, &TIM_OCInitStructure);
TIM_OCInitStructure.Pulse = Channel3Pulse;
TIM_InitOc3(TIMx, &TIM_OCInitStructure);
TIM_OCInitStructure.Pulse = Channel4Pulse;
TIM_InitOc4(TIMx, &TIM_OCInitStructure);
3. 死区、刹车与自动输出使能。 DeadTime 为 11,刹车高电平有效并配置为自动输出使能,BKIN 输入源单独使能。
/* Automatic Output enable, Break, dead time and lock configuration*/
TIM_InitBkdtStruct(&TIM_BDTRInitStructure);
TIM_BDTRInitStructure.OSSRState = TIM_OSSR_STATE_ENABLE;
TIM_BDTRInitStructure.OSSIState = TIM_OSSI_STATE_ENABLE;
TIM_BDTRInitStructure.LOCKLevel = TIM_LOCK_LEVEL_OFF;
TIM_BDTRInitStructure.DeadTime = 11;
TIM_BDTRInitStructure.Break = TIM_BREAK_IN_ENABLE;
TIM_BDTRInitStructure.BreakPolarity = TIM_BREAK_POLARITY_HIGH;
TIM_BDTRInitStructure.AutomaticOutput = TIM_AUTO_OUTPUT_ENABLE;
TIM_ConfigBkdt(TIMx, &TIM_BDTRInitStructure);
TIM_BreakInputSourceEnable(TIMx,TIM_BREAK_IOM,TIM_BREAK_SOURCE_POLARITY_NONINVERT,ENABLE);
/* TIMx counter enable */
TIM_Enable(TIMx, ENABLE);
/* Main Output Enable */
TIM_EnableCtrlPwmOutputs(TIMx, ENABLE);
对应源码: src/main.c
5.27.3.5 DMA 更新事件触发 DMA 传输
工程目录: projects/n32h49x_EVAL/examples/TIM/DMA/
使能 ATIM1、GPIO 与 DMA1 时钟→配置 CH3 与 CH3N 复用输出引脚→算出周期与三档占空比→初始化 ATIM1 时基与 CH3 互补 PWM→配置 DMA1_CH5 并重映射到更新请求→使能更新 DMA 请求、计数器与主输出
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 CH3 输出互补 PWM,占空比由 DMA 循环改写; 按重复计数器设定的节拍,比较值在 50%、37.5%、25% 三档之间循环切换。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与 ATIM1 时基、CH3 互补 PWM、更新 DMA 请求与 DMA 通道配置;inc/main.h:TIMx 为 ATIM1、CH3 与 CH3N 引脚宏及 SRC_Buffer 声明;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 ATIM1,Prescaler 0、Period 由 SystemCoreClock/60000-1 得到、RepetCnt 5;通道:CH3 用 OCMODE_PWM2,OutputState 与 OutputNState 使能,Pulse 取 SRC_Buffer[0];DMA:DMA1 通道 5,外设地址为 TIMx->CCDAT3、存储地址为 SRC_Buffer、BufSize 3、循环模式、字宽传输;请求:使能 ATIM1 更新 DMA 请求并重映射到 DMA1_CH5; 引脚:CH3=PC2、CH3N=PD9。 |
| 程序与数据路径 | main 先算出周期与三档占空比写入 SRC_Buffer,再配置 ATIM1 时基与 CH3 互补 PWM,并打开更新 DMA 请求;DMA_Configuration 把 DMA1_CH5 配成从 SRC_Buffer 循环搬到 CCDAT3;每次更新事件触发一次 DMA 请求,比较值随之切换到下一档。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc3、TIM_EnableDma、TIM_Enable、TIM_EnableCtrlPwmOutputs、DMA_Init、DMA_StructInit、DMA_DeInit、DMA_RequestRemap、DMA_EnableChannel |
| 验证方法 | 用示波器观察 CH3/CH3N(PC2、PD9)的互补 PWM; 占空比按重复计数器节拍在 50%、37.5%、25% 间循环变化。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; DMA 通道与请求映射要按器件请求表选择,换定时器或通道时同步修改重映射。 |
核心代码解读与移植
示例用更新 DMA 请求把一维数组里的比较值循环送入 ATIM1 CH3,实现占空比自动切换。
数据路径: SRC_Buffer → DMA1_CH5(循环、字宽)→ TIMx->CCDAT3 → CH3 与 CH3N 互补输出。
1. 周期与三档占空比一次算出。 周期取 SystemCoreClock/60000-1,三档占空比存入 SRC_Buffer。
/* Compute the value to be set in AR register to generate signal frequency at x hz */
TimerPeriod = (SystemCoreClock / 60000) - 1;
/* Compute CCDAT1 value to generate a duty cycle at 50% */
SRC_Buffer[0] = (uint16_t)(((uint32_t)5 * (TimerPeriod - 1)) / 10);
/* Compute CCDAT1 value to generate a duty cycle at 37.5% */
SRC_Buffer[1] = (uint16_t)(((uint32_t)375 * (TimerPeriod - 1)) / 1000);
/* Compute CCDAT1 value to generate a duty cycle at 25% */
SRC_Buffer[2] = (uint16_t)(((uint32_t)25 * (TimerPeriod - 1)) / 100);
2. 使能更新 DMA 请求并配好 CH3 输出。 ATIM1 打开更新 DMA 请求,CH3 在 PWM2 模式下用 SRC_Buffer[0] 作比较值。
/* Time Base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_TimeBaseStructure.Period = TimerPeriod;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.RepetCnt = 5;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
/* Channel 3 Configuration in PWM mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM2;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_ENABLE;
TIM_OCInitStructure.Pulse = SRC_Buffer[0];
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_LOW;
TIM_OCInitStructure.OCNPolarity = TIM_OCN_POLARITY_LOW;
TIM_OCInitStructure.OCIdleState = TIM_OC_IDLE_STATE_SET;
TIM_OCInitStructure.OCNIdleState = TIM_OCN_IDLE_STATE_RESET;
TIM_InitOc3(TIMx, &TIM_OCInitStructure);
/* TIMx Update DMA Request enable */
TIM_EnableDma(TIMx, TIM_DMA_UPDATE, ENABLE);
/* TIMx counter enable */
TIM_Enable(TIMx, ENABLE);
3. DMA 通道循环搬运比较值。 DMA1_CH5 以外设为目的地、SRC_Buffer 为源、循环模式按字传输,并重映射到更新请求。
/* DMA1 Channel5 Config */
DMA_DeInit(DMA1_CH5);
DMA_StructInit(&DMA_InitStructure);
DMA_InitStructure.PeriphAddr = (uint32_t)&TIMx->CCDAT3;
DMA_InitStructure.MemAddr = (uint32_t)SRC_Buffer;
DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST;
DMA_InitStructure.BufSize = 3;
DMA_InitStructure.PeriphInc = DMA_PERIPH_INC_DISABLE;
DMA_InitStructure.MemoryInc = DMA_MEM_INC_ENABLE;
DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_WIDTH_WORD;
DMA_InitStructure.MemDataSize = DMA_MEM_DATA_WIDTH_WORD;
DMA_InitStructure.CircularMode = DMA_MODE_CIRCULAR;
DMA_InitStructure.Priority = DMA_PRIORITY_HIGH;
DMA_InitStructure.Mem2Mem = DMA_M2M_DISABLE;
DMA_Init(DMA1_CH5, &DMA_InitStructure);
DMA_RequestRemap(DMA_REMAP_ATIM1_UP,DMA1_CH5, ENABLE);
/* DMA1 Channel5 enable */
DMA_EnableChannel(DMA1_CH5, ENABLE);
对应源码: src/main.c
5.27.3.6 DMABurst DMA 突发传输
工程目录: projects/n32h49x_EVAL/examples/TIM/DMABurst/
使能 ATIM1、GPIO 与 DMA1 时钟→配置 CH1 复用输出引脚→初始化 ATIM1 时基与 CH1 PWM→配置 DMA 突发基址与传输长度→配置并启动 DMA1_CH5 搬运 8 个字→轮询完成标志并循环重复突发
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 CH1 输出 PWM,比较值通过 DMA 突发模式一次写入 8 个传输;SRC_Buffer 指定脉冲在周期内的起始与结束位置,传输完成后由后台循环再次触发。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与 ATIM1 时基、CH1 PWM、DMA 突发设置及通道配置;inc/main.h:TIMx 为 ATIM1、CH1 引脚宏与 SRC_Buffer 声明;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 ATIM1,Prescaler 0、Period 0xFFFF、ClkDiv DIV1;通道:CH1 用 OCMODE_PWM1、Pulse 0x8FFF、OutputState 使能;突发: TIM_ConfigDma 把基址设为捕获比较数据 1、突发长度为 8 个传输,并使能更新 DMA 请求;DMA:DMA1_CH5,外设地址为 TIMx->DADDR、BufSize 8、普通模式、字宽传输;引脚:CH1=PC0。 |
| 程序与数据路径 | main 配置时基、CH1 PWM 与 DMA 突发基址和长度,使能更新 DMA 请求后启动 DMA1_CH5;SRC_Buffer 的 8 个字一次写入突发缓冲区,之后由后台循环在 DmaAgain 置位时重复整个过程;程序用 DMA_GetFlagStatus 轮询 TC5 标志等待传输结束,再清标志准备下一次。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_ConfigDma、TIM_EnableDma、TIM_Enable、TIM_EnableCtrlPwmOutputs、DMA_Init、DMA_DeInit、DMA_RequestRemap、DMA_EnableChannel、DMA_GetFlagStatus、DMA_ClearFlag |
| 验证方法 | 用示波器观察 CH1(PC0)的 PWM; 突发传输写入后脉冲位置按 SRC_Buffer 一次成型,传输完成标志 TC5 置位后由循环再次触发。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 突发长度与 DMA 缓冲区大小必须一致,基址要指向对应的捕获比较数据寄存器。 |
核心代码解读与移植
示例用一次 DMA 突发把 8 个比较与捕获数据写入 ATIM1,用来描述一个脉冲的起止位置。
数据路径: SRC_Buffer[8] → DMA1_CH5(普通模式、字宽)→ TIMx->DADDR 突发缓冲区 → CH1 输出相应脉冲。
1. 时基、CH1 与突发基址一次配好。 周期 0xFFFF、CH1 比较值 0x8FFF,突发基址为捕获比较数据 1、长度为 8 个传输。
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 0xFFFF;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
/* TIM Configuration in PWM Mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 0x8FFF;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
/* TIMx DADDR Base register and DMA Burst Length Config */
TIM_ConfigDma(TIMx, TIM_DMABASE_CAPCMPDAT1, TIM_DMABURST_LENGTH_8TRANSFERS);
/* TIMx DMA Update enable */
TIM_EnableDma(TIMx, TIM_DMA_UPDATE, ENABLE);
/* TIMx enable */
TIM_Enable(TIMx, ENABLE);
2. DMA 通道用普通模式搬运 8 个字。 外设地址为 TIMx->DADDR、缓冲区大小 8、内存递增、字宽传输,并重映射到更新请求。
/* DMA Channel5 Config */
DMA_DeInit(DMA1_CH5);
DMA_StructInit(&DMA_InitStructure);
DMA_InitStructure.PeriphAddr = (uint32_t)&TIMx->DADDR;
DMA_InitStructure.MemAddr = (uint32_t)SRC_Buffer;
DMA_InitStructure.Direction = DMA_DIR_PERIPH_DST;
DMA_InitStructure.BufSize = 8;
DMA_InitStructure.PeriphInc = DMA_PERIPH_INC_DISABLE;
DMA_InitStructure.MemoryInc = DMA_MEM_INC_ENABLE;
DMA_InitStructure.PeriphDataSize = DMA_PERIPH_DATA_WIDTH_WORD;
DMA_InitStructure.MemDataSize = DMA_MEM_DATA_WIDTH_WORD;
DMA_InitStructure.CircularMode = DMA_MODE_NORMAL;
DMA_InitStructure.Priority = DMA_PRIORITY_HIGH;
DMA_InitStructure.Mem2Mem = DMA_M2M_DISABLE;
DMA_Init(DMA1_CH5, &DMA_InitStructure);
DMA_RequestRemap(DMA_REMAP_ATIM1_UP,DMA1_CH5, ENABLE);
3. 轮询传输完成标志。 使能通道后等待 TC5 置位,再清除全局与各通道标志。
/* DMA1 Channel5 enable */
DMA_EnableChannel(DMA1_CH5, ENABLE);
/* Wait until DMA1 Channel5 end of Transfer */
while (!DMA_GetFlagStatus(DMA_FLAG_TC5, DMA1))
{
}
DMA_ClearFlag(DMA_FLAG_GL5 | DMA_FLAG_TC5 | DMA_FLAG_HT5 | DMA_FLAG_TE5, DMA1);
4. 后台循环重复整个突发。 DmaAgain 置位时重新配置突发与 DMA,再启动通道等待传输完成。
while (1)
{
if (DmaAgain)
{
DmaAgain = 0;
TIM_ConfigDma(TIMx, TIM_DMABASE_CAPCMPDAT1, TIM_DMABURST_LENGTH_8TRANSFERS);
TIM_EnableDma(TIMx, TIM_DMA_UPDATE, ENABLE);
DMA_Configuration();
/* DMA1 Channel5 enable */
DMA_EnableChannel(DMA1_CH5, ENABLE);
/* Wait until DMA1 Channel5 end of Transfer */
while (!DMA_GetFlagStatus(DMA_FLAG_TC5, DMA1))
{
}
DMA_ClearFlag(DMA_FLAG_GL5 | DMA_FLAG_TC5 | DMA_FLAG_HT5 | DMA_FLAG_TE5, DMA1);
}
}
对应源码: src/main.c
5.27.3.7 ExtTrigger_Synchro 外部触发同步
工程目录: projects/n32h49x_EVAL/examples/TIM/ExtTrigger_Synchro/
使能 ATIM1、GTIM5、GTIM6 与引脚时钟→配置三路 CH1 与 TI2 引脚→三定时器设同一时基并配翻转输出→TIMx 用 TI2 门控触发并输出使能事件→GTIM5、GTIM6 逐级接收触发→使能计数并施加外部触发
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 以 CH2(TI2)的外部上升沿作为门控信号启停计数,CH1 以翻转模式输出; ATIM1 的使能事件再逐级门控 GTIM5 与 GTIM6,形成外部触发驱动的级联同步。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与三个定时器的时基、翻转输出、输入捕获与主从模式配置;inc/main.h:TIMx 为 ATIM1、TIMy 为 GTIM5、TIMz 为 GTIM6 及各路 CH1、CH2 引脚宏;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 ATIM1、TIMy 为 GTIM5、TIMz 为 GTIM6,Period 均为 73、Prescaler 2、ClkDiv DIV1;通道:三路 CH1 均为 OCMODE_TOGGLE,TIMx Pulse 64;触发:TIMx 触发输入选 TI2FP2 并进门控从模式,触发输出选使能事件、TIMy 选 ITR0、TIMz 选 ITR12; 输入捕获:TIMx CH2 上升沿、直接映射、不分频、滤波 0; 引脚:ATIM1 CH1=PA8、CH2=PA9、GTIM5 CH1=PA2、GTIM6 CH1=PD5。 |
| 程序与数据路径 | main 先为三个定时器设置相同时基,再配置 TIMx 的翻转输出与 TI2 输入捕获,并把 TIMx 设为门控从模式、触发输出为使能事件;TIMy、TIMz 分别以 ITR0、ITR12 接收上一级触发; 最后打开 TIMx 主输出并使能三个计数器,外部触发沿逐级传递。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitIcStruct、TIM_ICInit、TIM_SelectInputTrig、TIM_SelectSlaveMode、TIM_SelectMasterSlaveMode、TIM_SelectOutputTrig、TIM_EnableCtrlPwmOutputs、TIM_Enable |
| 验证方法 | 用信号发生器给 PA9(TI2)施加上升沿脉冲,用示波器观察 PA8、PA2、PD5; 每次外部触发同时启停三级定时器计数,三路翻转输出随触发沿变化。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 外部触发信号要接到 TI2 对应引脚,并把频率限制在定时器输入允许的范围内。 |
核心代码解读与移植
示例让 ATIM1 的门控启停由外部触发决定,再把这一使能事件逐级传给通用定时器。
数据路径: TI2 上升沿 → ATIM1 门控从模式启停计数 → ATIM1 使能事件作触发输出 → GTIM5(ITR0)→ GTIM6(ITR12)。
1. 三个定时器用同一套时基。 TIMx、TIMy、TIMz 的周期均为 73、预分频均为 2。
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 73;
TIM_TimeBaseStructure.Prescaler = 2;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 73;
TIM_InitTimeBase(TIMy, &TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 73;
TIM_InitTimeBase(TIMz, &TIM_TimeBaseStructure);
2. TIMx 配翻转输出并用 TI2 作门控触发。 CH1 翻转输出,CH2 直接映射作输入捕获,触发输入选 TI2FP2 并进入门控从模式。
/* Master Configuration in Toggle Mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_TOGGLE;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 64;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
/* TIMx Input Capture Configuration */
TIM_InitIcStruct(&TIM_ICInitStructure);
TIM_ICInitStructure.Channel = TIM_CH_2;
TIM_ICInitStructure.ICPolarity = TIM_IC_POLARITY_RISING;
TIM_ICInitStructure.ICSelection = TIM_IC_SELECTION_DIRECTTI;
TIM_ICInitStructure.ICPrescaler = TIM_IC_PSC_DIV1;
TIM_ICInitStructure.ICFilter = 0;
TIM_ICInit(TIMx, &TIM_ICInitStructure);
/* TIMx Input trigger configuration: External Trigger connected to TI2 */
TIM_SelectInputTrig(TIMx, TIM_TRIG_SEL_TI2FP2);
TIM_SelectSlaveMode(TIMx, TIM_SLAVE_MODE_GATED);
/* Select the Master Slave Mode */
TIM_SelectMasterSlaveMode(TIMx, TIM_MASTER_SLAVE_MODE_ENABLE);
/* Master Mode selection: TIMx */
TIM_SelectOutputTrig(TIMx, TIM_TRGO_SRC_ENABLE);
3. 使能事件逐级向下门控。 TIMx 触发输出选使能事件,TIMy、TIMz 分别用 ITR0、ITR12 接收。
/* Slave Mode selection: TIMy */
TIM_SelectInputTrig(TIMy, TIM_TRIG_SEL_IN_TR0);
TIM_SelectSlaveMode(TIMy, TIM_SLAVE_MODE_GATED);
/* Select the Master Slave Mode */
TIM_SelectMasterSlaveMode(TIMy, TIM_MASTER_SLAVE_MODE_ENABLE);
/* Master Mode selection: TIMy */
TIM_SelectOutputTrig(TIMy, TIM_TRGO_SRC_ENABLE);
/* Slave Mode selection: TIMz */
TIM_SelectInputTrig(TIMz, TIM_TRIG_SEL_IN_TR12);
TIM_SelectSlaveMode(TIMz, TIM_SLAVE_MODE_GATED);
4. 时钟与引脚使能。 三个定时器分别挂在 AHB 与 APB1,四路引脚分布在 GPIOA 与 GPIOD。
/* TIMx, GPIOx and AFIO clocks enable */
RCC_EnableAHBPeriphClk(TIMx_CLK,ENABLE);
RCC_EnableAPB1PeriphClk(TIMy_CLK | TIMz_CLK,ENABLE);
RCC_EnableAHB1PeriphClk(TIMx_CH1_GPIO_CLK | TIMx_CH2_GPIO_CLK |\
TIMy_CH1_GPIO_CLK | TIMz_CH1_GPIO_CLK,ENABLE);
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPHEN_AFIO,ENABLE);
对应源码: src/main.c
5.27.3.8 InputCapture 输入捕获测频
工程目录: projects/n32h49x_EVAL/examples/TIM/InputCapture/
使能 GTIM5 与 GPIO 时钟→配置 CH2 输入捕获与 PA3 输出引脚→使能 CC2 捕获中断与计数器→PA3 产生两个上升沿→捕获中断记录两次捕获值→用差值换算周期与频率
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM5 CH2 在输入捕获模式下测量 PA3 输出脉冲的周期,并在 CC2 中断里算出频率; 把 gOnePulsEn 置 1 后由 PA3 产生两个上升沿,捕获值之差即被测周期。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与 CH2 输入捕获、脉冲产生函数;src/n32h49x_it.c:TIMx_IRQHandler 读取两次捕获值并换算频率;inc/main.h:TIMx 为 GTIM5、CH2 引脚宏、中断号与全局变量声明;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 GTIM5,使用默认时基;输入捕获:CH2 上升沿、直接映射、不分频、滤波 0,并使能 CC2 中断; 引脚:CH2=PD2(复用)、PA3(推挽输出,用于产生被测脉冲); 中断:GTIM5_IRQn 抢占 1、子优先级 0; 计算:频率为 SystemCoreClock/2 除以两次捕获值之差,跨零时按 0xFFFF 折返。 |
| 程序与数据路径 | main 配置 CH2 输入捕获与 CC2 中断,使能计数器后循环调用 GenTwoRisingEdge;把 gOnePulsEn 置 1 时,GenTwoRisingEdge 在 PA3 上产生两个上升沿;TIMx_IRQHandler 连续捕获两个上升沿,用差值算出周期与频率。 |
| 主要 API | TIM_InitIcStruct、TIM_ICInit、TIM_ClrIntPendingBit、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_GetCap2 |
| 验证方法 | 把 gOnePulsEn 置 1 后,用示波器观察 PA3 的双上升沿与 PD2 的捕获输入;在 Capture、TIMxFreq 变量上可看到周期与频率结果。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 被测周期不能超过计数器满量程,否则要用捕获预分频或按折返逻辑处理。 |
核心代码解读与移植
示例用通用定时器的输入捕获通道测出一个脉冲的周期,并在中断中换算成频率。
数据路径: PA3 输出脉冲 → GTIM5 CH2 输入捕获 → CC2 中断记录两次捕获值 → 差值换算周期与频率。
1. CH2 配成上升沿输入捕获并使能 CC2 中断。 直接映射、不分频、滤波 0,清标志后打开 CC2 中断。
TIM_InitIcStruct(&TIM_ICInitStructure);
TIM_ICInitStructure.Channel = TIM_CH_2;
TIM_ICInitStructure.ICPolarity = TIM_IC_POLARITY_RISING;
TIM_ICInitStructure.ICSelection = TIM_IC_SELECTION_DIRECTTI;
TIM_ICInitStructure.ICPrescaler = TIM_IC_PSC_DIV1;
TIM_ICInitStructure.ICFilter = 0x0;
TIM_ICInit(TIMx, &TIM_ICInitStructure);
TIM_ClrIntPendingBit(TIMx,TIM_INT_UPDATE);
TIM_ClrIntPendingBit(TIMx,TIM_INT_CC2);
/* Enable the CC2 Interrupt Request */
TIM_ConfigInt(TIMx, TIM_INT_CC2, ENABLE);
/* TIM enable counter */
TIM_Enable(TIMx, ENABLE);
2. 用推挽输出引脚产生被测脉冲。 CH2 对应引脚配复用,PA3 配推挽输出用于产生信号。
/* GPIOx Configuration: Pin of TIMx */
GPIO_InitStructure.Pin = TIMx_CH2_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_SLOW;
GPIO_InitStructure.GPIO_Alternate = TIMx_CH2_GPIO_AF;
GPIO_InitPeripheral(TIMx_CH2_GPIO_PORT, &GPIO_InitStructure);
/* GPIOx Configuration: Pin of TIMx */
GPIO_InitStructure.Pin = GPIO_PIN_3;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
3. 捕获中断用两次捕获值算周期。 第一次存起始值,第二次与起始值相减;跨零时按 0xFFFF 折返,再换算频率。
void TIMx_IRQHandler(void)
{
if (TIM_GetIntStatus(TIMx, TIM_INT_CC2) == SET)
{
TIMxEnterIrqCnt++;
/* Clear TIMx Capture compare interrupt pending bit */
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC2);
if (CaptureNumber == 0)
{
/* Get the Input Capture value */
IC3ReadValue1 = TIM_GetCap2(TIMx);
CaptureNumber = 1;
}
else if (CaptureNumber == 1)
{
/* Get the Input Capture value */
IC3ReadValue2 = TIM_GetCap2(TIMx);
/* Capture computation */
if (IC3ReadValue2 > IC3ReadValue1)
{
Capture = (IC3ReadValue2 - IC3ReadValue1);
}
else
{
Capture = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
}
/* Frequency computation */
TIMxFreq = (uint32_t)(SystemCoreClock/2) / Capture;
CaptureNumber = 0;
}
}
}
4. 由一个小标志驱动脉冲输出。 gOnePulsEn 置 1 时在 PA3 上输出两个上升沿,供 CH2 捕获。
void GenTwoRisingEdge(void)
{
if (gOnePulsEn)
{
gOnePulsEn = 0;
GPIO_SetBits(GPIOA, GPIO_PIN_3);
{
volatile uint32_t i = 0;
while (i++ < 10)
;
}
GPIO_ResetBits(GPIOA, GPIO_PIN_3);
{
volatile uint32_t i = 0;
while (i++ < 10)
;
}
GPIO_SetBits(GPIOA, GPIO_PIN_3);
{
volatile uint32_t i = 0;
while (i++ < 10)
;
}
GPIO_ResetBits(GPIOA, GPIO_PIN_3);
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.9 OCActive 输出比较有效电平
工程目录: projects/n32h49x_EVAL/examples/TIM/OCActive/
使能 GTIM1 时钟与四路通道引脚→算出预分频值并配置时基→四路通道配成有效电平模式→关闭四路输出比较预装载→使能自动重载预装载与计数器→观察四路依次翻转的波形
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM1 四路输出比较通道均设为有效电平模式,比较值分别为 1000、500、250、125; 计数到相应比较值时通道翻转到有效电平并保持不变,四路延时依次递增。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与 GTIM1 时基、四路输出比较通道配置;inc/main.h:TIMx 为 GTIM1 与四路通道引脚宏;src/n32h49x_it.c、inc/n32h49x_it.h:中断服务函数;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 GTIM1,Prescaler 由 (SystemCoreClock/2)/2000-1 得到、Period 65535、ClkDiv DIV1;通道:CH1~CH4 均为 OCMODE_ACTIVE,比较值为 1000/500/250/125,输出使能、极性高;预装载:四路输出比较预装载关闭,自动重载预装载使能; 引脚:CH1=PA5、CH2=PA1、CH3=PA2、CH4=PA3,均复用推挽; 时钟:计数时钟为 SystemCoreClock/2 分频后约 2 kHz 的计数节拍。 |
| 程序与数据路径 | main 先算出预分频值并配置时基,再依次配置四路输出比较通道并把预装载关闭;随后使能自动重载预装载与计数器; 四路比较值为固定常量,计数到各自比较值时对应通道翻转到有效电平。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_ConfigOc1Preload、TIM_ConfigOc2Preload、TIM_ConfigOc3Preload、TIM_ConfigOc4Preload、TIM_ConfigArPreload、TIM_Enable |
| 验证方法 | 用示波器同时观察 PA5、PA1、PA2、PA3; 各通道在计数到对应比较值时翻转到有效电平,比较值越小翻转越早。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 四路通道共用同一个计数器,比较值决定各自的翻转时刻,改动时保持比较值小于周期值。 |
核心代码解读与移植
示例让四路输出比较通道在同一计数周期内先后翻转到有效电平,用来演示有效电平模式。
数据路径: 预分频后的计数时钟 → 计数器递增 → 与四路比较值逐一比较 → 对应通道翻转到有效电平。
1. 预分频值由系统时钟算出。 计数时钟取 SystemCoreClock/2,预分频到约 2 kHz,周期为 65535。
/*Compute the prescaler value */
PrescalerValue = (uint16_t)((SystemCoreClock/2)/2000) - 1;
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
2. 四路都用有效电平模式并关闭预装载。 比较值为 1000/500/250/125,预装载关闭让比较值立即生效。
/* Output Compare Active Mode configuration: Channel1 */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_ACTIVE;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR1_Val;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc1Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Active Mode configuration: Channel2 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR2_Val;
TIM_InitOc2(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc2Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Active Mode configuration: Channel3 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR3_Val;
TIM_InitOc3(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc3Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Active Mode configuration: Channel4 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR4_Val;
TIM_InitOc4(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc4Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
3. 自动重载预装载与计数器使能。 打开自动重载预装载后使能计数器。
TIM_ConfigArPreload(TIMx, ENABLE);
/* TIM3 enable counter */
TIM_Enable(TIMx, ENABLE);
4. 四路输出引脚同为复用推挽。 CH1~CH4 分别对应 PA5、PA1、PA2、PA3。
/* GPIOx Configuration: Pin of TIMx */
GPIO_InitStructure.Pin = TIMx_CH1_GPIO_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_SLOW;
GPIO_InitStructure.GPIO_Alternate = TIMx_CH1_GPIO_AF;
GPIO_InitPeripheral(TIMx_CH1_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = TIMx_CH2_GPIO_PIN;
GPIO_InitStructure.GPIO_Alternate = TIMx_CH2_GPIO_AF;
GPIO_InitPeripheral(TIMx_CH2_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = TIMx_CH3_GPIO_PIN;
GPIO_InitStructure.GPIO_Alternate = TIMx_CH3_GPIO_AF;
GPIO_InitPeripheral(TIMx_CH3_GPIO_PORT, &GPIO_InitStructure);
GPIO_InitStructure.Pin = TIMx_CH4_GPIO_PIN;
GPIO_InitStructure.GPIO_Alternate = TIMx_CH4_GPIO_AF;
GPIO_InitPeripheral(TIMx_CH4_GPIO_PORT, &GPIO_InitStructure);
对应源码: src/main.c
5.27.3.10 OCInactive 输出比较无效电平
工程目录: projects/n32h49x_EVAL/examples/TIM/OCInactive/
使能 GTIM2、GPIO 与 NVIC 时钟和中断→配置 PA1~PA4 为推挽输出→算出预分频值并配置时基→四路通道配成无效电平模式→使能四路比较中断并把引脚置高→中断按通道复位对应引脚
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM2 四路输出比较通道设为无效电平模式,计数器计数到各比较值时触发中断; 中断分别把 PA1~PA4 复位到低电平,用来演示比较事件与软件复位的配合。 |
| 源码组成 | src/main.c:时钟、NVIC、GPIO 配置与 GTIM2 时基、四路输出比较通道配置;src/n32h49x_it.c:GTIM2_IRQHandler 按通道清标志并复位引脚;inc/main.h:引脚与中断号等宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 GTIM2,Prescaler 由 (SystemCoreClock/2)/2000-1 得到、Period 65535、ClkDiv DIV1;通道:CH1~CH4 均为 OCMODE_INACTIVE,比较值 1000/500/250/125,输出使能、极性高;预装载:四路输出比较预装载关闭,自动重载预装载使能; 中断:使能 CC1~CC4 中断,GTIM2_IRQn 抢占 1、子优先级 0; 引脚:PA1~PA4 推挽输出,启动前由软件置位。 |
| 程序与数据路径 | main 配置时基与四路无效电平通道,使能四路捕获比较中断后把 PA1~PA4 置位;计数到各比较值时对应通道产生比较事件, GTIM2_IRQHandler 按通道清标志并复位对应引脚;四路比较值不同,引脚被复位到低电平的时刻也不同。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_ConfigOc1Preload、TIM_ConfigArPreload、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_ClrIntPendingBit |
| 验证方法 | 用示波器观察 PA1~PA4; 四个引脚上电后被置高,计数到各自比较值时先后被中断复位到低电平。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 中断里复位引脚后要清对应标志,避免重复进入,多通道共用中断时按通道分别判断。 |
核心代码解读与移植
示例让四路输出比较事件在计数周期内先后触发中断,由中断把对应引脚复位到低电平。
数据路径: 计数时钟 → 与四路比较值比较 → 相应 CCx 中断 → 复位 PA1~PA4。
1. 预分频与时基固定。 计数时钟取 SystemCoreClock/2 分频到约 2 kHz,周期为 65535。
/* Compute the prescaler value */
PrescalerValue = (uint16_t)((SystemCoreClock/2)/ 2000) - 1;
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(GTIM2, &TIM_TimeBaseStructure);
2. 四路都用无效电平模式并关闭预装载。 比较值为 1000/500/250/125,预装载关闭让比较值立即生效。
/* Output Compare Active Mode configuration: Channel1 */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_INACTIVE;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR1_Val;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc1Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Active Mode configuration: Channel2 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR2_Val;
TIM_InitOc2(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc2Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Active Mode configuration: Channel3 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR3_Val;
TIM_InitOc3(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc3Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Active Mode configuration: Channel4 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR4_Val;
TIM_InitOc4(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc4Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
3. 使能四路比较中断并把引脚置高。 使能 CC1~CC4 中断,启动前把 PA1~PA4 置位,再使能计数器。
/* TIM IT enable */
TIM_ConfigInt(GTIM2, TIM_INT_CC1 | TIM_INT_CC2 | TIM_INT_CC3 | TIM_INT_CC4, ENABLE);
/* Set output pins */
GPIO_SetBits(GPIOA, GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4);
/* TIM2 enable counter */
TIM_Enable(GTIM2, ENABLE);
4. 中断按通道清标志并复位引脚。 每个比较事件到来时清对应标志并复位对应引脚。
void GTIM2_IRQHandler(void)
{
if (TIM_GetIntStatus(GTIM2, TIM_INT_CC1) != RESET)
{
/* Clear GTIM2 Capture Compare1 interrupt pending bit*/
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC1);
GPIO_ResetBits(GPIOA, GPIO_PIN_1);
}
else if (TIM_GetIntStatus(GTIM2, TIM_INT_CC2) != RESET)
{
/* Clear GTIM2 Capture Compare2 interrupt pending bit*/
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC2);
GPIO_ResetBits(GPIOA, GPIO_PIN_2);
}
else if (TIM_GetIntStatus(GTIM2, TIM_INT_CC3) != RESET)
{
/* Clear GTIM2 Capture Compare3 interrupt pending bit*/
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC3);
GPIO_ResetBits(GPIOA, GPIO_PIN_3);
}
else
{
/* Clear GTIM2 Capture Compare4 interrupt pending bit*/
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC4);
GPIO_ResetBits(GPIOA, GPIO_PIN_4);
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.11 OCToggle 输出比较翻转
工程目录: projects/n32h49x_EVAL/examples/TIM/OCToggle/
使能 GTIM1 时钟与四路通道引脚→算出预分频值并配置时基→四路通道配成翻转模式→关闭预装载并清各中断标志→使能四路比较中断与计数器→中断动态改写下一次翻转点
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM1 四路输出比较通道设为翻转模式,周期取 0xFFFFFFFF; 每次比较中断把下一个比较值设为当前计数值加 CCRx_Val,得到四路不同频率的方波。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与 GTIM1 时基、四路翻转通道配置;src/n32h49x_it.c:TIMx_IRQHandler 在中断里更新各通道比较值;inc/main.h:TIMx 为 GTIM1、四路引脚宏与中断号;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 GTIM1,Prescaler 由 (SystemCoreClock/2)/6000000-1 得到、Period 0xFFFFFFFF、ClkDiv DIV1;通道:CH1~CH4 均为 OCMODE_TOGGLE,比较初值 32768/16384/8192/4096,输出使能、极性低;预装载:四路输出比较预装载关闭; 中断:使能 CC1~CC4 中断,GTIM1_IRQn 抢占 1、子优先级 0; 引脚:CH1=PA5、CH2=PA1、CH3=PA2、CH4=PA3。 |
| 程序与数据路径 | main 配置时基与四路翻转通道、关闭预装载并清各标志,随后使能四路比较中断与计数器;TIMx_IRQHandler 在每次比较事件时读取当前计数值并加上对应 CCRx_Val,写回比较寄存器形成下一次翻转点;四路比较增量不同,输出频率也不同。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_ConfigOc1Preload、TIM_ClrIntPendingBit、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_GetCap1、TIM_SetCmp1 |
| 验证方法 | 用示波器观察 PA5、PA1、PA2、PA3; 四路翻转输出频率不同,比较增量越大周期越长。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 翻转模式下要在中断里及时更新比较值,长时间不更新会让输出停在固定电平。 |
核心代码解读与移植
示例用输出比较翻转模式把四路通道做成不同频率的方波,翻转点由中断动态更新。
数据路径: 计数时钟 → 比较匹配 → CCx 中断 → 读当前计数值加 CCRx_Val 写回比较寄存器 → 通道翻转。
1. 预分频与时基覆盖整个计数范围。 计数时钟取 SystemCoreClock/2 分频到 6 MHz,周期取 0xFFFFFFFF。
/* Compute the prescaler value */
PrescalerValue = (uint16_t)((SystemCoreClock/2)/ 6000000) - 1;
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 0xFFFFFFFF;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
2. 四路都用翻转模式并关闭预装载。 比较初值为 32768/16384/8192/4096,预装载关闭让比较值立即生效。
/* Output Compare Toggle Mode configuration: Channel1 */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_TOGGLE;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR1_Val;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_LOW;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc1Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Toggle Mode configuration: Channel2 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR2_Val;
TIM_InitOc2(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc2Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Toggle Mode configuration: Channel3 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR3_Val;
TIM_InitOc3(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc3Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Toggle Mode configuration: Channel4 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR4_Val;
TIM_InitOc4(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc4Preload(TIMx, TIM_OC_PRE_LOAD_DISABLE);
3. 清标志后使能四路比较中断与计数器。 先清更新与四路 CC 标志,再使能中断和计数。
TIM_ClrIntPendingBit(TIMx, TIM_INT_UPDATE);
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC1);
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC2);
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC3);
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC4);
/* TIM IT enable */
TIM_ConfigInt(TIMx, TIM_INT_CC1 | TIM_INT_CC2 | TIM_INT_CC3 | TIM_INT_CC4, ENABLE);
/* TIM enable counter */
TIM_Enable(TIMx, ENABLE);
4. 中断里动态改写下一次翻转点。 每次比较事件读取当前计数值,加上对应增量写回比较寄存器。
void TIMx_IRQHandler(void)
{
/* TIMx_CH1 toggling */
if (TIM_GetIntStatus(TIMx, TIM_INT_CC1) != RESET)
{
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC1);
capture = TIM_GetCap1(TIMx);
TIM_SetCmp1(TIMx, capture + CCR1_Val);
}
/* TIMx_CH2 toggling */
if (TIM_GetIntStatus(TIMx, TIM_INT_CC2) != RESET)
{
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC2);
capture = TIM_GetCap2(TIMx);
TIM_SetCmp2(TIMx, capture + CCR2_Val);
}
/* TIMx_CH3 toggling */
if (TIM_GetIntStatus(TIMx, TIM_INT_CC3) != RESET)
{
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC3);
capture = TIM_GetCap3(TIMx);
TIM_SetCmp3(TIMx, capture + CCR3_Val);
}
/* TIM3_CH4 toggling */
if (TIM_GetIntStatus(TIMx, TIM_INT_CC4) != RESET)
{
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC4);
capture = TIM_GetCap4(TIMx);
TIM_SetCmp4(TIMx, capture + CCR4_Val);
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.12 OnePulse 单脉冲输出
工程目录: projects/n32h49x_EVAL/examples/TIM/OnePulse/
使能 GTIM1 与通道引脚时钟→配置计数时基→通道 1 配成 PWM2 输出→通道 2 配成输入捕获→选单脉冲模式与触发源→从模式设为触发启动
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM1 配置为单脉冲模式; 外部信号从 CH2 上升沿触发,通道 1 输出一个宽度由 Period 与 Pulse 决定的脉冲。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与单脉冲模式、通道输出、输入捕获配置;src/n32h49x_it.c:仅保留异常处理与空中断入口;inc/main.h:TIMx 为 GTIM1、两路引脚宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 时基:TIMx 为 GTIM1,Prescaler 由 (SystemCoreClock/2)/6000000-1 得到、Period 65535、ClkDiv DIV1;通道 1: OCMODE_PWM2,比较值 16383,使能输出、极性高;通道 2:上升沿输入捕获,直接映射、不分频、滤波 0; 模式:单脉冲单次模式、触发源 TI2FP2、从模式为触发模式; 引脚:CH1=PA5、CH2=PA1、PA3 为普通推挽输出用于手动触发。 |
| 程序与数据路径 | main 依次配置时钟、GPIO、时基、通道 1 的 PWM2 输出、通道 2 的输入捕获,并选好单脉冲、触发源与从模式;主循环调用手动触发发送函数; 外部上升沿到来后计数器启动一次并输出一个脉冲,随后自动停止等待下一次触发。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitIcStruct、TIM_ICInit、TIM_SelectOnePulseMode、TIM_SelectInputTrig、TIM_SelectSlaveMode |
| 验证方法 | 用示波器观察 PA5 与 PA1; PA1 每收到一个上升沿,PA5 输出一个脉冲,脉冲宽度与 Period 减 Pulse 的差值成正比。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 单脉冲模式下每次触发只输出一个脉冲,需要连续输出要反复给出触发沿。 |
核心代码解读与移植
示例把 GTIM1 配成由外部上升沿触发的单脉冲输出,脉冲宽度由自动重装值与比较值之差决定。
数据路径: 外部触发沿 → 从模式触发启动计数 → 通道 1 PWM2 输出一个脉冲 → 计数到 Period 后停止。
1. 计数时钟与时基决定单脉冲基准。 计数时钟由 SystemCoreClock/2 分频到 6 MHz,Period 取 65535。
/* Compute the prescaler value */
PrescalerValue = (uint16_t)((SystemCoreClock/2) / 6000000) - 1;
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
2. 通道 1 用 PWM2 输出单脉冲。 比较值取 16383,Period 减 Pulse 的差值就是单脉冲宽度对应的计数值。
/* TIMx PWM2 Mode configuration: Channel1 */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM2;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 16383;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
3. 通道 2 配上升沿捕获并选出触发源与从模式。 捕获极性上升、直接映射、不分频、滤波 0,触发源选 TI2FP2,从模式为触发模式。
TIM_InitIcStruct(&TIM_ICInitStructure);
TIM_ICInitStructure.Channel = TIM_CH_2;
TIM_ICInitStructure.ICPolarity = TIM_IC_POLARITY_RISING;
TIM_ICInitStructure.ICSelection = TIM_IC_SELECTION_DIRECTTI;
TIM_ICInitStructure.ICPrescaler = TIM_IC_PSC_DIV1;
TIM_ICInitStructure.ICFilter = 0;
TIM_ICInit(TIMx, &TIM_ICInitStructure);
/* One Pulse Mode selection */
TIM_SelectOnePulseMode(TIMx, TIM_OPMODE_SINGLE);
/* Input Trigger selection */
TIM_SelectInputTrig(TIMx, TIM_TRIG_SEL_TI2FP2);
/* Slave Mode selection: Trigger Mode */
TIM_SelectSlaveMode(TIMx, TIM_SLAVE_MODE_TRIG);
对应源码: src/main.c
5.27.3.13 Parallel_Synchro 并行同步
工程目录: projects/n32h49x_EVAL/examples/TIM/Parallel_Synchro/
使能三路定时器与引脚时钟→配置主定时器时基与 PWM1→主定时器以更新事件作触发输出→配备从定时器时基与 PWM1→从定时器选门控模式与输入触发→先使能从定时器再使能主定时器
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM2 作主定时器输出 PWM 并用更新事件触发; GTIM5、GTIM6 作从定时器工作在门控模式,由主定时器触发信号控制启停。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与主从定时器、PWM1 输出、门控触发配置;src/n32h49x_it.c:仅保留异常处理入口;inc/main.h:TIMx/TIMy/TIMz 分别为 GTIM2/GTIM5/GTIM6 及三路引脚宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 主定时器:TIMx 为 GTIM2,Period 255、Prescaler 0、PWM1、比较值 64,主从模式使能、触发输出选更新事件;从定时器: TIMy 为 GTIM5(Period 9)、TIMz 为 GTIM6(Period 4),均为 PWM1、比较值 3;从模式:两个从定时器均为门控模式,输入触发选 ITR2; 引脚:GTIM2_CH1=PA6、GTIM5_CH1=PA2、GTIM6_CH1=PD5。 |
| 程序与数据路径 | main 配置三路时基与 PWM1 输出,主定时器输出更新事件并做主从使能,两个从定时器选门控模式与 ITR2 触发;先使能从定时器再使能主定时器; 主定时器每次更新事件控制从定时器计数,从定时器按各自周期与比较值输出 PWM。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_SelectMasterSlaveMode、TIM_SelectOutputTrig、TIM_SelectSlaveMode、TIM_SelectInputTrig、TIM_Enable |
| 验证方法 | 用示波器观察 PA6、PA2、PD5; 从定时器输出频率为主定时器频率的整数分频,占空比由各自比较值决定。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 门控模式下从定时器只在主定时器触发有效时计数,先使能从定时器再使能主定时器可避免启动阶段丢失触发。 |
核心代码解读与移植
示例用一个主定时器的更新事件并行触发两个门控从定时器,输出与主定时器同相位的分频 PWM。
数据路径: 主定时器计数 → 更新事件 → 触发输出 → 从定时器门控使能 → 从定时器计数输出 PWM。
1. 主从三路时基为同步打基础。 主定时器 Period 取 255,两个从定时器分别取 9 与 4。
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 255;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 9;
TIM_InitTimeBase(TIMy, &TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 4;
TIM_InitTimeBase(TIMz, &TIM_TimeBaseStructure);
2. 主定时器用 PWM1 并输出更新事件。 比较值 64,主从使能后触发输出选更新事件。
/* Master Configuration in PWM1 Mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 64;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
/* Select the Master Slave Mode */
TIM_SelectMasterSlaveMode(TIMx, TIM_MASTER_SLAVE_MODE_ENABLE);
/* Master Mode selection */
TIM_SelectOutputTrig(TIMx, TIM_TRGO_SRC_UPDATE);
3. 两个从定时器配 PWM1 与门控触发。 比较值 3,从模式门控、输入触发选 ITR2。
/* Slaves Configuration: PWM1 Mode */
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 3;
TIM_InitOc1(TIMy, &TIM_OCInitStructure);
TIM_InitOc1(TIMz, &TIM_OCInitStructure);
/* Slave Mode selection: TIMy */
TIM_SelectSlaveMode(TIMy, TIM_SLAVE_MODE_GATED);
TIM_SelectInputTrig(TIMy, TIM_TRIG_SEL_IN_TR2);
/* Slave Mode selection: TIMz */
TIM_SelectSlaveMode(TIMz, TIM_SLAVE_MODE_GATED);
TIM_SelectInputTrig(TIMz, TIM_TRIG_SEL_IN_TR2);
4. 先使能从定时器再使能主定时器。 保证触发到来前从定时器已就绪。
/* TIM enable counter */
TIM_Enable(TIMy, ENABLE);
TIM_Enable(TIMx, ENABLE);
TIM_Enable(TIMz, ENABLE);
对应源码: src/main.c
5.27.3.14 PWM_Input PWM 输入捕获
工程目录: projects/n32h49x_EVAL/examples/TIM/PWM_Input/
使能 GTIM1 与通道引脚时钟→配置 PWM 输入捕获→选输入触发与复位从模式→使能计数器与 CC2 中断→主循环在 PA3 产生方波→捕获中断算占空比与频率
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM1 工作在 PWM 输入模式; 外部 PWM 从 CH2 输入,硬件用两路捕获分别得到周期与高电平宽度,中断里算出频率和占空比。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与 PWM 输入捕获、从模式配置;src/n32h49x_it.c:TIMx_IRQHandler 计算占空比与频率;inc/main.h:TIMx 为 GTIM1、引脚与中断宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 GTIM1;捕获:通道 2 上升沿、直接映射、不分频、滤波 0,用 PWM 输入方式同时占用两路捕获; 从模式:输入触发选 TI2FP2、复位模式、主从模式使能; 中断:使能 CC2 中断,GTIM1_IRQn 抢占 1、子优先级 0; 引脚:CH2=PA1,PA3 为普通推挽输出用作信号源。 |
| 程序与数据路径 | main 配置 PWM 输入捕获、输入触发、复位从模式与主从使能,随后使能计数器和 CC2 中断;主循环在 PA3 上产生方波并可回接到 PA1; 每次 CC2 捕获中断读取捕获值,用 CC2 算周期与频率、用 CC1 算占空比。 |
| 主要 API | TIM_InitIcStruct、TIM_ConfigPwmIc、TIM_SelectInputTrig、TIM_SelectSlaveMode、TIM_SelectMasterSlaveMode、TIM_Enable、TIM_ConfigInt、TIM_ClrIntPendingBit、TIM_GetCap2、TIM_GetCap1 |
| 验证方法 | 用示波器或调试变量观察; 若把 PA3 的方波回接到 PA1,中断里的频率与占空比会随方波变化。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; PWM 输入模式需要外部信号接入 CH2,验证时可用本示例在 PA3 产生的方波回接。 |
核心代码解读与移植
示例用一路 PWM 输入捕获同时测出输入信号的周期与高电平宽度,从而得到频率和占空比。
数据路径: 外部 PWM → CH2 上升沿 → CC2 捕获周期、CC1 捕获高电平 → CC2 中断计算频率与占空比。
1. 用 PWM 输入方式一次占用两路捕获。 通道 2 上升沿、直接映射、不分频、滤波 0,由 TIM_ConfigPwmIc 完成配置。
TIM_InitIcStruct(&TIM_ICInitStructure);
TIM_ICInitStructure.Channel = TIM_CH_2;
TIM_ICInitStructure.ICPolarity = TIM_IC_POLARITY_RISING;
TIM_ICInitStructure.ICSelection = TIM_IC_SELECTION_DIRECTTI;
TIM_ICInitStructure.ICPrescaler = TIM_IC_PSC_DIV1;
TIM_ICInitStructure.ICFilter = 0x0;
TIM_ConfigPwmIc(TIMx, &TIM_ICInitStructure);
2. 选输入触发、复位从模式并启动计数。 复位从模式让每次上升沿把计数器清零,便于测量周期。
/* Select the TIM3 Input Trigger: TI2FP2 */
TIM_SelectInputTrig(TIMx, TIM_TRIG_SEL_TI2FP2);
/* Select the slave Mode: Reset Mode */
TIM_SelectSlaveMode(TIMx, TIM_SLAVE_MODE_RESET);
/* Enable the Master/Slave Mode */
TIM_SelectMasterSlaveMode(TIMx, TIM_MASTER_SLAVE_MODE_ENABLE);
/* TIM enable counter */
TIM_Enable(TIMx, ENABLE);
/* Enable the CC2 Interrupt Request */
TIM_ConfigInt(TIMx, TIM_INT_CC2, ENABLE);
3. 使能 CC2 中断并在中断里算频率与占空比。 用 CC2 捕获值算周期与频率,用 CC1 捕获值算占空比。
void TIMx_IRQHandler(void)
{
/* Clear TIMx Capture compare interrupt pending bit */
TIM_ClrIntPendingBit(TIMx, TIM_INT_CC2);
/* Get the Input Capture value */
IC2Value = TIM_GetCap2(TIMx);
if (IC2Value != 0)
{
/* Duty cycle computation */
DutyCycle = (TIM_GetCap1(TIMx) * 100) / IC2Value;
/* Frequency computation */
Frequency = SystemCoreClock / IC2Value;
}
else
{
DutyCycle = 0;
Frequency = 0;
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.15 PWM_Output PWM 输出
工程目录: projects/n32h49x_EVAL/examples/TIM/PWM_Output/
使能 GTIM1 与四路引脚时钟→计算预分频并配置时基→四路通道配成 PWM1→使能各通道输出比较预装载→使能自动重装预装载→使能计数器
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM1 四路通道输出四种不同占空比的 PWM; 周期固定、比较值不同,PA5/PA1/PA2/PA3 分别得到约 50%、25%、12.5%、6.25% 的占空比。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与四路 PWM1 输出、预装载配置;src/n32h49x_it.c:仅保留异常处理入口;inc/main.h:TIMx 为 GTIM1 及四路引脚宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:TIMx 为 GTIM1,Prescaler 由 SystemCoreClock/12000000-1 得到、Period 1200、ClkDiv DIV1;通道:CH1~CH4 均为 OCMODE_PWM1,比较值 600/300/150/75,使能输出、极性高;预装载:四路输出比较预装载使能,自动重装预装载使能; 引脚:CH1=PA5、CH2=PA1、CH3=PA2、CH4=PA3。 |
| 程序与数据路径 | main 算出预分频、配置时基,再把四路通道都配成 PWM1 并分别写比较值,最后使能预装载与计数器;占空比由比较值与 Period 之比决定; 输出频率由计数时钟与 Period 决定。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_ConfigOc1Preload、TIM_ConfigOc2Preload、TIM_ConfigOc3Preload、TIM_ConfigOc4Preload、TIM_ConfigArPreload、TIM_Enable |
| 验证方法 | 用示波器观察 PA5、PA1、PA2、PA3; 四路周期相同,占空比依次减半。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 输出比较预装载使能后,新的比较值在更新事件时生效,运行中改写比较值不会产生毛刺。 |
核心代码解读与移植
示例用同一路时基让四个通道输出同频不同占空比的 PWM,并在运行中随时改写比较值。
数据路径: 计数时钟 → 与各通道比较值比较 → 四路 PWM1 输出不同占空比。
1. 用一个时基统一定义四路 PWM 周期。 计数时钟由 SystemCoreClock/12000000 得到 12 MHz,Period 取 1200。
PrescalerValue = (uint32_t)(SystemCoreClock / 12000000) - 1;
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 1200;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIMx, &TIM_TimeBaseStructure);
2. 四路通道都配 PWM1 并设不同比较值。 比较值 600/300/150/75,使能输出、极性高,并打开各路输出比较预装载。
/* PWM1 Mode configuration: Channel1 */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR1_Val;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc1Preload(TIMx, TIM_OC_PRE_LOAD_ENABLE);
/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR2_Val;
TIM_InitOc2(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc2Preload(TIMx, TIM_OC_PRE_LOAD_ENABLE);
/* PWM1 Mode configuration: Channel3 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR3_Val;
TIM_InitOc3(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc3Preload(TIMx, TIM_OC_PRE_LOAD_ENABLE);
/* PWM1 Mode configuration: Channel4 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR4_Val;
TIM_InitOc4(TIMx, &TIM_OCInitStructure);
TIM_ConfigOc4Preload(TIMx, TIM_OC_PRE_LOAD_ENABLE);
3. 使能自动重装预装载后启动计数。 自动重装也用预装载,写 Period 时在更新事件生效。
TIM_ConfigArPreload(TIMx, ENABLE);
/* TIMx enable counter */
TIM_Enable(TIMx, ENABLE);
对应源码: src/main.c
5.27.3.16 Quadrature_Output 正交输出
工程目录: projects/n32h49x_EVAL/examples/TIM/Quadrature_Output/
使能各路时钟与引脚→配置 GTIM7 四路 PWM2 输出→分别配置四个从定时器时基→从定时器选触发从模式与输入触发→使能高级定时器主输出→使能 GTIM7 计数器
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM7 的四路通道分别触发 ATIM1、ATIM2、GTIM8、GTIM9 的 CH1 输出; 四路输出相对参考相位差依次为 90、180、270 度。 |
| 源码组成 | src/main.c:时钟、GPIO 配置与主定时器四路 PWM2、四个从定时器配置;src/n32h49x_it.c:仅保留异常处理入口;inc/main.h:四路引脚宏;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 主定时器:GTIM7,Period 1199、PWM2、四路比较值 149/299/449/599;从定时器:ATIM1 与 ATIM2 的 CapCh2Sel 为 1、GTIM8 与 GTIM9 为 4,四路 Period 均 599、PWM2、比较值 299;从模式:四路均为触发模式、输入触发选 TI2FP2; 输出:四个定时器用 TIM_EnableCtrlPwmOutputs 打开主输出;引脚:PC0、PD14、PB14、PA6。 |
| 程序与数据路径 | main 先配置 GTIM7 的四路 PWM2 触发源,再分别配置四个从定时器,最后使能各主输出与 GTIM7 计数;GTIM7 每路比较事件经输入触发启动对应从定时器的一次输出; 各从定时器选择不同的捕获通道映射,形成 90 度步进的相位差。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc2、TIM_InitOc3、TIM_InitOc4、TIM_SelectSlaveMode、TIM_SelectInputTrig、TIM_EnableCtrlPwmOutputs、TIM_Enable |
| 验证方法 | 用示波器观察 PC0、PD14、PB14、PA6; 四路波形同频,两两相位差为 90、180、270 度。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 高级定时器输出还要用主输出使能打开 MOEN,否则通道引脚不会有波形。 |
核心代码解读与移植
示例让一个通用定时器的四路通道分别触发起另外四个定时器,得到相位依次相差 90 度的多路输出。
数据路径: GTIM7 四路比较 → 触发从定时器 → 从定时器按所选捕获映射计数 → 多相 PWM 输出。
1. GTIM7 用四路 PWM2 作触发源。 四路比较值 149/299/449/599,为四路输出提供相位基准。
/* Time Base configuration */
PrescalerValue = (uint32_t)(SystemCoreClock / 12000000) - 1;
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 1199;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(GTIM7, &TIM_TimeBaseStructure);
/* Channel 1 Configuration in PWM mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM2;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 149;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(GTIM7, &TIM_OCInitStructure);
/* Channel 2 Configuration in PWM mode */
TIM_OCInitStructure.Pulse = 299;
TIM_InitOc2(GTIM7, &TIM_OCInitStructure);
/* Channel 3 Configuration in PWM mode */
TIM_OCInitStructure.Pulse = 449;
TIM_InitOc3(GTIM7, &TIM_OCInitStructure);
/* Channel 4 Configuration in PWM mode */
TIM_OCInitStructure.Pulse = 599;
TIM_InitOc4(GTIM7, &TIM_OCInitStructure);
2. ATIM1 用捕获映射 1 并选触发从模式。 时基 Period 599、PWM2、比较值 299,从模式触发、输入触发选 TI2FP2。
/* Time Base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.CapCh2Sel = TIM_CAPCH2SEL_1;
TIM_TimeBaseStructure.Prescaler = PrescalerValue;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_TimeBaseStructure.Period = 599;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.RepetCnt = 0;
TIM_InitTimeBase(ATIM1, &TIM_TimeBaseStructure);
/* Channel 1 Configuration in PWM mode */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_PWM2;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.OutputNState = TIM_OUTPUT_NSTATE_DISABLE;
TIM_OCInitStructure.Pulse = 299;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_LOW;
TIM_OCInitStructure.OCNPolarity = TIM_OCN_POLARITY_LOW;
TIM_OCInitStructure.OCIdleState = TIM_OC_IDLE_STATE_SET;
TIM_OCInitStructure.OCNIdleState = TIM_OCN_IDLE_STATE_RESET;
TIM_InitOc1(ATIM1, &TIM_OCInitStructure);
TIM_SelectSlaveMode(ATIM1, TIM_SLAVE_MODE_TRIG);
TIM_SelectInputTrig(ATIM1, TIM_TRIG_SEL_TI2FP2);
3. 使能各主输出并启动 GTIM7。 四个从定时器用主输出使能打开 MOEN,最后使能 GTIM7 计数。
/* Enable MOEN */
TIM_EnableCtrlPwmOutputs(ATIM1, ENABLE);
TIM_EnableCtrlPwmOutputs(ATIM2, ENABLE);
TIM_EnableCtrlPwmOutputs(GTIM8, ENABLE);
TIM_EnableCtrlPwmOutputs(GTIM9, ENABLE);
/* Enable GTIM7 */
TIM_Enable(GTIM7, ENABLE);
对应源码: src/main.c
5.27.3.17 TimeBase 输出比较定时
工程目录: projects/n32h49x_EVAL/examples/TIM/TimeBase/
使能 GTIM2 与输出引脚时钟→配置时基与预分频→四路通道配成输出比较定时模式→关闭各通道预装载→使能四路比较中断与计数器→中断里翻转 GPIO 并改比较值
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM2 用输出比较定时模式产生四路不同速率的定时; 每个比较事件在中断里翻转对应 GPIO 并叠加下一次比较值,得到四路软定时。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与四路输出比较定时配置;src/n32h49x_it.c:GTIM2_IRQHandler 翻转 GPIO 并更新比较值;inc/main.h:函数声明;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:GTIM2,Period 65535,Prescaler 由 (SystemCoreClock/2)/12000000-1 得到、ClkDiv DIV1;通道:CH1~CH4 均为 OCMODE_TIMING,比较值 40961/27309/13654/6826,使能输出、极性高、预装载关闭;中断:使能 CC1~CC4 中断,GTIM2_IRQn 抢占 1、子优先级 0; 引脚:PC6~PC9 为普通推挽输出,由中断翻转。 |
| 程序与数据路径 | main 配置时基与预分频,把四路通道都配成输出比较定时模式并关闭预装载,再使能四路比较中断与计数;GTIM2_IRQHandler 按通道判断中断、翻转对应 GPIO,并把当前计数值加上 CCRx_Val 写回比较寄存器;四路比较增量不同,翻转速率也不同。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_ConfigPrescaler、TIM_InitOcStruct、TIM_InitOc1、TIM_InitOc4、TIM_ConfigOc1Preload、TIM_ConfigOc4Preload、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_ClrIntPendingBit、TIM_GetCap1、TIM_SetCmp1 |
| 验证方法 | 用示波器观察 PC6~PC9; 四路翻转速率与各自比较增量成反比。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 输出比较定时模式需要每次在中断里改写下一次比较值,否则只会翻转一次。 |
核心代码解读与移植
示例用输出比较定时模式配合中断,在同一路计数器上做出四个不同速率的软定时输出。
数据路径: 计数时钟 → 比较匹配 → CCx 中断 → 翻转 GPIO 并写回下一次比较值。
1. 时基与预分频决定计数速率。 计数时钟由 SystemCoreClock/2 分频到 12 MHz,先用时基结构写 Period 65535,再用 TIM_ConfigPrescaler 立即刷新写预分频。
/* Compute the prescaler value */
PrescalerValue = (uint16_t)((SystemCoreClock/2)/ 12000000) - 1;
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(GTIM2, &TIM_TimeBaseStructure);
/* Prescaler configuration */
TIM_ConfigPrescaler(GTIM2, PrescalerValue, TIM_PSC_RELOAD_MODE_IMMEDIATE);
2. 四路通道配输出比较定时模式并关闭预装载。 比较值 40961/27309/13654/6826,预装载关闭让比较值立即生效。
/* Output Compare Timing Mode configuration: Channel1 */
TIM_InitOcStruct(&TIM_OCInitStructure);
TIM_OCInitStructure.OCMode = TIM_OCMODE_TIMING;
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR1_Val;
TIM_OCInitStructure.OCPolarity = TIM_OC_POLARITY_HIGH;
TIM_InitOc1(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc1Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Timing Mode configuration: Channel2 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR2_Val;
TIM_InitOc2(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc2Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Timing Mode configuration: Channel3 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR3_Val;
TIM_InitOc3(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc3Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
/* Output Compare Timing Mode configuration: Channel4 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = CCR4_Val;
TIM_InitOc4(GTIM2, &TIM_OCInitStructure);
TIM_ConfigOc4Preload(GTIM2, TIM_OC_PRE_LOAD_DISABLE);
3. 使能四路比较中断并在中断里翻转 GPIO。 每次比较事件翻转对应引脚并把当前计数值加上增量写回比较寄存器。
void GTIM2_IRQHandler(void)
{
if (TIM_GetIntStatus(GTIM2, TIM_INT_CC1) != RESET)
{
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC1);
/* Pin PC.06 toggling */
GPIO_WriteBits(GPIOC, GPIO_PIN_6, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_6)));
capture = TIM_GetCap1(GTIM2);
TIM_SetCmp1(GTIM2, capture + CCR1_Val);
}
else if (TIM_GetIntStatus(GTIM2, TIM_INT_CC2) != RESET)
{
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC2);
/* Pin PC.07 toggling */
GPIO_WriteBits(GPIOC, GPIO_PIN_7, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_7)));
capture = TIM_GetCap2(GTIM2);
TIM_SetCmp2(GTIM2, capture + CCR2_Val);
}
else if (TIM_GetIntStatus(GTIM2, TIM_INT_CC3) != RESET)
{
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC3);
/* Pin PC.08 toggling */
GPIO_WriteBits(GPIOC, GPIO_PIN_8, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_8)));
capture = TIM_GetCap3(GTIM2);
TIM_SetCmp3(GTIM2, capture + CCR3_Val);
}
else
{
TIM_ClrIntPendingBit(GTIM2, TIM_INT_CC4);
/* Pin PC.09 toggling */
GPIO_WriteBits(GPIOC, GPIO_PIN_9, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_9)));
capture = TIM_GetCap4(GTIM2);
TIM_SetCmp4(GTIM2, capture + CCR4_Val);
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.18 TimeBasic_ATIM1 高级定时器基本定时
工程目录: projects/n32h49x_EVAL/examples/TIM/TimeBasic_ATIM1/
使能 ATIM1 与输出引脚时钟→配置时基与预分频→使能更新中断→使能计数器→更新中断翻转 GPIO
| 项目 | 源码解读 |
|---|---|
| 功能 | ATIM1 配置为最基本的向上计数时基; 计数溢出产生更新中断,在中断里翻转 PC6,得到固定周期的方波。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与时基、更新中断配置;src/n32h49x_it.c:ATIM1_UP_IRQHandler 翻转 PC6;inc/main.h:函数声明;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:ATIM1,Period 65535、Prescaler 0、ClkDiv DIV1、向上计数;预分频: TIM_ConfigPrescaler 立即刷新写入;中断:使能更新中断,ATIM1_UP_IRQn 抢占 1、子优先级 0; 引脚:PC6 为普通推挽输出,由更新中断翻转。 |
| 程序与数据路径 | main 配置时钟、GPIO 与 NVIC 后调用定时器配置;TIM_Configuration 写时基结构、刷新预分频、使能更新中断并启动计数;每次更新事件在中断里翻转 PC6,翻转周期为计数周期的两倍。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_ConfigPrescaler、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_ClrIntPendingBit |
| 验证方法 | 用示波器观察 PC6; PC6 输出固定周期的方波,周期由计数频率与 Period 决定。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 更新中断标识要在中断里清除,否则会反复进入同一中断。 |
核心代码解读与移植
示例是最基本的时基用法:计数器向上计数到 Period 产生更新事件,在中断里翻转一个引脚。
数据路径: 计数时钟 → 计到 Period → 更新事件 → 中断翻转 GPIO。
1. 时基与预分频决定更新周期。 Period 取 65535、预分频 0、向上计数,ClkDiv 为 DIV1。
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(ATIM1, &TIM_TimeBaseStructure);
/* Prescaler configuration */
TIM_ConfigPrescaler(ATIM1, PrescalerValue, TIM_PSC_RELOAD_MODE_IMMEDIATE);
2. 使能更新中断并启动计数。 使能 TIM_INT_UPDATE 后用 TIM_Enable 启动计数器。
/* ATIM1 enable update irq */
TIM_ConfigInt(ATIM1, TIM_INT_UPDATE, ENABLE);
/* ATIM1 enable counter */
TIM_Enable(ATIM1, ENABLE);
3. 更新中断里翻转引脚。 判断更新标志、清标志并翻转 PC6。
void ATIM1_UP_IRQHandler(void)
{
if (TIM_GetIntStatus(ATIM1, TIM_INT_UPDATE) != RESET)
{
TIM_ClrIntPendingBit(ATIM1, TIM_INT_UPDATE);
/* IO toggle */
GPIO_WriteBits(GPIOC, GPIO_PIN_6, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_6)));
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.19 TimeBasic_BTIM1 基本定时器基本定时
工程目录: projects/n32h49x_EVAL/examples/TIM/TimeBasic_BTIM1/
使能 BTIM1 与输出引脚时钟→配置时基与预分频→使能更新中断→使能计数器→更新中断翻转 GPIO
| 项目 | 源码解读 |
|---|---|
| 功能 | BTIM1 配置为最基本的向上计数时基; 计数溢出产生更新中断,在中断里翻转 PC6,得到固定周期的方波。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与时基、更新中断配置;src/n32h49x_it.c:BTIM1_IRQHandler 翻转 PC6;inc/main.h:函数声明;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:BTIM1,Period 70000、Prescaler 0、ClkDiv DIV1、向上计数;预分频: TIM_ConfigPrescaler 立即刷新写入;中断:使能更新中断,BTIM1_IRQn 抢占 1、子优先级 0; 引脚:PC6 为普通推挽输出,由更新中断翻转。 |
| 程序与数据路径 | main 配置时钟、GPIO 与 NVIC 后调用定时器配置;TIM_Configuration 写时基结构、刷新预分频、使能更新中断并启动计数;每次更新事件在中断里翻转 PC6,翻转周期为计数周期的两倍。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_ConfigPrescaler、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_ClrIntPendingBit |
| 验证方法 | 用示波器观察 PC6; PC6 输出固定周期的方波,周期由计数频率与 Period 决定。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 基本定时器没有对外输出通道,周期测量要靠中断里翻转普通 GPIO。 |
核心代码解读与移植
示例是最基本的时基用法:计数器向上计数到 Period 产生更新事件,在中断里翻转一个引脚。
数据路径: 计数时钟 → 计到 Period → 更新事件 → 中断翻转 GPIO。
1. 时基与预分频决定更新周期。 Period 取 70000、预分频 0、向上计数,ClkDiv 为 DIV1。
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 70000;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(BTIM1, &TIM_TimeBaseStructure);
/* Prescaler configuration */
TIM_ConfigPrescaler(BTIM1, PrescalerValue, TIM_PSC_RELOAD_MODE_IMMEDIATE);
2. 使能更新中断并启动计数。 使能 TIM_INT_UPDATE 后用 TIM_Enable 启动计数器。
/* BTIM1 enable update irq */
TIM_ConfigInt(BTIM1, TIM_INT_UPDATE, ENABLE);
/* BTIM1 enable counter */
TIM_Enable(BTIM1, ENABLE);
3. 更新中断里翻转引脚。 判断更新标志、清标志并翻转 PC6。
void BTIM1_IRQHandler(void)
{
if (TIM_GetIntStatus(BTIM1, TIM_INT_UPDATE) != RESET)
{
TIM_ClrIntPendingBit(BTIM1, TIM_INT_UPDATE);
/* IO toggle */
GPIO_WriteBits(GPIOC, GPIO_PIN_6, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_6)));
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.20 TimeBasic_GTIM2 通用定时器基本定时
工程目录: projects/n32h49x_EVAL/examples/TIM/TimeBasic_GTIM2/
使能 GTIM2 与输出引脚时钟→配置时基与预分频→使能更新中断→使能计数器→更新中断翻转 GPIO
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM2 配置为最基本的向上计数时基; 计数溢出产生更新中断,在中断里翻转 PC6,得到固定周期的方波。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与时基、更新中断配置;src/n32h49x_it.c:GTIM2_IRQHandler 翻转 PC6;inc/main.h:函数声明;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:GTIM2,Period 65535、Prescaler 0、ClkDiv DIV1、向上计数;预分频: TIM_ConfigPrescaler 立即刷新写入;中断:使能更新中断,GTIM2_IRQn 抢占 1、子优先级 0; 引脚:PC6 为普通推挽输出,由更新中断翻转。 |
| 程序与数据路径 | main 配置时钟、GPIO 与 NVIC 后调用定时器配置;TIM_Configuration 写时基结构、刷新预分频、使能更新中断并启动计数;每次更新事件在中断里翻转 PC6,翻转周期为计数周期的两倍。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_ConfigPrescaler、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_ClrIntPendingBit |
| 验证方法 | 用示波器观察 PC6; PC6 输出固定周期的方波,周期由计数频率与 Period 决定。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; 更新中断标识要在中断里清除,否则会反复进入同一中断。 |
核心代码解读与移植
示例是最基本的时基用法:计数器向上计数到 Period 产生更新事件,在中断里翻转一个引脚。
数据路径: 计数时钟 → 计到 Period → 更新事件 → 中断翻转 GPIO。
1. 时基与预分频决定更新周期。 Period 取 65535、预分频 0、向上计数,ClkDiv 为 DIV1。
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(GTIM2, &TIM_TimeBaseStructure);
/* Prescaler configuration */
TIM_ConfigPrescaler(GTIM2, PrescalerValue, TIM_PSC_RELOAD_MODE_IMMEDIATE);
2. 使能更新中断并启动计数。 使能 TIM_INT_UPDATE 后用 TIM_Enable 启动计数器。
/* GTIM2 enable update irq */
TIM_ConfigInt(GTIM2, TIM_INT_UPDATE, ENABLE);
/* GTIM2 enable counter */
TIM_Enable(GTIM2, ENABLE);
3. 更新中断里翻转引脚。 判断更新标志、清标志并翻转 PC6。
void GTIM2_IRQHandler(void)
{
if (TIM_GetIntStatus(GTIM2, TIM_INT_UPDATE) != RESET)
{
TIM_ClrIntPendingBit(GTIM2, TIM_INT_UPDATE);
/* Pin PC.06 toggling */
GPIO_WriteBits(GPIOC, GPIO_PIN_6, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_6)));
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.3.21 TimeBasic_GTIM8 通用定时器基本定时
工程目录: projects/n32h49x_EVAL/examples/TIM/TimeBasic_GTIM8/
使能 GTIM8 与输出引脚时钟→配置时基与预分频→使能更新中断→使能计数器→更新中断翻转 GPIO
| 项目 | 源码解读 |
|---|---|
| 功能 | GTIM8 配置为最基本的向上计数时基; 计数溢出产生更新中断,在中断里翻转 PC6,得到固定周期的方波。 |
| 源码组成 | src/main.c:时钟、GPIO、NVIC 配置与时基、更新中断配置;src/n32h49x_it.c:GTIM8_IRQHandler 翻转 PC6;inc/main.h:函数声明;readme.txt:功能、环境与使用说明;MDK-ARM/、EWARM/:Keil 与 IAR 工程。 |
| 关键配置 | 定时器:GTIM8,Period 65535、Prescaler 0、ClkDiv DIV1、向上计数;总线:GTIM8 挂在 APB2,用 RCC_EnableAPB2PeriphClk 开时钟;中断:使能更新中断,GTIM8_IRQn 抢占 1、子优先级 0; 引脚:PC6 为普通推挽输出,由更新中断翻转。 |
| 程序与数据路径 | main 配置时钟、GPIO 与 NVIC 后调用定时器配置;TIM_Configuration 写时基结构、刷新预分频、使能更新中断并启动计数;每次更新事件在中断里翻转 PC6,翻转周期为计数周期的两倍。 |
| 主要 API | TIM_InitTimBaseStruct、TIM_InitTimeBase、TIM_ConfigPrescaler、TIM_ConfigInt、TIM_Enable、TIM_GetIntStatus、TIM_ClrIntPendingBit |
| 验证方法 | 用示波器观察 PC6; PC6 输出固定周期的方波,周期由计数频率与 Period 决定。 |
| 使用提示 | 开发环境为 KEIL MDK-ARM 5.34 或 IAR EWARM 8.50.1; 基于全功能板 N32H497ZGL7_EVB V1.0,主频 HSI+PLL 240 MHz; GTIM8 的时钟使能函数与挂 APB1 的定时器不同,移植时要按总线改开时钟接口。 |
核心代码解读与移植
示例是最基本的时基用法:计数器向上计数到 Period 产生更新事件,在中断里翻转一个引脚。
数据路径: 计数时钟 → 计到 Period → 更新事件 → 中断翻转 GPIO。
1. 时基与预分频决定更新周期。 Period 取 65535、预分频 0、向上计数,ClkDiv 为 DIV1。
/* Time base configuration */
TIM_InitTimBaseStruct(&TIM_TimeBaseStructure);
TIM_TimeBaseStructure.Period = 65535;
TIM_TimeBaseStructure.Prescaler = 0;
TIM_TimeBaseStructure.ClkDiv = TIM_CLK_DIV1;
TIM_TimeBaseStructure.CounterMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(GTIM8, &TIM_TimeBaseStructure);
/* Prescaler configuration */
TIM_ConfigPrescaler(GTIM8, PrescalerValue, TIM_PSC_RELOAD_MODE_IMMEDIATE);
2. 使能更新中断并启动计数。 使能 TIM_INT_UPDATE 后用 TIM_Enable 启动计数器。
/* GTIM8 enable update irq */
TIM_ConfigInt(GTIM8, TIM_INT_UPDATE, ENABLE);
/* GTIM8 enable counter */
TIM_Enable(GTIM8, ENABLE);
3. 更新中断里翻转引脚。 判断更新标志、清标志并翻转 PC6。
void GTIM8_IRQHandler(void)
{
if (TIM_GetIntStatus(GTIM8, TIM_INT_UPDATE) != RESET)
{
TIM_ClrIntPendingBit(GTIM8, TIM_INT_UPDATE);
/* IO toggle */
GPIO_WriteBits(GPIOC, GPIO_PIN_6, (Bit_OperateType)(1 - GPIO_ReadOutputDataBit(GPIOC, GPIO_PIN_6)));
}
}
对应源码: src/main.c、src/n32h49x_it.c
5.27.4 注意与排障
| 场景 | 检查与建议 | 来源 |
|---|---|---|
| 门控或门控+复位模式下计数器不启动 | 门控(含门控+复位)模式下必须先置位 CNTEN,计数器才能被触发输入启动;CNTEN=0 时无论触发输入电平如何计数器都不启动(用户手册 9 章 时基单元)。 |
用户手册 |
| 中央对齐模式不生效 | 只有 CAMSEL 选择中央对齐(非 00)时中央对齐才有效;中央对齐模式下计数器方向由硬件更新, DIR 无效(用户手册 9 章 时基单元)。 |
用户手册 |
| 中央对齐与非对称模式配合 | CAMSEL 与非对称模式 ASMMETRIC 不能同时修改;非对称模式下 DIR 不可写(用户手册 9 章 时基单元)。 |
用户手册 |
| 修改预分频器不立即生效 | 写入 TIMx_PSC 的新预分频值只有在下一次更新事件时才被采用;需要立即生效时使用 TIM_ConfigPrescaler 的立即重载模式(用户手册 9 章 预分频器)。 |
用户手册 |
| 自动重载值更新时机 | 预装载使能(ARPEN=1)时自动重载值在更新事件写入影子寄存器;UPDIS=1 可禁止更新事件(用户手册 9 章 时基单元)。 |
用户手册 |
| PWM 输入模式通道受限 | PWM 输入模式只能与 TIMx_CH1、TIMx_CH2 一起使用;只有 TI1FP1 与 TI2FP2 连接到从模式控制器(用户手册 9 章 PWM 输入模式)。 |
用户手册 |
| 编码器接口与外部时钟互斥 | 编码器接口模式不能与外部时钟模式 2 同时选择; 编码器接口使用 TI1/TI2,计数方向由硬件 DIR 自动控制(用户手册 9 章 编码器接口模式)。 |
用户手册 |
| 外部时钟频率限制 | ETR/外部触发经预分频后的输入频率可高于系统时钟;以 TI1/TI2/ITR 作外部时钟时输入频率须低于系统时钟频率的 1/4(用户手册 9、11 章 外部时钟)。 |
用户手册 |
| 从模式下的时钟来源 | 门控、复位、触发模式下计数器时钟可由外部时钟模式 2 提供;TSEL 须选择非 ETRF 的来源(用户手册 9 章 从模式)。 |
用户手册 |
| 互补输出有效电平互斥 | OCx 与 OCxN 不能同时处于有效电平,须满足(CCxP 与 OIx 异或)异或(CCxNP 与 OIxN 异或)不为 0(用户手册 9 章 刹车功能)。 |
用户手册 |
| 刹车输入时的输出使能 | 刹车输入有效时 MOEN 不能被自动或软件置位、BITF 不能清零;MOEN 写入后读取需插入延迟(用户手册 9 章 刹车功能)。 |
用户手册 |
| 锁定配置只能写一次 | LCKCFG 只能在 MCU 复位后写入一次;复位后刹车电路禁用、 MOEN 为低电平(用户手册 9 章 刹车功能)。 |
用户手册 |
| 外部事件清除 OCxREF | 只有输出比较模式和 PWM 模式可用外部事件清除 OCxREF,强制模式不能使用(用户手册 9 章 在外部事件上清除 OCREF 信号)。 |
用户手册 |
| OCx 快速使能生效条件 | OCxFEN 快速使能仅在通道模式配置为 PWM1 或 PWM2 时生效(用户手册 9 章 OCx 快速使能)。 |
用户手册 |