1. 硬件连接与按键原理
拿到STM32F407开发板,第一件事就是搞清楚按键怎么接的。我刚开始玩F407的时候,最头疼的就是按键电平判断不对,后来发现是自己没仔细看原理图。
开发板上的按键通常有两种接法:一种是按键一端接地,另一端接GPIO引脚(这种按下时是低电平);另一种是按键一端接电源,另一端接GPIO引脚(按下时是高电平)。F407探索者板子上,KEY0、KEY1、KEY2都是低电平有效,而KEY_UP(也就是WK_UP键)是高电平有效。
为什么要这样设计呢?其实很实用——KEY0、KEY1、KEY2用于常规操作,而KEY_UP因为需要防止误触,通常用作唤醒或者特殊功能按键,所以用了高电平有效。在实际连接时,KEY_UP接在PA0,KEY0接PE4,KEY1接PE3,KEY2接PE2。
如果你不确定自己板子的接法,一定要先查原理图。我当初就是没仔细看,结果按键扫描死活不工作,最后发现是电平判断反了。低电平有效的按键需要配置上拉电阻,这样没按下时引脚被拉到高电平;高电平有效的按键则需要配置下拉电阻。
2. 工程框架搭建
搭建工程框架是嵌入式开发的基础,但很多人容易在这里踩坑。我建议直接从模板工程开始,这样可以避免很多不必要的配置错误。
首先复制一个干净的工程模板,然后删除不需要的驱动文件,只保留最基本的misc.c、gpio.c、rcc.c和uart.c。为什么留这几个?因为misc负责中断相关配置,gpio控制引脚,rcc是时钟配置,uart可以用来调试输出。其他驱动等需要的时候再加,保持工程简洁很重要。
接下来创建HARDWARE文件夹,在里面添加led.c/h、beep.c/h和key.c/h。这个习惯很好,把功能模块分开,以后维护起来方便很多。记得在IDE中添加这些文件到项目,并设置头文件包含路径。我见过有人直接把所有代码写在一个文件里,后期改功能简直是一场灾难。
时钟配置也很关键。F407的主频是168MHz,但刚开始学的时候容易忽略时钟使能。每个GPIO端口都要使能对应的时钟,比如GPIOA和GPIOE的时钟都在AHB1总线上。如果忘了开时钟,配置再正确也没用——这是我踩过的第一个坑。

423

被折叠的 条评论
为什么被折叠?



