当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]本项目使用RT-Spark开发板和STM32F407ZGT6微控制器构建,主要通过代码延时来产生频率,实现引脚的开关控制、读取按钮输入、保存状态,并通过被动蜂鸣器发出提示音。

本项目使用RT-Spark开发板和STM32F407ZGT6微控制器构建,主要通过代码延时来产生频率,实现引脚的开关控制、读取按钮输入、保存状态,并通过被动蜂鸣器发出提示音。

系统使用三个按钮进行控制。其中一个按钮用于播放声音,另外两个按钮则用于增加或减小音调频率。通过微秒级延迟函数切换GPIO引脚来生成音调,而非使用硬件定时器。这种方式使学生能够理解时间控制对嵌入式系统中信号生成的影响。

注意:软件生成的频率总是低于硬件(如定时器)生成的频率,因为代码总会引入函数开销。虽然通常延迟可能只有纳秒级微秒,但在精度方面,尤其是在时间受限的应用中,不建议使用此类方式,而应优先选择对CPU负担较小的硬件,以节省CPU资源用于其他任务。

硬件配置

软件配置

音色生成

下图展示了频率生成的核心部分,该函数通过反复改变输出引脚(PA2)的状态,并在状态转换之间添加延迟,来生成或模拟方波。持续时间是可选的,仅用于设置周期重复的次数。

“update_buttons”函数仅检查按钮状态,以防止在按住按钮时逻辑持续执行,简而言之,这是通过软件而非硬件实现的去抖动。

频率——软件与现实

由于方波完全由软件生成,因此容易出现精度误差,通常会因函数开销而产生纳秒级或微秒级的延迟,甚至更严重的情况。特别是当延迟功能本身也主要依赖软件而非硬件实现时,问题更为明显,具体如下所示。

此处显示,由于功能开销,上升沿和下降沿均出现轻微的斜坡变化,预期的100微秒周期变为约115微秒,并且电压状态在两者之间存在轻微不一致。

结论——我们学到了什么,以及本可以做什么

该项目成功展示了软件延迟、按钮输入和GPIO切换如何协同工作以控制一个无源蜂鸣器。虽然使用软件循环是理解信号时序的有效教学工具,但测试表明,软件驱动的频率在实际应用中存在明显不足。由于CPU必须依次处理每一微秒的延迟和按钮检测,函数开销会额外增加15微秒,使目标100微秒周期增加,从而导致波形失真。

为了实现近乎完美的精度,系统应从软件循环切换至STM32F407ZGT6内置的硬件定时器。通过在PWM模式下使用定时器,微控制器利用其内部硬件时钟生成方波,完全消除软件指令延迟,从而精确输出目标频率。更棒的是,一旦初始化完成,硬件定时器便会独立在后台运行,这意味着CPU几乎无需处理信号生成任务。这使处理器免于浪费周期进行倒计时或引脚切换,从而将所有资源完全用于其他任务。

同样地,将按钮去抖功能从软件程序转移到RC电路等硬件滤波器中,可以立即清理输入信号,而无需让CPU暂停等待接触反弹。最终而言,虽然软件延迟有助于演示基本概念,但要确保信号的精确性并完全减轻CPU负担,唯一的方法就是利用专用的硬件外设。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在本次实验中,使用了STM32F407ZGT6的模数转换器(ADC)外设来测量两个电压源:CR2032锂聚合物电池和USB 5V总线电源。由于STM32F407ZGT6的ADC只能安全接收最高达VDDA + 0.3V(绝...

关键字: 电压监测器 模数转换器 STM32F407ZGT6

你是否好奇过微控制器如何同时处理多个任务?本项目展示了STM32F407ZGT6 RT-Spark开发板上定时器中断和任务调度的工作原理。两个定时器以不同的频率闪烁LED,而按钮中断则在按下时立即响应——所有这些功能都通...

关键字: 微控制器 开发板 LED STM32CubeMX

该项目是一个简单的人体反应计时器,使用RT-Spark开发板和STM32F407ZGT6微控制器构建而成。它用于测量当RGB LED亮起时,人能多快做出反应。

关键字: 微控制器 开发板 LED STM32F407ZGT6

该项目是一个基于微控制器的C语言编写的音频生成器,配备三个按钮,用户可通过按钮播放声音或调节音高。它作为基本GPIO控制和按钮逻辑的实际演示。

关键字: 微控制器 C语言 音频生成器 STM32F407ZGT6

火焰无声,但我们可以通过简单的电子元件为它们“装上耳朵”!这个DIY火灾报警器项目利用红外接收传感器检测火光辐射,并立即触发声音(蜂鸣器)和视觉(LED)报警。该电路以13009 NPN晶体管作为主开关,结构简单、可靠且...

关键字: 蜂鸣器 LED 传感器 1N4007二极管

在这次实验活动中,我学习了如何在STM32F407ZGT6微控制器上使用定时器、中断和任务调度。主要目标是理解中断的工作原理、多个任务如何在系统中运行,以及不同的调度方法对任务性能的影响。

关键字: 定时器 中断 微控制器 STM32F407ZGT6

显示屏每100毫秒刷新一次,使时钟更新平稳且准确。一个每毫秒运行一次的定时器中断在后台负责时间记录,确保时钟保持精确。同时,一个外部LED灯每秒闪烁一次,然后逐渐变暗直至关闭,通过PWM实现平滑的淡出效果。

关键字: 数字时钟 开发板 STM32F407ZGT6

中国深圳,2026年7月 – 生成式系统级芯片(GenSoC)的领先开发者XMOS日前宣布:推出新一代VocalFusion® XVF3620智能语音处理器。该芯片集成AI降噪算法与完整的片上语音处理链路,可在嘈杂、有回...

关键字: 开发板 AI降噪算法 机器人

2026 年 7 月 19 日,中国上海讯 - 国内领先的芯片IP设计与服务提供商安谋科技(中国)有限公司(以下简称“安谋科技Arm China”)近日宣布首次亮相WAIC,携手Arm生态,通过Edge AI、Physi...

关键字: 驱动AI 开发板 算力

开发从通过FSMC外设使 onboard LCD 正常工作开始,使用裸机驱动程序(drv_lcd)来处理背光、复位和显示初始化。当屏幕上出现“Hello World”后,下一步是将 GPIOG 上的上、下、左、右和中央开...

关键字: LCD 上拉电阻 RT-Spark 开发板
关闭