×
单片机 > 单片机程序设计 > 详情

stm32f0 TIM1实现输出PWM波形

发布时间:2020-06-01 发布时间:
|

//该程序例程是使用的GDstm32f130的芯片,使用TIM1的通道2和通道3输出波形



int main(void)

{     


   u16 led0pwmval=0;

    u8 dir=1;   

    SystemOn_Init();

    InitRFChip();

    PWM_TIM1(899,0);  //?μ?ê?a48MHZ/(999+1)/(1+99)=24KHZ

    while (1)

    {      


      Delay_MS(1);

      if(dir)led0pwmval+=1;

        else led0pwmval-=1;

        if(led0pwmval>800)dir=0;

        if(led0pwmval==0)dir=1; 

        TIM_SetCompare2(TIM1,led0pwmval);      

        TIM_SetCompare3(TIM1,led0pwmval);


    }


}





//IO口初始化

void USART1_GPIO_Configuration(void)

{

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA,ENABLE);

    GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_2);   //TIM1channel2

    GPIO_PinAFConfig(GPIOA, GPIO_PinSource10, GPIO_AF_2);  //TIM1channel3


//PA9(UART Tx) 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; 

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 

    GPIO_Init(GPIOA, &GPIO_InitStructure); 


//PA10(UART Rx) 

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; 

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; 

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 

    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; 

    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; 

    GPIO_Init(GPIOA, &GPIO_InitStructure); 


}


//定时器TIM1的初始化

void PWM_TIM1(uint16_t arr,uint16_t psc)

{

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);    //ê±?óê1?ü


   USART1_GPIO_Configuration();


    TIM_DeInit(TIM1);


     TIM_TimeBaseStructure.TIM_Period =arr;                 //éè???ú??ò????üD?ê??t×°è????ˉμ?×??ˉ??×°????′??÷?ü?úμ??μ

     TIM_TimeBaseStructure.TIM_Prescaler =psc;              //éè??ó?à′×÷?aTIMxê±?ó?μ?ê3yêyμ??¤·??μ?μ,10Khzμ???êy?μ?ê

     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;    //éè??ê±?ó·???:TDTS = Tck_tim

     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //?òé???êy?£ê?

    //TIM_TimeBaseStructure.TIM_RepetitionCounter=0;    //???′??′??÷

     TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);            //?ù?YTIM_TimeBaseInitStruct?D???¨μ?2?êy3?ê??ˉ


     //TIM1μ?channel2 PWMê?3? 

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //ê?3?±è??ê1?ü

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //ê?3?±è????D??a??μ???

    TIM_OC2Init(TIM1, &TIM_OCInitStructure);        //3?ê??ˉ

    TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);    

 /*    

    TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_High;        //éè???¥21??ê?3???D? 

    TIM_OCInitStructure.TIM_Pulse=30;

    TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Disable;     //ê1?ü?¥21????D?      

    TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;        //?à??oóê?3?×′ì?        

    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;     //?à??oó?¥21??ê?3?×′ì?

    TIM_OC2Init(TIM1, &TIM_OCInitStructure);        //3?ê??ˉ

    TIM_OC2PreloadConfig(TIM1,TIM_OCPreload_Enable);    


    TIM_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Disable;//??DD?£ê???ê?3?

    TIM_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Disable;//???D?£ê???ê?3?????         

    TIM_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_OFF;      //???¨éè??      

    TIM_BDTRInitStructure.TIM_DeadTime = 0x90;                                         //?à??ê±??       

    TIM_BDTRInitStructure.TIM_Break = TIM_Break_Disable;                 //é23μ1|?üê1?ü     

    TIM_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_High;//é23μê?3???D?       

    TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Disable;//   ×??ˉê?3?ê1?ü   

    TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure);

  */

      //TIM1μ?channel3  PWMê?3?

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //TIM1ê?3?±è??′¥·¢?£ê?

    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //ê1?üê?3?±è??×′ì?

    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //éè??ê?3???D??a??μ???

    TIM_OC3Init(TIM1, &TIM_OCInitStructure);

    TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Enable);   //ê1?ü?¤×°????′??÷   

    TIM_ARRPreloadConfig(TIM1,ENABLE); 

     TIM_Cmd(TIM1, ENABLE);  //ê1?üTIM1


     TIM_CtrlPWMOutputs(TIM1,ENABLE);


}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机制作超级流水灯