目录
0.前言
这套教程针对于蓝桥杯嵌入式比赛的底层模块调试,针对于比赛进行每个模块的调试,低层模块调试好,对于赛题的实现就会方便很多,虽然有一些应试教育的意味,不过准备这个比赛对于程序整体实现思维还是有着很大帮助,我也从中受益颇多!
以下是cubemx的一些基础配置(部分),之后便不再贴出
时钟设置
项目设置
1.功能要求
STM32G431的开发板有一块LCD显示屏幕和8个LED灯,而LCD与LED灯的引脚是有重叠的,所以这块板子上使用了74HC573这块芯片对LED的变换进行控制,我们要实现的功能就是让LCD和LED能够独立工作。
电路原理图
2.STM32Cubemx初始化
将PC8~PC15,PD2设置为GPIO_Output,其他执行默认操作即可。(PC8~PC15不进行设置也可以,因为LCD的初始化程序已经初始化过了),之后生成代码即可。
3.程序实现
LCD
首先将赛场提供的液晶驱动参考程序中的lcd.c、fonts.h、lcd.h添加到自己的工程文件中(本操作为Keil的基本操作,不在赘述)
在main.c中添加头文件
/*main.c*/
#include "lcd.h"
并对LCD进行初始化,有关于LCD操作的函数都存放于lcd.h中,可以使用官方的例程对LCD的初始化进行测试
/*main.c*/
LCD_Init();
LED
定义变量,用来存放ODR寄存器的值
/*main.c*/
uint16_t LED_ALL=0xFFFF;
编写LED灯亮灭的相关函数
LED灯主要通过锁存器74HC573进行控制,在锁存器PD2使能引脚为高电平时LED状态进行设置,然后将PD2变为低电平保持。
LED关闭函数
(一般该函数需要在LCD初始化之后进行操作,将所有灯关闭)
/*main.c*/
void LED_Close(void)
{
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15|GPIO_PIN_8
|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
LEDx开启函数
使用ODR寄存器对LED灯进行控制
/*main.c*/
void LEDx_ON(uint16_t n)
{
LED_ALL&=(0xFEFF<<(n-1))|(0xFEFF>>(16-(n-1)));
GPIOC->ODR=LED_ALL;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
LEDx关闭函数
使用ODR寄存器对LED灯进行控制
/*main.c*/
void LEDx_OFF(uint16_t n)
{
LED_ALL|=(0x0100<<(n-1))|(0x0100>>(16-(n-1)));
GPIOC->ODR=LED_ALL;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
注:main.c中定义的函数请务必在main.h中声明,为方便后续模块的调用!!!
/*main.h*/
void LED_Close(void);
void LEDx_ON(uint16_t n);
void LEDx_OFF(uint16_t n);
相关函数定义位置stm43g4xx_hal_gpio.c
/*stm32g4xx_hal_gpio.c*/
HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);
4.工程文件
该工程文件为全10讲所有内容,可以作为参考,不过还是希望读者能够自己手敲一遍,加深记忆
链接:https://pan.baidu.com/s/1LcNszc7_oHWvXcucCezlxg?pwd=hw07
提取码:hw07
自己做的笔记,也希望能对你有帮助!