stm32 产生互补带死区pwm波,请问哪里出错了,仿真没结果呀

mufangjuan4389 2016-06-12 11:26:08
/**
******************************************************************************
* @file bsp_pwm_output.c
* @author
* @version V1.0
* @date 2016-xx-xx
* @brief tim1Êä³öһ·pwm bsp
******************************************************************************
* @attention

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

#include "bsp_pwm_output.h"


static void TIM1_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure2;
TIM_TimeBaseInitTypeDef TIM_TimeBasestructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM1_BDTRInitStructure;
/* ÉèÖÃTIM1CLK Ϊ 72MHZ */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

/* GPIOyA and GPIOB clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

/*GPIOA Configuration: TIM1 channel 1 as alternate function push-pull */
GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure2.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure2.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure2);

/*GPIOB Configuration: TIM1 channel 2 as alternate function push-pull */
GPIO_InitStructure2.GPIO_Pin = GPIO_Pin_13 ;
GPIO_Init(GPIOB, &GPIO_InitStructure2);
}


static void TIM1_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_BDTRInitTypeDef TIM1_BDTRInitStructure;
u16 CCR_Val =71;
TIM_TimeBaseStructure.TIM_Period =143;
TIM_TimeBaseStructure.TIM_Prescaler=0x0;
TIM_TimeBaseStructure.TIM_ClockDivision=0;
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
TIM_TimeBaseStructure.TIM_RepetitionCounter=0x0;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);

TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_Pulse= CCR_Val;
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_Low;
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OCNPolarity=TIM_OCNPolarity_Low;
TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;
TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;
TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset;
TIM_OC1Init(TIM1,&TIM_OCInitStructure);

TIM1_BDTRInitStructure.TIM_OSSRState = TIM_OSSRState_Enable;
TIM1_BDTRInitStructure.TIM_OSSIState = TIM_OSSIState_Enable;
TIM1_BDTRInitStructure.TIM_LOCKLevel = TIM_LOCKLevel_1;
TIM1_BDTRInitStructure.TIM_DeadTime = 0xc0;
TIM1_BDTRInitStructure.TIM_Break = TIM_Break_Disable;
TIM1_BDTRInitStructure.TIM_BreakPolarity = TIM_BreakPolarity_Low;
TIM1_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;
TIM_BDTRConfig(TIM1,&TIM1_BDTRInitStructure);

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1, ENABLE);
TIM_Cmd(TIM1,ENABLE);
TIM_CtrlPWMOutputs(TIM1, ENABLE);
TIM_ITConfig(TIM1, TIM_IT_Update , ENABLE);

}



void TIM1_PWM_Init(void)
{
TIM1_GPIO_Config();
TIM1_Mode_Config();
}

/*********************************************END OF FILE**********************/
...全文
680 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcq_1234 2017-04-09
  • 打赏
  • 举报
回复
我和楼主程序差不多啊,我也是同样输出没结果 #include "pwm_output.h" /* * º¯ÊýÃû£ºTIM1_GPIO_Config * ÃèÊö £ºÅäÖÃTIM1Êä³öÁ½Â·»¥²¹PWMʱÓõ½µÄI/O * ÊäÈë £ºÎÞ * Êä³ö £ºÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ static void TIM1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; //PCLK1¾­¹ý2±¶Æµºó×÷ΪTIM3µÄʱÖÓÔ´µÈÓÚ72MHz RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); /* TIM3ʱÖÓʹÄÜ */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE); /* GPIOAʱÖÓʹÄÜ */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); /* GPIOBʱÖÓʹÄÜ */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // PA6 ¸´ÓÃÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // PB13 ¸´ÓÃÍÆÍìÊä³ö GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } /* * º¯ÊýÃû£ºTIM1_Mode_Config * ÃèÊö £ºÅäÖÃTIM3Êä³öµÄPWMÐźŵÄģʽ£¬ÈçÖÜÆÚ¡¢¼«ÐÔ¡¢Õ¼¿Õ±È * ÊäÈë £ºÎÞ * Êä³ö £ºÎÞ * µ÷Óà £ºÄÚ²¿µ÷Óà */ static void TIM1_Mode_Config(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; TIM_DeInit(TIM1); /* PWMÐŵçƽÌø±äÖµ */ //u16 CCR1_Val = 25; /* ----------------------------------------------------------------------- °´ÕÕÒÔϹ«Ê½¼ÆËã Frequency= TIMxCLK/( TIM_Prescaler +1)/ (TIM_Period + 1) TIMx Channelx duty cycle = (TIMx_Pulse/ ( TIM_Prescaler +1))* 100% TIM3CLK = 72 MHz, Prescaler = 0x0, TIM3 counter clock = TIM3CLK/(Prescaler+1)=72M TIM3 ARR Register = 999 => TIM3 Frequency = TIM3 counter clock/(ARR + 1) TIM3 Frequency = 72 KHz. TIM3 Channel1 duty cycle = 50% TIM3 Channel2 duty cycle = 37.5% TIM3 Channel3 duty cycle = 25% TIM3 Channel4 duty cycle= 12.5% ----------------------------------------------------------------------- */ /* Time base configuration */ TIM_TimeBaseStructure.TIM_Period = 49; //µ±¶¨Ê±Æ÷´Ó0¼ÆÊýµ½49£¬¼´Îª50´Î£¬ÎªÒ»¸ö¶¨Ê±ÖÜÆÚ TIM_TimeBaseStructure.TIM_Prescaler = 36-1; //ÉèÖÃÔ¤·ÖƵ£º36·ÖƵ£¬¼´Îª2MHz£¬0.5us£¬ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //ÉèÖÃʱÖÓ·ÖƵϵÊý£º²»·ÖƵ TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //ÏòÉϼÆÊýģʽ TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); /* PWM1 Mode configuration: Channel1 */ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //ÅäÖÃΪPWMģʽ1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_OutputNState = TIM_OutputState_Enable; // TIM_OCInitStructure.TIM_Pulse = CCR1_Val; //ÉèÖÃÌø±äÖµ£¬µ±¼ÆÊýÆ÷¼ÆÊýµ½Õâ¸öֵʱ£¬µçƽ·¢ÉúÌø±ä TIM_OCInitStructure.TIM_Pulse=25; TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //µ±¶¨Ê±Æ÷¼ÆÊýֵСÓÚCCR1_ValʱΪ¸ßµçƽ TIM_OCInitStructure.TIM_OCPolarity = TIM_OCNPolarity_High; //È¡·´ TIM_OC1Init(TIM1, &TIM_OCInitStructure); //ʹÄÜͨµÀ1 TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM1, ENABLE); // ʹÄÜTIM3ÖØÔؼĴæÆ÷ARR /* TIM1 enable counter */ TIM_Cmd(TIM1, ENABLE); //ʹÄܶ¨Ê±Æ÷1 } /* * º¯ÊýÃû£ºTIM1_PWM_Init * ÃèÊö £ºTIM1 Êä³öPWMÐźųõʼ»¯£¬Ö»Òªµ÷ÓÃÕâ¸öº¯Êý * TIM1µÄËĸöͨµÀ¾Í»áÓÐPWMÐźÅÊä³ö * ÊäÈë £ºÎÞ * Êä³ö £ºÎÞ * µ÷Óà £ºÍⲿµ÷Óà */ void TIM1_PWM_Init(void) { TIM1_GPIO_Config(); //TIM3¶¨Ê±Æ÷IO¿ÚÅäÖà TIM1_Mode_Config(); //TIM3¶¨Ê±Æ÷ģʽÅäÖà } /******************* CHD1807 Team *****END OF FILE************/

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧