目录
前言:
本篇博客建立在新建工程的基础上,大家如果感兴趣的话,可以去看一下,这里我就不再展示新建工程的部分了。
正文开始:
根据官方提供的数据手册,我们在驱动LED模块的时候不得不使用74HC573锁存器。
在开始驱动之前,我们了解一下573锁存器。
573锁存器:
D0-D7是8位数据输入线,Q0-Q7是8位数据输出线。
OE是输出允许,低电平有效,为低电平时,三态门全开,当OE为高电平时,输出为高阻态。
LE是数据输入允许,高电平有效。
当使能LE(G)为高时,Q 输出将随数据LE(D)输入而变。当使能为低时,将输出锁存在已建立的数据电平上。
而官方的设计将OE端接地,LE端连接在了PD2上,也就意味着,我们将PD2置为高时,Q0-Q7的输出均由D0-D7决定。明白了这一点之后,我们再来到STM32Cubemx上操作。
管脚操作:
在软件中,我们选择PC8到PC15这八个引脚,全部选择为GPIO_Output模式,然后我们将电平全部设为高(个人习惯),然后我们也将PD2置为GPIO_Output模式。之后,我们只需要点击右上方的GENERATE CODE即可。
代码编写:
因为我们是第一次添加外设,我们先在工程文件夹下新建一个BSP文件夹,这个文件夹用来存放以后我们添加的外设。
然后,右键点击项目,选择manage project,将我们新建的文件夹给添加进来。
我们再新建一个LED.c和LED.h文件,并且将这两个文件给放到BSP这个文件夹里面,同时在魔法棒里点击C/C++选项卡
将这个文件路径给包含过来之后,我们就可以在LED.c和LED.h中编写我们的程序了
led.c:
#include "led.h"
void led_Disp(uchar dsled)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,dsled<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
led.h:
#ifndef __LED_H
#define __LED_H
#include "main.h"
void led_Disp(uchar dsled);
#endif
之后,为了实现LED流水灯效果,我在main.里面做了如下修改:
for(led_bit = 0;led_bit < 8;led_bit ++)
{
led_Disp(0x01<<led_bit);
HAL_Delay(500);
}
补发:
之前在学习正点原子的STM32F103精英板的时候,他们提供了一种位带操作,这让我觉得很方便,但是如果要在比赛中默写出这个位带操作的头文件还是比较麻烦的,我们可以直接利用& |操作来完成具体某个LED的闪烁,我们在C函数中定义这个变量,我们再去头文件中声明一下
#include "LED.h"
//LED升级版,具体让某一位LED亮且不影响其他几位
unsigned char led_show;//重点在这
void LED_disp(unsigned char dsled)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,dsled<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
#ifndef __LED_H
#define __LED_H
#include "main.h"
extern unsigned char led_show;
void LED_disp(unsigned char dsled);
#endif
具体用的时候,我们直接包含这个头文件即可,然后用&|操作来控制这个LED灯
LED_disp(led_show|0x10);
//对应的就是第5个灯亮
评论(0)
您还未登录,请登录后发表或查看评论