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

  • 相关阅读:
    Java虚拟机工作原理具体解释
    关于java的JIT知识
    php重建二叉树(函数缺省参数相关的都写在后面,比如array_slice函数中的$length属性,故第一个参数是操作的数组)
    php实现从尾到头打印列表
    thinkphp5项目--企业单车网站(九)(加强复习啊)(花了那么多时间写的博客,不复习太浪费了)
    php 面试题一(看视频的学习量比网上瞎转悠要清晰和明了很多)(看视频做好笔记)(注重复习)
    php对象和数组的相互转换(还是可以去找没有没php的高阶课程看看看)(要不别人分析一下重点要点,要不自己来,不然 效果真的不好)
    js中JSON的解析(将json字符串转化为对象)和序列化(将对象转化为json字符串)(函数的功能一般都挺全的,需要的时候去查看完整函数)
    html中radio、checkbox选中状态研究(静下心来看,静下心来总结)
    thinkphp中view页面中的volist标签转化为原生php分析(多去看源代码,你会发现不仅简单,方便你理解,还节约时间)
  • 原文地址:https://www.cnblogs.com/beiyhs/p/11435583.html
Copyright © 2011-2022 走看看