从今年年初,OpenAI发布的ChatGPT已摧古拉朽之势席卷全球,短短两个月注册用户数就超过1亿人,是全世界增长速度最快的应用。很多人都说今年是AI元年,其实也是有一定道理的,之前的AI门槛相对较高,很多人没有机会参与其中,现在门槛几乎降到了零,普通人也可以参与到AI的浪潮中,作为一名嵌入式er,当然也要来试用一下,看看Chatgpt有多神奇,到底能不能解放我们的双手呢!
我准备了一块STM32F429IGT6的开发板,尝试让ChatGPT帮我实现按键输入功能,通过按键来控制不同的LED灯。话不多说,下面就开始让ChatGPT来帮我们编程吧。
1. 向ChatGPT提问
如何向ChatGPT提问非常关键,给出清晰明确详尽的prompt,才能生成质量更高的结果,避免后续调bug的麻烦,下面是我向ChatGPT抛出的Prompt
prompt: 基于HAL库编写按键控制LED灯程序,不需要用STM32CubeMX进行配置GPIO,直接用代码实现。
共有四个按键KEY0、KEY1、KEY2、KEY_UP以及两个LED灯LED0、LED1,要实现的功能是:KEY_UP控制LED0和LED1关闭;KEY2控制LED0,按一下状态翻转一次;KEY1控制LED1,按一下状态翻转一次;KEY0同时控制LED0和LED1,按一下状态翻转一次;用按键扫描的方式实现。
一、引脚的配置要求:
- KEY0、KEY1、KEY2、KEY_UP分别对应GPIO引脚PH3、PH2、PC13、PA0
- PH3、PH2、PC13引脚设置为输入模式、上拉模式,PA0引脚设置为输入模式、下拉模式
- KEY0、KEY1、KEY2、KEY_UP的键值分别定义为1、2、3、4
- LED0、LED1分别对应PB0、PB1
- PB0、PB1引脚设置为输出模式
二、代码编写的要求:
- 按键初始化程序、按键扫描程序要作为独立的模块(key.c)进行编写
- 按键扫描函数要添加防抖代码
- 不同的按键定义不同的键值
- 在主函数中根据不同的键值来判断哪个按键按下,然后实现相应的功能
- LED引脚初始化在MX_GPIO_Init()函数中实现
ChatGPT在一顿疯狂输出后,完成了代码的编写。初步看了一下,代码写得是真不错,但是能不能够实现功能,驱动起单片机的按键输入并按要求控制起LED灯呢?只有把代码拷贝到Keil中,编译下载到开发板中,验证一下才能知道答案了。
2. 拷贝代码
这里使用了STM32CubeMX搭建的基于HAL库的工程模板,因此拷贝上面的代码时,需要有选择性的拷贝。比如HAL库初始化函数、系统时钟配置函数,这些函数在搭建工程时,已经由STM32CubeMX自动生成了,所以无需重复拷贝
- 添加key.h文件,将ChatGPT生成的按键相关宏定义代码拷贝到文件中
- 添加key.c文件,将ChatGPT生成的按键初始化代码和按键扫描代码拷贝到文件中
- main.c文件中,拷贝LED驱动相关的代码
- 将按键控制LED灯的代码,拷贝至主函数while循环中
编译通过,没有任何报错,先给ChatGPT点个赞!
3. 编译运行
最终的考验来了!将编译好的代码下载到开发板中。重启开发板后,按键被成功的驱动起来了,能够按照描述的不同要求控制LED的组合亮灭,还带按键防抖,相当的丝滑。看下面的视频
不用手动编程!ChatGPT帮你轻松实现单片机按键输入功能
至此,通过ChatGPT生成代码,再结合ctrl+c和ctrl+v ,完全不用手动编程,ChatGPT帮我们轻松实现了单片机按键输入功能,牛!