1.Cube MX配置
![](https://i-blog.csdnimg.cn/blog_migrate/b88a2b3972089e44a33a8a2d22f093a3.png)
2.代码部分
1.创建一个fun.c,fun.h,head.h文件
#include<fun.h>
#include<head.h>
void led_disp(uchar led)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,led<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
![](https://i-blog.csdnimg.cn/blog_migrate/5b059f14832ba7221dffb9f41b5b7f7f.jpeg)
头文件处
uint32_t time100ms;
void setup(void)
{
time100ms=uwTick;
}
程序段内
static bool led_s;
if(uwTick-time100ms>100)//LED闪烁
{
if(led_s)led_sta=(led_sta&0xfd)|0x02;
else led_sta=(led_sta&0xfd);
led_dis(led_sta);
led_s=!led_s;
time100ms=uwTick;
}
uint8_t led_sta=0;
led_sta=(led_sta&0xfe)|0x01;(第一个与1多的相与,确保只改变第一个灯的状态,其它灯状态不变。
第二个相或,只是第一个灯亮)
led_dis(led_sta);
3.LED闪烁
uint8_t led_sta[10]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
for(int i=0;i<8;i++)
{
led_dis(led_sta[i]);
HAL_Delay(100);
}
4.LED代码扩展
void led_on(uint8_t led)//用之前用led_dis(0x00);初始化一下
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,led,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void led_off(uint8_t led)
{
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,led,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
#define led1 GPIO_PIN_8
#define led2 GPIO_PIN_9
#define led3 GPIO_PIN_10
#define led4 GPIO_PIN_11
#define led5 GPIO_PIN_12
#define led6 GPIO_PIN_13
#define led7 GPIO_PIN_14
#define led8 GPIO_PIN_15
void led_on(uint8_t led);
void led_off(uint8_t led);
5.LED操作单一一个灯
uint8_t led_sta;
void led_dis(uint8_t led)
{
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOC,led<<8,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET);
}
void led_chg(uint8_t num,uint8_t sta)
{
uint8_t pos=0x01<<(num-1);
led_sta=(led_sta&(~pos))|(pos*sta);
led_dis(led_sta);
}