终于要点灯了!
在点灯之前,我们需要做的应该是看板子的原理图,找准LED的GPIO口,以及他的相关电路,以此我们才知道应该配置成什么,
上图!
如图,LED模块有三个灯,LED0和LED1以及一个电源信号灯,而且LED1和LED0接的都是VCC,然后就去寻找LED0和LED1对应的引脚,对应的是PF9和PF10.
正因为LED接的是vcc,因此我们要想使其导通应该给低电平,这样才能使其导通。
明白了电路原理,紧接着就可以点开cubemx进行配置。
在FIle里点击新建,然后选择相应的芯片STM32F407ZGT6,然后队时钟进行配置。
RCC选择高速时钟HSE,SYS的Debug选择Serial Tire(总线),如果这个不选择,而后续把程序烧录进芯片里了话,那板子就是一次性的,所以之后的每次配置一定要记得。
而TimeBase Source的意思,顾名思义,就是时钟来源,我们这里系统默认的是系统时钟,这里还可以选择定时器产生的时间信号,这个我们后续会介绍。
然后就是应该配置时钟树,这个是32的心跳,如果想进行任何操作,一定要首先给32提供心跳,在这里只要按照下图配置即可。主频8Mhz。
接下来应该配置GPIO,
在point view视窗里配置PF9和PF10为GPIO_OUTPUT 模式,
输出电平为低电平,GPIO的模式选择为推挽输出,选择的是pull_up,在自己的GPIO备注里也可以自己定义,而速度则对应的是GPIO响应速率,选择低速即可,两个GPIO口都需要这样定义。
然后即可生成相应的文件,这里的ide看个人需求,我选择的是keil,然后生成代码,编译,无报错无警告,
然后下载进开发板,两个灯都成功点亮!!!
(分别是红灯和黄灯,蓝灯是电源灯)
本着模块化编程的原则,我们针对led的点亮,写一个函数,就不用每次调用hal库的函数了。
#ifndef KEY_LED_H
#define KEY_LED_H
#ifdef LED1_Pin//LED1的控制,通过调用相关HAL库函数
#define LED1_Toggle() HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin)//翻转电平
#define LED1_ON() HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_RESET) //给低电平
#define LED1_OFF() HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin,GPIO_PIN_SET) //给高电平
#endif
#ifdef LED0_Pin//LED0控制
#define LED0_Toggle() HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin)
#define LED0_ON() HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET)
#define LED0_OFF() HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET)
#endif
#endif
引用Key_LED.h之后,直接在main函数里调用,即可熄灭LED1.
大功告成!!!
然后我们可以简单利用HAL_Delay 函数做一个跑马灯
下一期预告,按键点灯!!