蓝桥杯嵌入式:LED灯的使用(一)
stm32g4蓝桥杯led灯的应用
蓝桥杯嵌入式:LED灯的使用(一)
GPIO模式特点:
我们通常使用的gpio的全称是通用输入输出。
它对应的输出模式有:
- 推挽输出(GPIO_MODE_OUTPUT_PP):既可以输出高电平,也可以输出低电平。
- 开漏输出(GPIO_MODE_OUTPUT_OD):如果没有上拉电阻,只能输出低电平,此种模式更多用在IIC协议下。
- 复用推挽输出(GPIO_MODE_AF_PP):将gpio用作第二功能,使用片内外设时候的IIC。
- 复用开漏输出(GPIO_MODE_AF_OD):将gpio用作第二功能,使用片内外设时候的SPI。
它对应的输入模式有():
- 模拟输入(GPIO_MODE_ANALOG):在比赛中采集ADC的时候常用。
- 浮空输入(GPIO_MODE_INPUT):在比赛中通常会拿来写键盘程序。
- 上拉输入(GPIO_Mode_IPU):将输入口上拉到VCC。
- 下拉输入(GPIO_Mode_IPD):将输入口上拉到GND。
GPIO的速率特点:
在蓝桥杯目前使用的开发板下的GPIO口的速率通常是有:2MHz、10MHz、50MHz。
CUBEMX对GPIO的设置
我们直接先把先把时钟树配置好,这里我们可以直接使用内部时钟配置配置成80mhz
然后对GPIO进行选择,根据比赛的原理图,我们知道了这里的LED灯需要使用这几个口。但值得强调的是,PD2是一个特殊的口,由于LED和LCD共用了PC8-PC15,所以我们需要在使用LED的时候先把PD2置高电平,然后写入LED所要的高低电平,然后置低电平,将数据所存在里面。
然后对CUBEMX进行设置,对应的值为输出模式。
生成工程文件夹
下面红色框的内容和我的设置一样(速成就不用管太多了):简单提一句就是只需要cubemx帮我们生成对应的.c.h文件别让他全部弄在main.c里面
代码文件设置
自己创建led.c和led.h的文件
ctrl+s保存在对应的文件夹,Src保存.c,Inc保存.h
然后回到keil编译器里面,将刚才的led.c文件放进User里。
核心代码
led.h文件(这是一个头文件代码的标准格式,无需多言)
#ifndef __LED_H
#define __LED_H
#include "main.h"
void led_control(uint8_t led_pin);
#endif
led.c文件:代码的总体逻辑就是选择什么灯要亮,然后先打开锁存器,让数据进去,先关闭所有灯,再让需要亮灭的灯进行设置,然后关闭锁存器。
强调一下,空值灯的PIN是按照八位来设置的,比如第一个灯就是00000001,第二个就是00000010,…,这样换算成十六进制就是0x01,0x02,0x04…
为什么要左移八位,那是因为在库函数的文件里是这样设置GPIO_PIN_X的,我们的是8-15所以二进制左移八位就是十六进制左移两位
#include "led.h"
void led_control(uint8_t led_pin)
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);//开锁存器
HAL_GPIO_WritePin(GPIOC,0xff00,GPIO_PIN_SET);//关闭所有灯
HAL_GPIO_WritePin(GPIOC,led_pin<<8,GPIO_PIN_RESET);//让需要亮灭的灯进行设置
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);//关闭锁存器
}
然后在main.c文件里加入刚才的头文件,尽量写在BEGIN和END里,这样就不会你重新CUBEMX配置后给你刷新掉
我们让第一个灯亮
现象:
更多推荐
所有评论(0)