標題: STM32 PWM無輸出 [打印本頁]

作者: zhijie    時間: 2022-8-25 07:00
標題: STM32 PWM無輸出
#include "pbdata.h"

u16 fre;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void TIM8_Configuration();

void  Delay (uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

int main(void)
{
     u16 arr=42000;
     u16 led_dt = arr/2;

                 RCC_Configuration();        //系統(tǒng)時鐘初始化
                 GPIO_Configuration();//端口初始化
                 TIM8_Configuration(arr);//定時器和pwm配置
       
                 while(1)
                 {       
                                TIM_SetCompare3(TIM8,led_dt); //用的是TIM3的通道2,輸出PWM         送到相應的寄存器中   //滿占空比為900               
                          TIM_SetCompare3(TIM8, 20);

                                                GPIO_SetBits(GPIOB,GPIO_Pin_5);        //LED 發(fā)光
                                                        Delay(0x2ffff);
                                                GPIO_ResetBits(GPIOB,GPIO_Pin_5);//LED 熄滅
                                                        Delay(0x2ffff);
                                                 }       
}

void RCC_Configuration(void)
{
  SystemInit();

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM8,ENABLE);//這個是必須的,仿真軟件必須的

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//端口復用,一定在APB2的時鐘線

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
}

void GPIO_Configuration(void)
{


}

void TIM8_Configuration(arr)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
        TIM_OCInitTypeDef TIM_OCInitStructure;             //PWM的結構體
       
       
       
         GPIO_InitTypeDef GPIO_InitStructure;
       
//PWM
        GPIO_InitStructure.GPIO_Pin= GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;      //通過PWM控制,端口為復用方式輸出
        GPIO_Init(GPIOC,&GPIO_InitStructure);
       
       
       

        //GPIO_PinRemapConfig(GPIO_PartialRemap_TIM1,ENABLE);//TIM3 復用功能部分映射,可以此找到對應的管腳
        //關于部分映射可以參考“STM32參考手冊”119面
        //定時器初始化
       
        TIM_TimeBaseStruct.TIM_Period=arr;//初值
        TIM_TimeBaseStruct.TIM_Prescaler=2;//預分頻
        //不分頻,在晶振為72MHz的情況下,定時器執(zhí)行到899后即會溢出,表示計數(shù)滿
        TIM_TimeBaseStruct.TIM_ClockDivision=0;
        TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上
        TIM_TimeBaseInit(TIM8,&TIM_TimeBaseStruct);
        //TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;                               
       

        //pwm初始化
        //TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;             //使用模式1
        TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能位
        TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;  
  TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
        TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;



//設置輸出極性,一定注意

        //TIM_OCInitStructure.TIM_Pulse = 20;
        TIM_OC2Init(TIM8,&TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM8,TIM_OCPreload_Enable);            //與裝載使能,不會說執(zhí)行一次后就不執(zhí)行了
        TIM_CtrlPWMOutputs(TIM8,ENABLE);        //MOE 主輸出使能
        TIM_ARRPreloadConfig(TIM8, ENABLE);

        TIM_Cmd(TIM8,ENABLE);
                 
}
/*PWM不是中斷,所以不需要設置中斷優(yōu)先級 */


stm32f103無輸出PWM.rar

1.27 MB, 下載次數(shù): 4

PROTUES


作者: sinside    時間: 2022-8-25 16:09
沒有細看, 不過似乎沒有指定 PC8和TIM3的那個通道對應上, 就是TIM3設定的PWM用在哪個引腳上面. 試試看 在GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;  后面加一條 GPIO_InitStruct.Alternate = GPIO_xxx_TIM3; 嘻嘻嘻\




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1