stm32f103c8t6最小系统板的TIM3
时间: 2025-04-26 13:08:58 浏览: 50
### STM32F103C8T6最小系统板上TIM3定时器的使用方法
#### TIM3定时器概述
STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有多个定时器资源。其中,TIM3是一个16位定时器,可以用于多种应用场合,如PWM输出、捕获比较等。
#### TIM3定时器的功能特点
TIM3具备丰富的功能特性,包括但不限于:
- 支持输入捕捉模式、输出比较模式、PWM模式等多种工作方式。
- 提供多达4个通道(CH1, CH2, CH3, CH4),可用于不同的控制需求。
- 不需要重映像功能即可正常运作[^1]。
#### GPIO引脚分配
对于TIM3的具体GPIO引脚分配如下所示:
- **TIM3_CH1 -> PA6**
- **TIM3_CH2 -> PA7**
- **TIM3_CH3 -> PB0**
- **TIM3_CH4 -> PB1**
这些引脚可以直接连接LED或其他负载设备来实现特定的应用场景,比如呼吸灯效果。
#### 初始化配置流程
为了使能并正确配置TIM3定时器,在程序初始化阶段需执行以下操作:
```c
// 启用相关时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
// 配置GPIO为复用推挽输出模式
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // 对应TIM3 Channel 1 & 2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 对应TIM3 Channel 3 & 4
GPIO_Init(GPIOB, &GPIO⚗📐📐
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; // 对应TIM3 Channel 3 & 4
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 设置TIM3参数
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 计算预分频系数和自动重装载值
uint16_t PrescalerValue = (uint16_t)((SystemCoreClock / 2) / 1000000) - 1;
TIM_TimeBaseStructure.TIM_Period = 999; // 自动重载值设置为999对应频率1kHz
TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
// PWM模式1配置
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
// 应用到各个通道
TIM_OC1Init(TIM3,&TIM_OCInitStructure);
TIM_OC2Init(TIM3,&TIM_OCInitStructure);
TIM_OC3Init(TIM3,&TIM_OCInitStructure);
TIM_OC4Init(TIM3,&TIM_OCInitStructure);
// 开启中断(如果需要的话)
TIM_ITConfig(TIM3,TIM_IT_Update ,ENABLE );
// 启动TIM3向上计数器
TIM_Cmd(TIM3, ENABLE);
```
上述代码片段展示了如何启用TIM3及其对应的GPIO端口,并设置了基本的时间基底结构以及PWM输出模式。通过调整`TIM_Period`和占空比变量,可以改变PWM波形的具体形态以适应实际项目的需求。
#### 实现呼吸灯效果的关键点
要创建平滑过渡的亮度变化即所谓的“呼吸”效应,则可以通过动态调节PWM信号的占空比来达成目的。通常做法是在主循环里周期性地增加或减少该比例直到达到最大或者最小限值再反向变动形成连续波动的过程。
```c
while (1){
for(int i=0;i<=100;i++){
TIM_SetCompare1(TIM3,i*10); // 设定新的CCR寄存器数值从而更新占空比
Delay_ms(10); // 延迟函数模拟时间间隔
}
for(int j=100;j>=0;j--){
TIM_SetCompare1(TIM3,j*10);
Delay_ms(10);
}
}
```
此段伪代码表示了一个简单的渐亮渐暗过程,利用两个for循环交替改变TIM3的第一个通道(CH1)上的PWM输出电平高低,配合适当延时就能观察到类似呼吸般的光强变换现象。
阅读全文
相关推荐


















