stm32管脚输出波形抖动程序如下
本人从MCS—51转到STM32,在学习中发现,STM32输出的波形会有抖动,我程序操作过程是:#define c1_set GPIO_SetBits(GPIOA, GPIO_Pin_1);
#define c1_clr GPIO_ResetBits(GPIOA, GPIO_Pin_1);
其它程序省略
while(1)
{
c1_set;
delay_us(4);
c1_clr;
delay_us(4);
c1_set;
delay_us(4);
c1_clr;
delay_us(4);
c1_set;
delay_us(4);
c1_clr;
delay_us(4);
c1_set;
delay_us(4);
c1_clr;
delay_us(4);
}
/延时US级函数
void delay_us(int i)
{
int j;
while(i>0)
{
for(j=0;j 有波形吗?抖动有多少? 抖正常 你自己写的延迟啊 抖动还是需要进行相关滤波算法 你使用的软件延时函数delay_us可能不够精确,导致波形不稳定。 感谢分享 使用GPIO_SetBits和GPIO_ResetBits进行GPIO操作可能会有一些额外的延时 有抖动正常,需要进行滤波处理 你的波形抖动问题可能是延时函数 delay_us() 的精度不够高,建议使用硬件定时器来生成精确的延时,这样可以减少 CPU 处理延时时的抖动。 试试用 HAL_Delay() 来代替 delay_us(),它能够提供更加稳定的延时控制。或者直接使用定时器生成精确的时间控制。 你这段代码看起来应该是用来产生方波,STM32 其实有很多方式可以做这件事,比如直接用定时器输出 PWM 信号,可能比用延时函数要稳定得多。 你可以尝试用硬件定时器定期切换 GPIO 引脚状态,这样能避免软件延时带来的不稳定,精度会高很多。 你这个 delay_us() 函数是用忙等方式实现的,会占用 CPU,可能造成程序执行不流畅。使用定时器或者中断来进行延时可能效果更好。 你能提供一下 delay_us() 函数的完整代码吗?如果它的精度不足,可能会导致波形抖动。如果是简单的循环,可能会受到编译器优化的影响。 可以考虑优化延时函数,避免高精度延时占用过多的 CPU 时间。一个更优的做法是使用一个计时器与中断来产生精确的时间间隔。 STM32 支持 DMA 和定时器,若你用定时器配合 PWM 模式生成方波,会更加精确稳定,避免软件延时带来的波形误差。 另外,检查一下 GPIO 的配置,确保输出模式正确,有时如果配置不当也会导致波形不稳定或抖动。 如果频率要求不高,也可以调整延时的长度,增加 delay_us() 中的循环次数,看看波形的抖动是否会减轻。
页:
[1]