设计一个音频生成器:长按SW2播放,按下SW1/SW3可实时升高或降低音高
该项目是一个基于微控制器的C语言编写的音频生成器,配备三个按钮,用户可通过按钮播放声音或调节音高。它作为基本GPIO控制和按钮逻辑的实际演示。
第一步:硬件配置
1. 建立共同基础
•将RT-Spark板上的GND引脚连接到面包板的负极(-)排上。
•将RT-Spark板上的5V引脚连接一根跳线,接到面包板的正极(+)线上。
2. 连接开关
将三个按钮放置在面包板中间的沟槽上。
•SW1(频率提升):将一根引脚连接到接地轨道,另一根引脚连接到PA0引脚。
•SW2(播放音调):将一端连接到接地轨道,另一端连接至PA1引脚。
•SW3(频率下调):将一根引脚连接到接地轨道,另一根引脚连接到PA2引脚。
3. 连接压电蜂鸣器
•将压电元件的正极(长边)直接连接到PA8引脚。
•将压电元件的负极(较短的一端)直接连接到你的地线排上。
第二步:CubeMX 配置
•打开 STM32CubeMX,创建一个新项目,并选择 STM32F407ZGT6。
•启用调试:展开系统核心,点击 SYS,并将调试设置为串行线。
•配置输出:左键单击引脚 PA8 并选择 GPIO_Output。
•配置输入:左键点击 PA0、PA1 和 PA2,将每个设置为 GPIO 输入。
•启用上拉:转到系统核心 > GPIO,选择 PA0、PA1 和 PA2。在下方的配置窗口中,将它们的 GPIO 上拉/下拉设置更改为上拉。
•转到项目管理器选项卡,为您的项目命名,确保工具链设置为 STM32CubeIDE,然后生成代码。
第三步:CubeIDE 代码设置
1. 变量与函数原型
向下滚动到 /* USER CODE BEGIN 0 */。我们将在该处放置变量、自定义的DWT微秒延迟,以及读取引脚(PA0、PA1、PA2)并切换压电元件(PA8)的逻辑函数。
2. 启用循环计数器(用户代码开始 2)
为了确保我们的自定义 delay_us 函数能够访问 CPU 的内部时钟周期,我们必须在主循环开始前启用 DWT 计数器。请在您的 main() 函数中找到以下代码:
3. 主循环(用户代码开始 WHILE)
最后,我们需要不断轮询按钮,以便设备能够立即作出反应。将 update_buttons() 函数直接嵌入无限循环中。
第四步:物理测试
•播放声音:按住并长按 SW2,你应该能听到压电蜂鸣器发出的连续方波音。
•扫频:在持续按住 SW2 的同时,反复轻触 SW1。随着微秒延迟时间的减小,你将听到音调逐渐升高。
•降低音调:按住 SW2,多次轻触 SW3。随着周期增加,你将听到音高逐渐降低。
本文编译自hackster.io





