文章目录
前言
原理部分跳转传送门。
一、时钟+GPIO配置
使用的tim1.
外部高速晶振
void OUT_H(void)
{
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
}
void OUT_L(void)
{
GPIOA->BSRR=GPIO_PIN_7;
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);
}
void OUT_R(unsigned int r)
{
((r&0x80) == 0x80)? OUT_H():OUT_L();
((r&0x40) == 0x40)? OUT_H():OUT_L();
((r&0x20) == 0x20)? OUT_H():OUT_L();
((r&0x10) == 0x10)? OUT_H():OUT_L();
((r&0x08) == 0x08)? OUT_H():OUT_L();
((r&0x04) == 0x04)? OUT_H():OUT_L();
((r&0x02) == 0x02)? OUT_H():OUT_L();
((r&0x01) == 0x01)? OUT_H():OUT_L();
}
void OUT_G(unsigned int g)
{
((g&0x80) == 0x80)? OUT_H():OUT_L();
((g&0x40) == 0x40)? OUT_H():OUT_L();
((g&0x20) == 0x20)? OUT_H():OUT_L();
((g&0x10) == 0x10)? OUT_H():OUT_L();
((g&0x08) == 0x08)? OUT_H():OUT_L();
((g&0x04) == 0x04)? OUT_H():OUT_L();
((g&0x02) == 0x02)? OUT_H():OUT_L();
((g&0x01) == 0x01)? OUT_H():OUT_L();
}
void OUT_B(unsigned int b)
{
((b&0x80) == 0x80)? OUT_H():OUT_L();
((b&0x40) == 0x40)? OUT_H():OUT_L();
((b&0x20) == 0x20)? OUT_H():OUT_L();
((b&0x10) == 0x10)? OUT_H():OUT_L();
((b&0x08) == 0x08)? OUT_H():OUT_L();
((b&0x04) == 0x04)? OUT_H():OUT_L();
((b&0x02) == 0x02)? OUT_H():OUT_L();
((b&0x01) == 0x01)? OUT_H():OUT_L();
}
void OUT_GRB(unsigned int g,unsigned int r,unsigned int b)
{
OUT_G(g);
OUT_R(r);
OUT_B(b);
for(int i=0;i<100;i++);
}
二、使用步骤
调用OUT_GRB函数,其中三个参数分别对应RGB三色中的G/R/B,最大255表示最亮,0表示最暗
for(int i=1;i<=4;i++)
{
OUT_GRB(255,255,255);//4个灯白色最高亮
}
for(int j=1;j<=4;j++)
{
OUT_GRB(0,0,255);//4个灯蓝最高亮,其他颜色灭
}
最终效果是前4个灯白色,后四个灯蓝色