[单片机芯片] 求助!ch582驱动ws2812很奇怪

[复制链接]
 楼主| TJM2613 发表于 2023-2-6 16:54 | 显示全部楼层 |阅读模式
本帖最后由 TJM2613 于 2023-2-14 14:43 编辑

定时器等初始化已完成
驱动代码移植ch57X的ws2812代码如下:
typedef struct {
    uint32_t g;
    uint32_t r;
    uint32_t b;
}ws2812_in_spi_buffer_t;

__attribute__((aligned(4))) ws2812_in_spi_buffer_t ws2812_buf[1];
uint32_t map_table[8] = {
    0x8e888888,
    0xe8888888,

    0x888e8888,
    0x88e88888,

    0x88888e88,
    0x8888e888,

    0x8888888e,
    0x888888e8,
};

void ws2812_set_rgb(ws2812_in_spi_buffer_t *buf,uint8_t r,uint8_t g,uint8_t b){

    buf->r = 0x88888888;
    for(uint8_t i=0;i<8;i++){
        if(r&0x1) {
            buf->r |= map_table;
        }
        r>>=1;
    }

    buf->g = 0x88888888;
    for(uint8_t i=0;i<8;i++){
        if(g&0x1) {
            buf->g |= map_table;
        }
        g>>=1;
    }

    buf->b = 0x88888888;
    for(uint8_t i=0;i<8;i++){
        if(b&0x1) {
            buf->b |= map_table;
        }
        b>>=1;
    }
}


void ws2812_test(char argc ,char *argv) {
    SPI0_MasterDMATrans((uint8_t *)ws2812_buf, 12*1);
}

void ws2812_off_all(void) {
    for(uint32_t i=0;i<1;i++) {
        ws2812_set_rgb(&ws2812_buf,0,0,0);

    }
    SPI0_MasterDMATrans((uint8_t *)ws2812_buf, 12*1);
}

uint8_t LED_cnt = 0;
void SPI_LED()
{
    if(LED_cnt == 0)
    {
        for(uint32_t i=0;i<30;i++) {
                ws2812_set_rgb(&ws2812_buf,0xff,0xff,0xff);
//白色最亮不正常
            }
            SPI0_MasterDMATrans((uint8_t *)ws2812_buf, 12*1);
    }else if(LED_cnt == 1)
    {
        for(uint32_t i=0;i<30;i++) {
                ws2812_set_rgb(&ws2812_buf,0xff,0,0);//红色最亮正常
            }
            SPI0_MasterDMATrans((uint8_t *)ws2812_buf, 12*1);
    }else if(LED_cnt == 2)
    {
        for(uint32_t i=0;i<30;i++) {
                ws2812_set_rgb(&ws2812_buf,0x00,0xff,0);
//绿色最亮正常
            }
            SPI0_MasterDMATrans((uint8_t *)ws2812_buf, 12*1);
    }else if(LED_cnt == 3)
    {
        for(uint32_t i=0;i<30;i++) {
                ws2812_set_rgb(&ws2812_buf,0x00,0,0xff);
//蓝色最亮正常
            }
            SPI0_MasterDMATrans((uint8_t *)ws2812_buf, 12*1);
    }
    LED_cnt++;
    if(LED_cnt >= 4)
    {
        LED_cnt = 0;
    }

}

白色灯并没有亮,而是只亮红色,随后尝试了RGB = 0Xff,0xff,0和RGB = 0xff,0,0xff,均不正常,全是只亮红色 ,而RGB = 0,0xff,0xff时是正常亮青色,请问是哪里出现了问题

 楼主| TJM2613 发表于 2023-2-7 10:40 | 显示全部楼层
移植ch573的程序,但是ws2812并没有亮

评论

问题已解决,灯驱动太多,供电不足  发表于 2023-3-8 16:44
WayJay1 发表于 2023-2-9 15:46 | 显示全部楼层
看波形

评论

[url=home.php?mod=space&uid=2621634]@天残梦[/url] :没有对引脚进行配置  发表于 2023-2-10 11:16
[url=home.php?mod=space&uid=3338398]@TJM2613[/url] :是什么原因呢  发表于 2023-2-9 23:23
谢了,已经解决了  发表于 2023-2-9 15:48
lilijin1995 发表于 2023-2-12 18:49 | 显示全部楼层
我也是昨晚用582的TIM PWM DMA实现了RainbowCycle效果:https://bbs.21ic.com/icview-3283418-1-1.html
 楼主| TJM2613 发表于 2023-2-14 14:46 | 显示全部楼层
请问这个问题有人遇到过吗?
天残梦 发表于 2023-2-17 19:45 来自手机 | 显示全部楼层
可能是Spi的时钟没配合适
sesefadou 发表于 2023-3-2 10:11 | 显示全部楼层
spi的设置不正确的吗?              
backlugin 发表于 2023-3-2 10:26 | 显示全部楼层
参考一下st,有相关的例程可以借鉴的。
eefas 发表于 2023-3-2 11:08 | 显示全部楼层
这个说明延时函数有问题。              
wwppd 发表于 2023-3-2 11:34 | 显示全部楼层
这个可以使用spi+dma的方式。
sdCAD 发表于 2023-3-2 11:43 | 显示全部楼层
驱动ws2812非常占用时间的。
macpherson 发表于 2023-3-2 12:02 | 显示全部楼层
驱动的效果怎么样              
modesty3jonah 发表于 2023-3-2 16:04 | 显示全部楼层
是不是SPI0时钟存在问题呢?              
LOVEEVER 发表于 2023-3-2 16:41 | 显示全部楼层
延时函数的问题
iyoum 发表于 2023-3-3 20:51 | 显示全部楼层
这个ws2812的功耗非常的大。
Antecer 发表于 2023-7-7 17:39 | 显示全部楼层
iyoum 发表于 2023-3-3 20:51
这个ws2812的功耗非常的大。

简直大得惊人,我这边DIY键盘的时候,为了图编程省事,就用了ws2812,然后硬件打样好了才突然想起来它的功耗可是单颗60mA左右,然后我这全键盘一百多颗LED,简直不敢乱来。又辛辛苦苦花了1天时间给它做了个亮度限制算法。
chenjun89 发表于 2023-7-11 08:15 来自手机 | 显示全部楼层
用示波器测下波形是否正确,如果不对的话,还是程序配置有问题。
yorkbarney 发表于 2023-8-3 22:39 | 显示全部楼层
ch582驱动ws2812不正常吗
updownq 发表于 2023-8-3 22:57 | 显示全部楼层
这个延时是不是有问题呢              
ingramward 发表于 2023-8-4 13:21 | 显示全部楼层
这个在ch32v307上移植过              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

41

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部

3

主题

41

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部