参考的文章是这篇【STM32】PWM DAC基本原理(实验:PWM实现DAC)-CSDN博客
首先要确定一下使用的PWM的参数,计算公式是:
•
PWM
频率:
Freq = CK_PSC / (PSC
+ 1) / (ARR
+ 1)
•
PWM
占空比:
Duty = CCR / (ARR
+ 1)
•
PWM
分辨率:
Reso = ARR
+ 1
ARR是计数,从0计到ARR
PSC是预分频系数,决定一次计数的时间
这里设ARR为255,PSC设0,达到最快的速度。
代码像这样
while (1)
{
uint8_t key1 = Key_Interrupt_Get();
OLED_ShowNum(1, 2, num, 5);
for(uint8_t i=0;i<100;i++)
{
PWM_SetCompare1(128*(1+sin(i*0.0628)));
Delay_us(250);//小于100变化不明显,考虑是其他耗时
//OLED_ShowNum(2, 2, i, 3);
}
/*OLED_ShowChar(3, 2, '1');
TIM_PrescalerConfig(TIM2, 8, TIM_PSCReloadMode_Update);
Delay_ms(1000);*/
}
遇到的问题是:
1、速度不够快,Delay_us(250);//小于100变化不明显,考虑是其他耗时
2、波形不好看,考虑滤波器的问题