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%

  • 相关阅读:
    Winform中怎样设置ContextMenuStrip右键菜单的选项ToolStripMenuItem添加照片
    JavaScript垃圾回收机制
    前端如何处理内存泄漏
    前端缓存
    深入理解vue-router之keep-alive
    (淘宝无限适配)手机端rem布局详解
    mysql不会使用索引,导致全表扫描情况
    MYSQL性能优化的最佳20+条经验
    深拷贝与浅拷贝的区别,实现深拷贝的几种方法
    vue组件通信方式总结
  • 原文地址:https://www.cnblogs.com/beiyhs/p/12312888.html
Copyright © 2011-2022 走看看