前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >STM32F103定时器输出PWM

STM32F103定时器输出PWM

作者头像
用户11186929
发布2024-07-01 12:25:47
390
发布2024-07-01 12:25:47
举报
文章被收录于专栏:技术干货技术干货

 1.注意事项

        IM_TimeBaseInitTypeDef结构体里面有5个成员,TIM6和TIM7的寄存器里面只TIM_Prescaler和TIM_Period,所以使用TIM6和TIM7的时候只需初始化这两个成员即可,另外三个成员是通用定时器和高级定时器才有。

结构体当中的对比:

typedef struct

{ TIM_Prescaler 都有

        TIM_CounterMode TIMx,x[6,7]没有,其他都有

        TIM_Period 都有

        TIM_ClockDivision TIMx,x[6,7]没有,其他都有

        TIM_RepetitionCounter TIMx,x[1,8,15,16,17]才有

}TIM_TimeBaseInitTypeDef;

2. PWM信号 周期和占空比的计算

// ARR :自动重装载寄存器的值

// CLK_cnt:计数器的时钟,等于 Fck_int / (psc+1) = 72M/(psc+1)

// PWM 信号的周期 T = ARR * (1/CLK_cnt) = ARR(PSC+1) / 72M

// 占空比P=CCR/(ARR+1)

pwm.c

代码语言:javascript
复制
void Tim3Pwm1Init(void)
{
    GPIO_InitTypeDef     GPIO_InitStructure;
    TIM_TimeBaseInitTypeDef     TIM_TimeBaseStructure;
    TIM_OCInitTypeDef  TIM_OCInitStructure;
    //输出比较通道初始化
    RCC_APB1PeriphClockCmd(OUTPUT_PWM1_TIM_CLK,ENABLE);
    RCC_APB2PeriphClockCmd(OUTPUT_PWM1_GPIO_CLK,ENABLE);
    GPIO_InitStructure.GPIO_Pin = OUTPUT_PWM1_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(OUTPUT_PWM1_PORT,&GPIO_InitStructure);
    
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;            //时钟分频因子
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;        //计数器技术模式,向上计数
    TIM_TimeBaseStructure.TIM_Period = 500-1;                    
    TIM_TimeBaseStructure.TIM_Prescaler = 720-1;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;                //重复计数器的值
    
    TIM_TimeBaseInit(OUTPUT_PWM1_TIM,&TIM_TimeBaseStructure);
    
    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                //PWM1模式
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //输出使能
    TIM_OCInitStructure.TIM_Pulse = 0;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //输出通道电平极性配置
    //输出比较通道
    TIM_OC1Init(OUTPUT_PWM1_TIM,&TIM_OCInitStructure);
    TIM_OC1PreloadConfig(OUTPUT_PWM1_TIM,TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(OUTPUT_PWM1_TIM,ENABLE);
    TIM_Cmd(OUTPUT_PWM1_TIM,ENABLE);                                //使能计数器
    
}
void Tim3Pwm1(u32 Duty)
{
    TIM_SetCompare1(OUTPUT_PWM1_TIM,Duty);
}

pwm.h

代码语言:javascript
复制
#ifndef _BSP_PWM_H_
#define _BSP_PWM_H_

#include     "stm32f10x.h"

//PWM1
#define    OUTPUT_PWM1_TIM_CLK                  RCC_APB1Periph_TIM3
#define    OUTPUT_PWM1_GPIO_CLK                 RCC_APB2Periph_GPIOA    
#define    OUTPUT_PWM1_PIN                      GPIO_Pin_6
#define    OUTPUT_PWM1_PORT                     GPIOA
#define    OUTPUT_PWM1_TIM                      TIM3


void Tim3Pwm1Init(void);

//设置占空比
void Tim3Pwm1(u32 Duty);


#endif
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-07-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档