单片机
返回首页

基于霸道秉火的STM32F103ZET6嵌入式开发之------基于定时TIM3的PWM实验

2025-09-11 来源:cnblogs

1:PWM脉冲宽度调制

STM32 的定时器除了 TIM6 和 7。其他的定时器都可以用来产生 PWM 输出。其中高级定
时器 TIM1 和 TIM8 可以同时产生多达 7 路的 PWM 输出。而通用定时器也能同时产生多达 4路的 PWM 输出,这样,STM32 最多可以同时产生 30 路 PWM 输出!


2;本次实验只需将上个实验的time.c卤藕做修改即可

1)新增void TIM3_PWM_Init(u16 arr,u16 psc) 函数;

a,TIM3时钟使能

b,使能GPIO端口和复用

c,端口映射TIM3----PB5


1 GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);

d,GPIOB端口初始化


1     GPIO_InitStructURE.GPIO_Pin = GPIO_Pin_5;//LED2

2     GPIO_InitStructURE.GPIO_Mode = GPIO_Mode_AF_PP;  //推挽复用输出

3     GPIO_InitStructURE.GPIO_Speed = GPIO_Speed_50MHz;

4     GPIO_Init(GPIOB,&GPIO_InitStructURE);

e,初始化TIM3


1     TIM_TimeBaseStructure.TIM_Period = arr; //重装载周期

2     TIM_TimeBaseStructure.TIM_Prescaler =psc; //自动重装载值

3     TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分频0

4     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数

5     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

f,初始化 TIM3 Channel2 PWM 模式,并使能TIM3


1     TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM2;//PWM2

2     TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能

3     TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//输出极性为高

4     TIM_OC2Init(TIM3,&TIM_OCInitStruct);

5     TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable);  //使能CRR2上的预装在寄存器

6     TIM_Cmd(TIM3,ENABLE);


void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
这种初始化格式大家学到这里应该也熟悉了,所以我们直接来看看结构体 TIM_OCInitTypeDef
的定义:
typedef struct
{
uint16_t TIM_OCMode;
ALIENTEK 精英 STM32F103 V1 开发板教程
219
STM32 F1 开发指南( 精英 板- - 库函数 版) )
uint16_t TIM_OutputState;
uint16_t TIM_OutputNState; */
uint16_t TIM_Pulse;
uint16_t TIM_OCPolarity;
uint16_t TIM_OCNPolarity;
uint16_t TIM_OCIdleState;
uint16_t TIM_OCNIdleState;
} TIM_OCInitTypeDef;
这里我们讲解一下与我们要求相关的几个成员变量:
参数 TIM_OCMode 设置模式是 PWM 还是输出比较,这里我们是 PWM 模式。
参数 TIM_OutputState 用来设置比较输出使能,也就是使能 PWM 输出到端口。
参数 TIM_OCPolarity 用来设置极性是高还是低。
其他的参数 TIM_OutputNState,TIM_OCNPolarity,TIM_OCIdleState 和 TIM_OCNIdleState 是
高级定时器 TIM1 和 TIM8 才用到的。

2)主函数

通过修改 TIM3_CCR2 则可以控制 CH2 的输出占空比。继而控制 DS0 的亮度。
在库函数中,修改 TIM3_CCR2 占空比的函数是:
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
理所当然,对于其他通道,分别有一个函数名字,函数格式为 TIM_SetComparex(x=1,2,3,4)。

参数:Compare2  调节PWM波占空比



 1     while(1)

 2     {

 3         delay_ms(10);

 4         if(dir)led2pwmval++;

 5         else led2pwmval--;

 6         if(led2pwmval==500)dir=0;

 7         if(led2pwmval==0)dir=1;

 8         TIM_SetCompare2(TIM3,led2pwmval);

 9     }

10  }


TIME3_PWM_Init(899,0);//10KHZ  (7200)/9000 =80khz


进入单片机查看更多内容>>
相关视频
  • 【TI MSPM0 应用实战】智能小车+工业角度编码器+血氧仪+烟雾探测器!硬核参考设计详解!

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

  • 直播回放: Microchip Timberwolf™ 音频处理器在线研讨会

  • 基于灵动MM32W0系列MCU的指夹血氧仪控制及OTA升级应用方案分享

精选电路图
  • 设计汽车集群电源

  • 6晶体管H桥

  • USB自供电声卡

  • AVR LCD温度计—LM35

  • AVR PC步进电机驱动器

  • AVR温度计TCN75

    相关电子头条文章