: 脚位:
(资料图)
0码:高电平时间220ns-500ns 低电平时间750ns-2us
1码:高电平时间750ns-2us 低电平时间220ns-500ns
复位码:300us以上的低电平
由24位数据控制,高8bit控制绿灯,中8bit控制红灯,低8bit控制蓝灯。
二:STM32介绍
由于STM32时钟教学时钟配置72兆,按照计算纳秒延时应该是可以的,可是通过实际测试,
可能由于单条指令也会时间延时,所以延时达不到纳秒,所以只能通过单条指令循环的方法
来实现纳秒延时。延时程序如下:
void delay_ns(u32 nus){
while(nus--);
}
以下为控制6个灯不同颜色的程序:
uint8_t rgb_data[18] =
{0x00,0xFF,0x00,0xFF,0x00,0x00,0x00,0x00,0xFF,0x7F,0xFF,0x00,0xFF,0xFF,0x00,0x00,0x7F,0xFF};
void delay_ns(u32 nus){ //延时程序n为1时大概延时时间为370ns左右
while(nus--);
}
void send_code(uint8_t * sdata){ //发送亮度数据
uint8_t i = 0,n = 0;
uint8_t x = 0,y = 0,z = 0;
for(x = 0;x < 18;x++){ //发送18字节数据;18 = 一个灯3字节数据*6个灯
n = sdata[x];
for(y = 0;y < 8;y++){
z = ((n< if(z){ LED2 = 1; //灯的控制脚位设置为输出高 delay_ns(7); LED2 = 0; delay_ns(1); //灯的控制脚位设置为输出低 }else{ LED2 = 1; delay_ns(1); LED2 = 0; delay_ns(7); } } } } int main(void) { delay_init(); //延时函数初始化 LED_Init(); //初始化与LED连接的硬件接口 LED2 = 0; delay_us(310); //发送数据前发送300us以上的复位数据 send_code(&rgb_data[0]); delay_us(310); send_code(&rgb_data[0]); //控制灯的数据发送两次以防其他影响 LED2 = 0; delay_ms(310); LED2 = 1; while(1); } 效果展示: 原文链接:https://blog.csdn.net/weixin_47869185/article/details/121718268