使用RT-SPARK板内置的LED和硬件中断测量人类反应时间
该项目使用RT-Spark开发板(STM32F407ZGT6)进行开发。在绿色LED亮起前,会随机生成1到3秒之间的间隔时间。一旦灯亮起,用户应尽快按下按钮。微控制器会计算从按钮中断发生前执行的循环次数,这可作为用户反应速度的相对衡量指标。
STM32CubeMX
步骤1:在STM32CubeMX中配置硬件
1. 打开 STM32CubeMX,然后点击“文件”,再选择“新建项目”。
2. 点击“访问”进入MCU选择器,搜索并选择STM32F407ZGT6微控制器。
3. 在左侧菜单中,展开“系统核心”,然后点击“SYS 更改调试接口为串行线”,这对后续刷机非常重要。
4. 配置LED:在芯片图中,左键单击引脚PF11,选择GPIO_Output。右键该引脚,选择“输入用户标签”,并将其命名为GREEN_LED。
5. 配置按钮:左键点击 PC00 引脚(对应 RT-Sparkpark 板上的 LEFT LEFT LEFT 按钮),然后选择 GPIO_EXTI。右键单击该引脚,选择“输入用户标签”,并将其命名为 USER_SWITCH。
6. 设置中断触发器:进入系统核心 > GPIO,点击 USER_SWITCH_SWITCH 引脚(PC0),并将 GPIO GPIO 模式更改为外部中断模式,并启用下降沿检测。
7. 启用中断:进入系统核心 > NVIC,勾选您开关对应的 EXTI EXTI EXTI 线旁边的“启用”框(EXTI line0 中断)。
8. 转到项目管理器选项卡,为项目命名,将工具链/IDE更改为STM32CubeIDE,然后点击生成代码。
STM32CubeIDEIDE 安装
步骤2:将项目导入STM32CubeIDE
1. 在项目资源管理器中,找到你的核心文件夹。你需要在此处创建四个新文件来处理我们的自定义函数。
2. 右键单击 Inc 文件夹,选择“新建”>“头文件”,然后创建 leds.h 和 delay.h。
3. 右键单击 Src 文件夹,选择“新建”>“源文件”,然后创建 leds.c 和 delay.c。
4. 将相应的支持模块代码(位于代码部分)粘贴到以下四个文件中并保存。
步骤3:编写核心固件逻辑
1. 打开位于 Src 文件夹中的 main.c 文件。
2. 在文件顶部附近,找到 /* USER CODE BEGIN Includes */ */ */ 部分,并将您的自定义库与随机数生成的标准库一并包含进去:
3. 向下滚动到 /* USER CODE BEGIN PV */,并声明用于跟踪中断状态和最终得分的全局变量:
4. 滚动到文件底部的 /* USER CODE BEGIN 4 */ */ 处,编写回调函数。这会告诉微控制器在按钮被按下时,立即将我们的标志变量设置为 '1'。
5. 最后,在你的 int main(void)) 函数中找到无限的 while (1)) 循环。将核心游戏逻辑(位于代码部分提供的内容)粘贴到 /* USER CODE BEGIN 3 */ */ */ 块内。
步骤4:构建、刷入并运行
1. 点击顶部工具栏中的锤子图标来构建项目。确保控制台显示 0 个错误。
2. 将 RT-Sparkpark 板插入电脑,然后点击“调试”图标(Bug)将代码烧录到微控制器上。
3. 打开调试视图后,找到“实时表达式”选项卡(或通过“窗口”>“显示视图”>“实时表达式”打开)。
4. 点击“添加新表达式”,然后输入 final_reaction_time。
5. 点击“恢复”图标(绿色播放按钮)以开始代码。
6. 开始游戏吧!请将目光集中在棋盘上的白色方块上。当它变成绿色时,尽快按下左键。查看电脑屏幕,实时看到你的反应得分更新!
本文编译自hackster.io





