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%

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM