硬汉嵌入式论坛

 找回密码
 立即注册
查看: 206|回复: 1
收起左侧

[GPIO] 蜂鸣器驱动包在FreeRTOS中不能正常工作

[复制链接]

41

主题

80

回帖

203

积分

高级会员

积分
203
发表于 2025-9-14 21:25:19 | 显示全部楼层 |阅读模式

我在FreeRTOS中用硬汉哥的蜂鸣器驱动包,总是有问题。

具体用法大概如下:
FreeRTOS中有三个任务A,B,C
A跑LVGL,10ms运行一次
B调用蜂鸣器的beep_pro, 10ms调用一次
C执行蜂鸣器鸣叫,也就是调用beep_start,C任务也是10ms运行一次

我在A中通过UI设置蜂鸣器鸣叫方式,比如
0:持续鸣叫,
1:关闭鸣叫,
2:200ms时间间隔鸣叫,
然后每设置一次,就通过队列把序号发给C
然后在C中,接收来自A的设置,然后执行对应的鸣叫方式,类似
void C_task()
{
     sBeep_t  BeepConfig;
     unsigned char  get_index;
   
     while(1)
     {
            if(xQueueReceive(xQueueBeep, &BeepConfig, 0)==pdTRUE)   //接收来自任务A中的设置,实现对应的鸣叫方式
            {
                  get_index = BeepConfig.beepid;  //得到鸣叫方式序号:0,1,2
            }
            switch(get_index)
            {
                 case 0:
                    beep_Start(5, 5, 0); //持续鸣叫
                 break;


                 case 1:
                    beep_Start(0, 0, 1); //关闭鸣叫
                 break;



                 case 2:
                    beep_Start(10, 10, 5); //以100ms的时间间隔鸣叫5次
                 break;            

          }
     }
}


我全程都是用beep_start设置,包括关闭蜂鸣器,因为在硬汉哥的pdf文档中提到,其他函数不好用,我就只用了beep_start。
遇到的主要问题是,
1,蜂鸣器无法关闭,就是设置1的时候,蜂鸣器仍然在叫
2,设置到2,蜂鸣器持续鸣叫,并没有实现100ms间隔的鸣叫效果

总体感觉无法控制,不管设置哪个值,它总是持续的叫,无法得到期望的效果也无法关闭。。。
在某些情况下,设置关闭,它居然会以100ms的时间间隔鸣叫,感觉完全乱了
是不能在FreeRTOS中使用吗?还是我的用法不对?望指点。


回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
118335
QQ
发表于 2025-9-15 08:50:30 | 显示全部楼层
测试了个没问题


V7-FreeRTOS程序模板(含MDK和IAR).7z (1.73 MB, 下载次数: 4)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-9-26 19:32 , Processed in 0.041677 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表