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值都不同,一定要仔细看各自的芯片手册

  • 相关阅读:
    zendstudio文件编码修改问题
    js去掉字符串前后空格的五种方法
    一组PHP可逆加密解密算法
    Discuz! 经典加密解密函数
    卡号 不足位数 补0
    关于jquery跨域请求方法
    JQuery实现当鼠标停留在某区域3秒后执行
    ajax async
    mysql replace 替换函数
    php curl 发送 json 数据
  • 原文地址:https://www.cnblogs.com/beiyhs/p/11435583.html
Copyright © 2011-2022 走看看