打印
[其他ST产品]

stm32管脚输出波形抖动程序如下

[复制链接]
864|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elephant00|  楼主 | 2024-7-26 18:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人从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

使用特权

评论回复
沙发
LcwSwust| | 2024-7-26 19:01 | 只看该作者
有波形吗?抖动有多少?

使用特权

评论回复
板凳
xionghaoyun| | 2024-7-27 14:54 | 只看该作者
抖正常 你自己写的延迟啊

使用特权

评论回复
地板
LOVEEVER| | 2024-7-28 13:41 | 只看该作者
抖动还是需要进行相关滤波算法

使用特权

评论回复
5
范德萨发额| | 2024-7-29 15:47 | 只看该作者
你使用的软件延时函数delay_us可能不够精确,导致波形不稳定。

使用特权

评论回复
6
申小林一号| | 2024-7-29 22:37 | 只看该作者
感谢分享

使用特权

评论回复
7
纠结的那些年| | 2024-7-31 11:59 | 只看该作者
使用GPIO_SetBits和GPIO_ResetBits进行GPIO操作可能会有一些额外的延时

使用特权

评论回复
8
AdaMaYun| | 2024-7-31 12:46 | 只看该作者
有抖动正常,需要进行滤波处理

使用特权

评论回复
9
公羊子丹| | 2025-3-20 08:20 | 只看该作者
你的波形抖动问题可能是延时函数 delay_us() 的精度不够高,建议使用硬件定时器来生成精确的延时,这样可以减少 CPU 处理延时时的抖动。

使用特权

评论回复
10
周半梅| | 2025-3-20 08:21 | 只看该作者
试试用 HAL_Delay() 来代替 delay_us(),它能够提供更加稳定的延时控制。或者直接使用定时器生成精确的时间控制。

使用特权

评论回复
11
帛灿灿| | 2025-3-20 08:22 | 只看该作者
你这段代码看起来应该是用来产生方波,STM32 其实有很多方式可以做这件事,比如直接用定时器输出 PWM 信号,可能比用延时函数要稳定得多。

使用特权

评论回复
12
童雨竹| | 2025-3-20 08:23 | 只看该作者
你可以尝试用硬件定时器定期切换 GPIO 引脚状态,这样能避免软件延时带来的不稳定,精度会高很多。

使用特权

评论回复
13
万图| | 2025-3-20 08:24 | 只看该作者
你这个 delay_us() 函数是用忙等方式实现的,会占用 CPU,可能造成程序执行不流畅。使用定时器或者中断来进行延时可能效果更好。

使用特权

评论回复
14
Wordsworth| | 2025-3-20 08:25 | 只看该作者
你能提供一下 delay_us() 函数的完整代码吗?如果它的精度不足,可能会导致波形抖动。如果是简单的循环,可能会受到编译器优化的影响。

使用特权

评论回复
15
Bblythe| | 2025-3-20 08:26 | 只看该作者
可以考虑优化延时函数,避免高精度延时占用过多的 CPU 时间。一个更优的做法是使用一个计时器与中断来产生精确的时间间隔。

使用特权

评论回复
16
Pulitzer| | 2025-3-20 08:27 | 只看该作者
STM32 支持 DMA 和定时器,若你用定时器配合 PWM 模式生成方波,会更加精确稳定,避免软件延时带来的波形误差。

使用特权

评论回复
17
Uriah| | 2025-3-20 08:28 | 只看该作者
另外,检查一下 GPIO 的配置,确保输出模式正确,有时如果配置不当也会导致波形不稳定或抖动。

使用特权

评论回复
18
Clyde011| | 2025-3-20 08:29 | 只看该作者
如果频率要求不高,也可以调整延时的长度,增加 delay_us() 中的循环次数,看看波形的抖动是否会减轻。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1014

主题

3459

帖子

7

粉丝