**
STM32G431蓝桥杯HAL库学习笔记
**
LED灯互不干扰且不干扰LCD屏幕点亮
前言
由于led灯与lcd屏幕共用了PC8-PC15的引脚,所以如果直接进行相应的操作会对两者的显示造成影响。
一、电路板原理图
二、程序笔记
1.编程原理
利用锁存器SN74HC573进行LED 灯数据锁存,需要点亮led灯时,先读取GPIOC->ODR寄存器的值,在向ODR寄存器写入相应的16进制的数据,向锁存器的LE脚写入高电平打开寄存器,在输入低电平关闭锁存器,复位ODR寄存器的值。
2.程序源码
代码如下(示例):
bst_led.c文件
void LEDx_ON(uint8_t n) //打开led
{
LED_MODE&=((0xfeff<<(n-1))|(0xfeff>>(16-n+1)));
GPIOC->ODR=LED_MODE;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void LEDx_OFF(uint8_t n) //关闭led
{
LED_MODE|=((0x0100<<(n-1))|(0x0100>>(16-n+1)));
GPIOC->ODR=LED_MODE;
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_Delay(10);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
main.c
#include "main.h"
#include "bst_led.h"
uint16_t LED_MODE=0XFFFF;
int main(void)
{
LED_MODE=GPIOC->ODR; //不这样好像格式会出问题
LED_MODE|=0xff00; //另led 灯的初始值均为关闭状态
while (1)
{
}
}
总结
所使用的HAL库函数
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); //GPIO口写函数
功能:可以使LED灯单个和多个独立显示互不影响
新手小白所写,用于记录学习笔记,如果有误望大佬指出,勿喷,谢谢