zoukankan      html  css  js  c++  java
  • STM32 PWM输出 (STM32F103C8T6 TIM2_CH2 )

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

       以下是main.c,执行后引脚A1输出频率20KHz,占空比75%的方波。

    #include "stm32f10x.h"

    #include "stm32f10x_tim.h"

    //**********************************************************************************
    void GPIO_CFG()                                                                               //PWM输出引脚A1函数
    {
     GPIO_InitTypeDef GPIO_InitStructure;                                             //声明GPIO_InitStructure结构变量
     // 原版创作,引用请指明出处 https://www.cnblogs.com/beiyhs/p/12312888.html 北有寒山
     /* 使能GPIOA时钟 */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能AHB预分频器到端口A的开关
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   //引脚复用 进行重映射时需要开启AFIO 时钟

    /* 配置LED相应引脚PA1*/
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;                                  //指定脚1输出
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;                   //指定模式为功能复用推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;              //设定端口最快输出50MHz
    GPIO_Init(GPIOA, &GPIO_InitStructure);                                         //按以上参数设置A口
    }

    //*********************************************************************************
    void TIM2_PWM_Init(uint16_t period, uint16_t prescaler)
    {

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;   //声明TIM_TimeBaseStructure结构变量
    TIM_OCInitTypeDef TIM_OCInitStructure;                   //声明TIM_OCInitStructure结构变量

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //使能AHB预分频器到TIM2
    TIM_TimeBaseStructure.TIM_Period = period;                                //设置TIM2自动重装周期值
    TIM_TimeBaseStructure.TIM_Prescaler = prescaler;                      //设置TIM2预分频值
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;                             //设置时钟分割
    TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上计数
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);                        //按以上参数初始化TIM2

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;           //PWM2模式
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
    TIM_OCInitStructure.TIM_Pulse =1350;                                            //通道占空比系数
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;        //输出低
    TIM_OC2Init(TIM2,&TIM_OCInitStructure);                                      //按以上参数初始化TIM2

    TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);               //使能预装载寄存器
    TIM_Cmd(TIM2, ENABLE);                                                               //使能TIM2
    }

    //*********************************************************************************
    int main(void)
    {
    GPIO_CFG() ;                           // PWM输出引脚A1函数
    TIM2_PWM_Init(1799, 1);        // 时钟/PWM初始化函数
    while (1)
    {}
    }

    //*********************************************************************************

     说明:

     引脚A1输出频率=系统频率72M/(1+1) (1799+1) = 20KHz

     占空比=1350(1799+1)*100% = 75%

  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/beiyhs/p/12312888.html
Copyright © 2011-2022 走看看