本文针对于具有一定HAL库开发基础的人复习,如有侵权,我表示抱歉,请联系作者更改或删除,谢谢。本资料大部分来源于蚂蚁科技资料,已购买!!!!
Day一、LED
LED与LCD会发生冲突,在初始化LCD之后需要关闭LED。单独编写操作LED的函数。
LCD_Init();//LCD 初始化
LED_Control(0x00);//关闭LED控制
根据此原理图,我们控制LED时需要打开锁存器后才能控制LED,即先打开锁存器(拉高PD2电平),再关闭锁存器 (拉低PD2电平),Q端的数据就可以稳定输出。
设置关于LED 的IO口全为低电平输出模式
1.编写单独的LED控制函数:
#include "led.h"
void LED_Control(u8 led_ctrl)
{
//先熄灭所有LED灯 //HAL_GPIO_WritePin(GPIOC,GPIO_PIN_8|GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12|GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15,GPIO_PIN_SET); //让PC8~PC15输出高电平,熄灭LED
HAL_GPIO_WritePin(GPIOC, 0xff00, GPIO_PIN_SET); //让PC8~PC15输出高电平,熄灭LED
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); //打开锁存器
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); //关闭锁存器
//根据led_ctrl来点亮对应的LED
HAL_GPIO_WritePin(GPIOC, led_ctrl << 8, GPIO_PIN_RESET);//根据led_ctrl输出低电平,点亮LED
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET); //打开锁存器
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET); //关闭锁存器
}
使用示例:我的板子是0x55为 0101 0101 0是咩,1时亮,请注意你的板子引脚设置
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
LED_Control(0xff);//全开
HAL_Delay(500); //延时500毫秒
LED_Control(0x00);//全关
HAL_Delay(500); //延时500毫秒
}
另一种方法更为高效,采用滴答定时器的方式,编写单独的LED函数,在主循环里调用该函数任务即可。
// LED执行程序
__IO uint32_t ledTick = 0;
u8 led_ctrl = 0xff;
void LED_Process(void)
{
if(uwTick - ledTick < 100) return ; //不阻塞状态延时100ms
ledTick = uwTick;
LED_Control(led_ctrl);
led_ctrl = ~led_ctrl;
}
要采用不阻塞状态延时,需要创建一个函数,本质上是满足技术到达设定值时才可运行下面的条件任务,否则直接return退出函数,继续执行其他任务命令