STM32F103求配置一个PWM输出的程序,要求如下

STM32F103求配置一个PWM输出的程序,要求如下,第1张

我这个没有调试过;仅作参考。

//=============================================================================

//定时器4初始化,向上计数,自动装载,作为PWM,在Pb6~Pb9输出,

void Tim4_Init(void)

{

// volatile uint32_t tpdw1;

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseInitdata; //基本参数

TIM_OCInitTypeDef TIM_OCInitStructure; //PWM输出,

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //开启tim4的clk,

RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4,ENABLE); //通过对应位设置使Tim4寄存器复位,

RCC_APB1PeriphResetCmd(RCC_APB1Periph_TIM4,DISABLE); //退出复位,

//----Pb6~Pb9对应GPIO口初始化----------------------------------------------------

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //开启GPIOB时钟,

GPIO_InitStructureGPIO_Pin = GPIO_Pin_6|GPIO_Pin_7

|GPIO_Pin_8|GPIO_Pin_9;

GPIO_InitStructureGPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructureGPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB,&GPIO_InitStructure);

//----Tim4基本参数的初始化----------------------------------------------------

TIM_TimeBaseInitdataTIM_Prescaler = 0x0; //设置tim的预分频系数=0,72M全频,

TIM_TimeBaseInitdataTIM_ClockDivision = TIM_CKD_DIV1; //设置tim的时钟分频因子,Tdts=nTck_int,

TIM_TimeBaseInitdataTIM_CounterMode = TIM_CounterMode_Up; //向上计数,

TIM_TimeBaseInitdataTIM_Period = 0x3fff; //设置tim的自动重载,14位分辨率约439K,

TIM_TimeBaseInitdataTIM_RepetitionCounter = 0x00; //仅用于tim1&tim8,

TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitdata);

TIM_ARRPreloadConfig(TIM4,ENABLE); //允许Tim2计数器的ARR自动重载缓冲,

//----Tim4的CHx_PWM的初始化参数,-----------------------------------------------

TIM_OCInitStructureTIM_OCMode=TIM_OCMode_PWM1; //设置OC1M[2:0]为pwm1输出模式,OC1REF="1"为有效,

TIM_OCInitStructureTIM_Pulse=0x1fff; //设置占空比时间,值将自动写入CCR1,

TIM_OCInitStructureTIM_OCPolarity=TIM_OCPolarity_High; //设置输出极性,CCER的CC1P位,实际1=OC1REF的有效电平,

TIM_OCInitStructureTIM_OutputState=TIM_OutputState_Enable; //使能该通道输出,CCER的CC1E位,

//----高级定时器才有的参数,----------------------------------------------------

TIM_OCInitStructureTIM_OCIdleState=TIM_OCIdleState_Reset; //空闲/死区输出状态=0,Timx_CR2的OISx,只有Tim1/8有,

TIM_OCInitStructureTIM_OCNIdleState=TIM_OCNIdleState_Reset; //空闲/死区输出状态=0,Timx_CR2的OISxN,只有Tim1/8有,

TIM_OCInitStructureTIM_OCNPolarity=TIM_OCNPolarity_High; //设置互补端输出极性,CCER的CC1NP位,

TIM_OCInitStructureTIM_OutputNState=TIM_OutputNState_Disable; //无互补端输出,CCER的CC1NE位,

//----按照指定参数初始化TIM_OC1~4,

TIM_OC1Init(TIM4,&TIM_OCInitStructure); //按照指定参数初始化TIM_OC1,

TIM_OC1FastConfig(TIM4,TIM_OCFast_Enable); //开启快速输出模式,3周期,

TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM2在CCR1上的预装载寄存器,CCMR1_OC1PE=1,

TIM_OC2Init(TIM4,&TIM_OCInitStructure); //按照指定参数初始化TIM_OC2,

TIM_OC2FastConfig(TIM4,TIM_OCFast_Enable); //开启快速输出模式,3周期,

TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM2在CCR2上的预装载寄存器,CCMR1_OC2PE=1,

TIM_OC3Init(TIM4,&TIM_OCInitStructure); //按照指定参数初始化TIM_OC3,

TIM_OC3FastConfig(TIM4,TIM_OCFast_Enable); //开启快速输出模式,3周期,

TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM2在CCR3上的预装载寄存器,CCMR2_OC3PE=1,

TIM_OC4Init(TIM4,&TIM_OCInitStructure); //按照指定参数初始化TIM_OC4,

TIM_OC4FastConfig(TIM4,TIM_OCFast_Enable); //开启快速输出模式,3周期,

TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable); //使能TIM2在CCR4上的预装载寄存器,CCMR2_OC4PE=1,

//----定时器启动-----------------------

TIM_ITConfig(TIM4,TIM_IT_Update,DISABLE); //关中断,

TIM_ClearFlag(TIM4,TIM_FLAG_Update); //必须先清除配置时候产生的更新标志,

TIM_Cmd(TIM4,ENABLE); //使能定时器,

}

实现 DSP 芯片输出死区时间可调的 PWM 波形需要按照以下步骤进行 *** 作:

1 选择适合的 DSP 芯片和开发板,如 TMS320F28335。

2 根据具体需求编写 PWM 模块的程序。

3 确定死区时间的控制方法。可以使用固定的时间,也可以通过 ADC 模块读取外部电压来动态调整死区时间。

4 在程序中加入死区时间的计算和设置模块。

5 配置 PWM 模块输出的周期、占空比和相位差。

6 调试程序并验证输出波形的正确性。

具体实现方式需根据所选的 DSP 芯片和开发环境进行调整,建议参考相关资料或进行实验验证。

因为你用的PWM频率较高,而80C51没有专用的硬件去产生PWM,所以只能用软件模拟的方法去不断翻转端口产生波形。这样的结果就是大部分的时间都被用在产生PWM波形上,就不能再做别的事情了。

解决的办法是,用专用的硬件去产生PWM波形,现在的单片机可以将定时器配置成PWM发生器。这样只要配置好几个寄存器,就能产生PWM波形而不需要程序去管理,这样程序就能做别的事情了。

以上就是关于STM32F103求配置一个PWM输出的程序,要求如下全部的内容,包括:STM32F103求配置一个PWM输出的程序,要求如下、怎么实现dsp芯片输出死区时间可调的pwm波形、单片机温度控制,PWM波输出问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10638077.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-10
下一篇 2023-05-10

发表评论

登录后才能评论

评论列表(0条)

保存