使用stm32f103c8t6内部时钟配置tim2_ch2,周期20ms
时间: 2024-11-28 15:21:06 浏览: 97
在STM32F103C8T6微控制器上,使用内部时钟配置TIM2 (定时器2) 的Channel2 (CH2) 生成20毫秒周期的计时,你需要遵循以下步骤:
1. **启用时钟**:
- 首先,需要激活系统时钟并配置APB2时钟,因为TIM2通常位于APB2树中。通过`RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM2, ENABLE)`,启用TIM2时钟。
2. **设置TIM2寄存器**:
- TIM2是一个16位定时器,可以设置工作模式、预分频器、计数器和捕获比较寄存器。例如,若要用基本计数器模式(模式2),可以写入:
```c
RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOA, ENABLE); //假设GPIOA用于输出通道
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //假设PA.5作为TIM2 CH2输入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseInitTypeDef.TIM_TimeBaseStructure;
TIM_TimeBaseInitStruct.TIM_Prescaler = RCC_GetHCLKFreq() / 4096 - 1; //根据时钟频率计算预分频值,这里假定是75MHz,20ms周期大约需要3840
TIM_TimeBaseInitStruct.TIM_Period = 20 * 1000; //20ms乘以1000是因为TIM定时器单位是us
TIM_TimeBaseInitStruct.TIM_ClockDivision = 0;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStruct);
```
3. **配置TIM2 Channel2**:
- 对于CH2,通常是通过外部事件输入,设置TIM2的EXTI线。如果不需要外部信号,那么配置内部触发,并设置通道的工作模式(例如PWM):
```c
TIM_MasterConfig(TIM2, TIM_MasterOutputState_Enable); //启用主输出
TIM_OCInitTypeDef TIM_OCInitStruct;
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //选择PWM模式
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //开启输出
TIM_OCInitStruct.TIM_Pulse = 0; //占空比设置为0,即全占空
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //高电平
TIM_OCInitStruct.TIM_OCNCPolarity = TIM_OCNCPolarity_Low; //无互补
TIM_OCInitStruct.TIM_OCNPolarity = TIM_OCNPolarity_High; //高电平
TIM_OC1Init(TIM2, &TIM_OCInitStruct);
TIM_ARRPreloadConfig(TIM2, ENABLE); //启用自动重装载功能
```
4. **启动定时器**:
`TIM_Cmd(TIM2, ENABLE);` 启动TIM2。
阅读全文