zoukankan      html  css  js  c++  java
  • STM32定时器之PWM 4路输出 TIM3、TIM14

    以STM32F030F4P6,uVision开发环境为例,注意了,若使用其它相近芯片,本文仅供参考。

    程序运行后TIM3的CH1、CH2、CH4,TIM14的CH1输出PWM波形。

    以下是main.c文件:

    #include "stm32f0xx.h"                //转载请注明出处: https://www.cnblogs.com/beiyhs/p/11435583.html  北有寒山

    void PWM_GPO_TIM(void)                                                                           //PWM引脚时钟设置函数
    {

    GPIO_InitTypeDef GPIO_InitStructure;                                                        //声明GPIO_InitStructure结构变量

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB,ENABLE);              //使能AHB预分频器到端口B的开关
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);              //使能AHB预分频器到端口A的开关

    GPIO_PinAFConfig(GPIOB,GPIO_PinSource1,GPIO_AF_1); //B1口功能复用选择AF_1(Tim3_CH4)

    GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_1); //A6口功能复用选择AF_1(Tim3_CH1)
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_1); //A7口功能复用选择AF_1(Tim3_CH2)
    GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_4); //A4口功能复用选择AF_4(Tim14_CH1)

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;              //指定模式为功能复用
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;           //指定输出为推挽输出
    //GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;            //内部上拉输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;    //设定端口最快输出50MHz

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_7|
                                                        GPIO_Pin_4;                        //指定脚6、7、4输出
    GPIO_Init(GPIOA, &GPIO_InitStructure);                                //按以上参数设置A口

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                        //指定脚1输出
    GPIO_Init(GPIOB, &GPIO_InitStructure);                                //按以上参数设置B口
    }


    void TIM3_PWM_Init(uint16_t period, uint16_t prescaler)
    {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;            //声明TIM_TimeBaseStructure结构变量
    TIM_OCInitTypeDef TIM_OCInitStructure;                            //声明TIM_OCInitStructure结构变量

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能AHB预分频器到TIM3
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE); //使能AHB预分频器到TIM14

    TIM_TimeBaseStructure.TIM_Period = period;                     //设置TIM3自动重装周期值
    TIM_TimeBaseStructure.TIM_Prescaler = prescaler;           //设置TIM3预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;                  //设置时钟分割
    TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;    //向上计数
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);           //按以上参数初始化TIM3
    TIM_TimeBaseInit(TIM14, &TIM_TimeBaseStructure);         //按以上参数初始化TIM14

    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;          //PWM2模式
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;         //输出低
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //比较输出使能

    TIM_OCInitStructure.TIM_Pulse=12;                                    //占空比系数
    TIM_OC1Init(TIM3,&TIM_OCInitStructure);                          //按以上参数初始化TIM3CH2

    TIM_OCInitStructure.TIM_Pulse=24;                                     //占空比系数
    TIM_OC2Init(TIM3,&TIM_OCInitStructure);                          //按以上参数初始化TIM3CH2

    TIM_OCInitStructure.TIM_Pulse =36;                                   //占空比系数
    TIM_OC4Init(TIM3,&TIM_OCInitStructure);                          //按以上参数初始化TIM3CH4
    TIM_Cmd(TIM3, ENABLE);                                                   //使能TIM3

    TIM_OCInitStructure.TIM_Pulse=12;                                    //占空比系数
    TIM_OC1Init(TIM14,&TIM_OCInitStructure);                        //按以上参数初始化TIM14CH1
    TIM_Cmd(TIM14, ENABLE);                                                 //使能TIM4
    }


    int main(void)
    {
    PWM_GPO_TIM();                                                               // PWM输出引脚、TIM函数
    TIM3_PWM_Init(47, 0);                                                        // 时钟/PWM初始化函数
    while (1)
    {}
    }

    说明:

            1  20脚封装TIM3只有CH1、CH2、CH4能输出。

            2  输出频率:48M/(47+1)=1MHz,1M/(0+1)=1M

            3  TIM3的CH1占空比=12/(47+1)*100%=25%、 CH2占空比=50%、CH4占空比=75%,

                TIM4的CH1占空比=25% ;     

            4  注意“(GPIOA,GPIO_PinSource6,GPIO_AF_1)”  这句,STM不同型号芯片、同型号芯片管脚封装

               不同,其AF值都不同,一定要仔细看各自的芯片手册

  • 相关阅读:
    《日志文件保存》logging
    《火车站信息显示》
    我为什么相信“人造韩寒”?
    研究途径多样性的价值
    推荐一个“思想史上的失踪者”——张鹤慈
    观“方韩大战”
    如何理性的挺韩?从韩寒愚人节的微博说起
    “方韩大战”与独立思考
    《超越感觉:批判性思考指南》读书笔记
    推荐一个在线古典音乐频道
  • 原文地址:https://www.cnblogs.com/beiyhs/p/11435583.html
Copyright © 2011-2022 走看看