第十五章 TIM高级定时器(中)

目录

14.5 高级定时器的配置方法

14.5.1 TIM_TimeBaseInitTypeDef

14.5.2 TIM_OCInitTypeDef

14.5.3 TIM_ICInitTypeDef

14.5.4 TIM_BDTRInitTypeDef


14.5 高级定时器的配置方法

        在标准库函数头文件 stm32f10x_tim.h 中对定时器外设建立了四个初始化结构体,分别为时基初始化结构体 TIM_TimeBaseInitTypeDef、输出比较初始化结构体 TIM_OCInitTypeDef、输入捕获初始化结构体 TIM_ICInitTypeDef 和断路和死区初始化结构体 TIM_BDTRInitTypeDef,高级控制定时器可以用到所有初始化结构体,通用定时器不能使用 TIM_BDTRInitTypeDef 结构体,基本定时器只能使用时基结构体。

14.5.1 TIM_TimeBaseInitTypeDef

        时基结构体 TIM_TimeBaseInitTypeDef 用于定时器基础参数设置,与 TIM_TimeBaseInit 函数配合使用完成配置。

typedef struct
{
	uint16_t TIM_Prescaler;        	//预分频器

	uint16_t TIM_CounterMode;      	//计数模式 
	uint16_t TIM_Period;           	//定时器周期

	uint16_t TIM_ClockDivision;    	//时钟分频

	uint8_t TIM_RepetitionCounter;  	//重复计数器
  
} TIM_TimeBaseInitTypeDef;

        (1) TIM_Prescaler:定时器预分频器设置,时钟源经该预分频器才是定时器计数时钟 CK_CNT,它设定 PSC 寄存器的值。计算公式为:计数器时钟频率 (fCK_CNT) 等于 fCK_PSC / (PSC[15:0] + 1),可实现 1 至 65536 分频。

        (2) TIM_CounterMode:定时器计数方式,可设置为向上计数、向下计数以及中心对齐。高级控制定时器允许选择任意一种。

        (3) TIM_Period:定时器周期,实际就是设定自动重载寄存器 ARR 的值, ARR 为要装载到实际自动重载寄存器(即影子寄存器)的值,可设置范围为 0 至 655

### STM32F1 高级定时器 CHIN PWM 配置方法 #### 定义PWM频率 PWM信号的频率决定了PWM完成一个周期的速度,在STM32中,通过设置预分频器和自动重装载寄存器可以调整PWM频率。对于STM32F1系列微控制器而言,MDK编译器支持多种工作频率的选择,例如5MHz, 10MHz, 20MHz以及50MHz[^1]。 #### 使用TIM1_CH1N配置反相PWM输出 针对STM32F1系列中的高级定时器TIM1,其具备多个通道用于生成PWM波形。特别是当涉及到互补(即极性相反)PWM输出时,比如TIM1_CH1N连接到PB14引脚上,该引脚能够作为SPI2_MISO或TIM1_CH2N功能复用;同样地,PB15也可以被配置成TIM1_CH3N来实现类似的PWM输出效果,这两个引脚所发出的PWM脉冲与对应的正向通道相比具有相反的电平状态[^2]。 #### 示例代码展示如何初始化并启动基于TIM1_CH1N的PWM输出 下面是利用标准外设库编写的一个简单例子,展示了怎样配置TIM1的第一个互补通道(CH1N),并通过指定GPIO端口(PB14)发送PWM信号: ```c #include "stm32f1xx.h" void TIM_Config(void){ GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; /* Enable the TIM1 and GPIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 | RCC_APB2Periph_GPIOB, ENABLE); // Configure PB14 as alternate function push-pull output (TIM1_CH1N) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // Time base configuration TIM_DeInit(TIM1); TIM_InternalClockConfig(TIM1); TIM_TimeBaseStructure.TIM_Period = 999; TIM_TimeBaseStructure.TIM_Prescaler = 71; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); // Channel N Configuration TIM_OCStructInit(&TIM_OCInitStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMODE_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 499; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; TIM_OC1PreloadConfig(TIM1,TIM_OCPreload_Enable); TIM_OC1Init(TIM1,&TIM_OCInitStructure); // Complementary channel enable TIM_BDTRInitStruct.TIM_OSSRState=TIM_OSSR_Disable; TIM_BDTRInitStruct.TIM_LOCKLevel=TIM_LOCKLevel_OFF; TIM_BDTRInitStruct.TIMDeadTime=0x0; TIM_BDTRInitStruct.TIM_Break=TIM_Break_Disable; TIM_BDTRInitStruct.TIM_BreakPolarity=TIM_BreakPolarity_High; TIM_BDTRInitStruct.TIM_AutomaticOutput=TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1,&TIM_BDTRInitStruct); } int main(){ TIM_Config(); TIM_Cmd(TIM1,ENABLE); } ``` 此段程序实现了对STM32F1芯片上的TIM1计数器进行初始化,并设置了它的第一个互补通道(CH1N)为PWM模式,最终使得PB14引脚能按照设定参数输出PWM方波.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KermanXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值