stm32f103c8t6的pwm
时间: 2025-01-14 09:15:35 浏览: 56
### STM32F103C8T6 PWM配置与使用
#### 配置PWM功能概述
STM32F103C8T6微控制器支持通过定时器来生成脉宽调制(PWM)信号。除TIM6和TIM7外,其它定时器均能用于PWM输出[^1]。高级定时器TIM1和TIM8可提供最多7路PWM输出;通用定时器则能够处理至多4路PWM输出。
#### 初始化设置
为了使能并初始化PWM通道,在程序启动阶段需完成以下操作:
- 设置GPIO端口为复用推挽输出模式;
- 对选定的定时器进行参数设定,包括预分频系数、自动重装载值以及捕获/比较寄存器的内容。
```c
// 开启RCC时钟访问权限
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
// GPIO引脚配置
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; // PA6 和 PA7作为PWM输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 定义TIM_TimeBaseInitTypeDef结构体变量tim_base_struct
TIM_TimeBaseInitTypeDef tim_base_struct;
// 设定计数频率=APB1时钟/(PSC+1),这里假设APB1=72Mhz,PSC=7199,则实际工作频率约为1KHz
uint16_t PrescalerValue = (u16)(SystemCoreClock / 72000 - 1);
tim_base_struct.TIM_Period = 999; // ARR=999 -> f_pwm=(72M)/(Prescaler+1)/(ARR+1)=1kHz
tim_base_struct.TIM_Prescaler = PrescalerValue;
tim_base_struct.TIM_ClockDivision = TIM_CKD_DIV1;
tim_base_struct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM3,&tim_base_struct);
// 清零所有中断标志位
TIM_ClearFlag(TIM3,TIM_FLAG_Update|TIM_FLAG_CC1IF|TIM_FLAG_CC2IF);
```
#### 创建PWM波形
一旦完成了上述基础性的准备工作之后,接下来就是具体创建PWM波形的过程了。这一步骤主要涉及到调整`TIMx_CCRx`寄存器中的数值以控制占空比大小,并开启相应的PWM信道。
```c
// 定义TIM_OCInitStructDef结构体实例oc_init_struct
TIM_OCInitTypeDef oc_init_struct;
// OC1REF有效电平高有效
oc_init_struct.TIM_OCMode = TIM_OCMode_PWM1;
oc_init_struct.TIM_OutputState = TIM_OutputState_Enable;
oc_init_struct.TIM_OCPolarity = TIM_OCPolarity_High;
// 初始占空比设为50%
oc_init_struct.TIM_Pulse = 500; // CCR=50%*ARR=500
TIM_OC1Init(TIM3,&oc_init_struct);
TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
// 同样方法初始化OC2
oc_init_struct.TIM_Channel = TIM_Channel_2;
TIM_OC2Init(TIM3,&oc_init_struct);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
// 启动定时器
TIM_Cmd(TIM3,ENABLE);
```
以上代码片段展示了如何利用STM32CubeMX库函数对指定的定时器及其对应的PWM通道执行必要的初始化过程。值得注意的是,对于不同的应用场景可能还需要进一步定制化这些初始参数的选择。
阅读全文
相关推荐


















