STM32F103C8 TIM1 CHN PWM输出代码

本文详细介绍了如何在STM32F103C8微控制器上配置和使用TIM1通道1生成PWM信号。内容包括高级定时器TIM1的初始化设置、PWM模式配置、占空比调整以及相关中断处理,帮助读者深入理解STM32的PWM输出功能。

STM32F103高级定时器TIM1输出PWM波程序

/*
 * 配置PB13输出,即全使能TIM1_CH1N通道,禁用TIM1_CH1通道,禁用更新中断
 * 其它参数看着修改
 */
void Timer1Init()
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    TIM_OCInitTypeDef TIM_OCInitStructure;
    TIM_BDTRInitTypeDef TIM_BDTRInitStructure;

    // 第一步 使能TIM1时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟 TIM1 使能

    // 第二步 定时器 TIM1 初始化,输入时钟72MHz,时钟分割1,分频系数720,PWM频率72M/720/65535=1.5Hz
    TIM_TimeBaseStructure.TIM_Period = 65535;  //设置自动重装载寄存器周期的值
    TIM_TimeBaseStructure.TIM_Prescaler = 719; //设置时钟频率除数的预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;     //设置时钟分割
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM 向上计数
    TIM_TimeBaseStructure.TIM_RepetitionCounter=0; //高级定时器1是用定时器功能配置这个才可以是正常的计数频率一开始的72mhz 值得注意的地方
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //初始化 TIM1
    // TIM_ITConfig(TIM1,TIM_IT_Update, ENABLE );   //允许更新中断
    TIM_ITConfig(TIM1,TIM_IT_Update, DISABLE );     //禁止更新中断

    // 第三步 中断优先级 NVIC 设置
    NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;        //TIM1 中断
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级 1 级
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;        //从优先级 3 级
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;           //IRQ 通道被使能
    NVIC_Init(&NVIC_InitStructure); //初始化 NVIC 寄存器

    //第四步pwm输出配置
    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;//设置为pwm2输出模式
    TIM_OCInitStructure.TIM_Pulse=32767;           //设置占空比时间 1/(72M/720)*32767=0.33秒
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;       //设置输出极性
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Disable; //使能该通道输出
    //下面几个参数是高级定时器才会用到,通用定时器不用配置
    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;    //设置互补端输出极性
    TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//使能互补端输出
    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;   //死区后输出状态
    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //死区后互补端输出状态
    TIM_OC1Init(TIM1,&TIM_OCInitStructure);                      //按照指定参数初始化


    //第五步,死区和刹车功能配置,高级定时器才有的,通用定时器不用配置
    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//运行模式下输出选择
    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//空闲模式下输出选择
    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;    //锁定设置
    TIM_BDTRInitStructure.TIM_DeadTime = 0x10;                  //死区时间设置
    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;        //刹车功能使能
    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;      //刹车输入极性
    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;//自动输出使能
    TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);


    //第六步,使能端的打开
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);  //使能TIMx在CCR1上的预装载寄存器
    TIM_ARRPreloadConfig(TIM1, ENABLE);                //使能TIMx在ARR上的预装载寄存器
    TIM_Cmd(TIM1,ENABLE);                              //打开TIM2

    //下面这句是高级定时器才有的,输出pwm必须打开
    TIM_CtrlPWMOutputs(TIM1, ENABLE);     
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值