【单片机】基于STM32CubeMX与Keil实现《CSGO据点争夺战》项目

项目介绍

在这里插入图片描述
*这里基于此项目,实现简单的《CSGO据点争夺战》比赛记录器(可以自行改变)

STM32CubeMX配置

1.选择芯片

2.GPIO设置


KEY1:PC4
KEY2:PB10
KEY3:PC13
KEY4:PA0
以上四个引脚设置为中断模式
*PD2/3/4/7为LED,本项目可忽略

3.NVIC设置

在这里插入图片描述
开启如上四个使能
*USART1设置见下文

4.RCC设置

在这里插入图片描述
高速时钟如上设置

5.USART1设置

在这里插入图片描述
该为启用串口收发功能

6.时钟设置

在这里插入图片描述

7.项目管理设置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
恭喜你完成了STM32CubeMX的配置!

Keil代码实现

1.初始化

在这里插入图片描述

2.printf函数实现

1.引入头文件

2.重定向printf函数
在这里插入图片描述

3.启用LIB
在这里插入图片描述

3.中断回调函数实现(主要功能实现)

1.定义全局变量,用于存放A方与B方的值(flag见下文)
在这里插入图片描述

2.实现当不同的按键被按下时,执行相应的操作(红框内为核心代码)
在这里插入图片描述
*GPIO_PIN_4对应上文PC4(KEY1),仅以此举例
*以上代码未全部列举,需自己实现

4.按键消抖实现

1.定义变量flag
在这里插入图片描述

2.每隔500ms重置flag
在这里插入图片描述

3.仅当500ms内,中断回调函数被第一次调用时执行
在这里插入图片描述

5.项目美化

1.加入初始化提示
在这里插入图片描述

2.加入相应事件反馈
在这里插入图片描述

3.加入胜利判断
在这里插入图片描述
*__disable_irq()函数功能为:禁用中断回调函数(使按键无效)
*游戏结束后,只能重新开始游戏(reset程序)

4.加入比分情况反馈,提高游戏性(仅展示A方)
在这里插入图片描述
恭喜你,成功完成此项目!

技术细节

1.引脚中断模式和输入模式区别

中断模式:只有当按键被按下时才会触发相应事件,占用CPU资源低。
输入模式:一直检测按键是否被按下,占用CPU资源高。

2.printf实现解析

重定向:printf()和scanf()的底层实现是fputc()和fgetc()函数,该函数使输出流输出到屏幕(或从屏幕读入),使用重定向后,更改输出流输出到串口(或从串口读入)。
*这里未用到scanf()函数

3.volatile关键字解析

volatile:直接存取原始内存地址,使编译器对该变量不做优化

4.keil汉字乱码解决

在这里插入图片描述
在这里插入图片描述
*如无乱码,无需此步
*每次重构keil文件后引发的个别汉字或字符乱码,可以重写,无需此步

5.串口输出时存在"\r"或"\n"解决

在这里插入图片描述
\r前加入空格(英文)即可解决
*此问题可能为keil的兼容性问题

6.按键消抖解析

在这里插入图片描述
如上,按键被按下时,可能会多次调用中断回调函数,使得用户实际体验变差。

小结

又一次写到了12点,此过程让我满怀激动。同时也发现了自身存在的一些问题。
如有错误,敬请指正。如需获得完整代码,可私信作者。
感谢向我提供帮助的各位同志!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值