GD32307E-START IO模拟SPI控制RGBLED(03)
[复制链接]
续上一篇https://bbs.eeworld.com.cn/thread-1143118-1-1.html
今天我们来做一个利用GD32307E-START IO模拟SPI控制RGBLED实验
1.RGBLED控制芯片为P9813
接线图如
参考P9813 datasheet我们知道需要一个时钟信号和一个数据信号才能使其工作
完成以上剩下就是code实战
1.整合3个三原色数据到一个变量
void RGBLED_DataDealWithAndSend(uint8_t r,uint8_t g,uint8_t b)
{
uint32_t dx=0;
dx |= (uint32_t)0x03 << 30; //前两位'1'位标志位
dx |= (uint32_t)RGBLED_TakeAntiCode(b) << 28;
dx |= (uint32_t)RGBLED_TakeAntiCode(g) << 26;
dx |= (uint32_t)RGBLED_TakeAntiCode(r) << 24;
dx |= (uint32_t)b << 16;
dx |= (uint32_t)g << 8;
dx |= r;
RGBLED_DatSend(dx);//发送数据
}
2. MCU发送数据到芯片
void RGBLED_DatSend(uint32_t dx)
{
uint8_t i;
for(i=0;i<32;i++)
{
if((dx & 0x80000000) !=0)
RGBLED_SDA_H();
else
RGBLED_SDA_L();
dx<<=1;
RGBLED_SCL_L();//delay_us(200);
RGBLED_SCL_H();///delay_us(200);
}
}
3.最终的控制函数
void RGBLED_Show(uint8_t r,uint8_t g,uint8_t b)
{
RGBLED_Send32Zero();//发送前32位'0'起始帧
RGBLED_DataDealWithAndSend(r, g, b);//发送第一个32bit灰度数据
RGBLED_DataDealWithAndSend(r, g, b);//发送第二个32bit灰度数据
}
4.IO初始化
#define RGBLED_SCL_H() GPIO_BOP(GPIOC) = GPIO_PIN_8
#define RGBLED_SCL_L() GPIO_BC(GPIOC) = GPIO_PIN_8
#define RGBLED_SDA_H() GPIO_BOP(GPIOC) = GPIO_PIN_7
#define RGBLED_SDA_L() GPIO_BC(GPIOC) = GPIO_PIN_7
#define RGBLED_SDA_O() {gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_7);}
#define RGBLED_SCL_O() {gpio_init(GPIOC, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_8);}
#define RGBLED_SDA_I() {gpio_init(GPIOC, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, GPIO_PIN_7);}
以上完成直接编译donwload至实验板测试验证
1a0fb6b47389684980edbd4b178c2e40.mp4
(2.07 MB, 下载次数: 1)
实验验证测试结束,期待下一篇IIC OLED SHOW
|