发新帖我要提问
12
返回列表
打印
[活动专区]

【AT-START-WB415测评】PWM+DMA驱动WS2812B

[复制链接]
楼主: 6552918
手机看帖
扫描二维码
随时随地手机跟帖
21
性能非常不错啊

使用特权

评论回复
22
arosyyy| | 2022-10-9 11:08 | 只看该作者
楼主你好,我用的是gd32f303cc,灯珠是可以正常亮了,但现在问题是我驱动的灯珠有一千多个,现在只能驱动不到一半的灯珠,数组内存只能填写uint16_t,驱动不了后面的灯珠,然后现在不知道如何是好,请大佬指教下

使用特权

评论回复
23
6552918|  楼主 | 2022-10-9 11:24 | 只看该作者
arosyyy 发表于 2022-10-9 11:08
楼主你好,我用的是gd32f303cc,灯珠是可以正常亮了,但现在问题是我驱动的灯珠有一千多个,现在只能驱动不 ...

可以尝试用多个通道,分时发送,共用内存,或者数据提前建好,放到flash里,从flash传输数据

使用特权

评论回复
24
arosyyy| | 2022-10-9 16:18 | 只看该作者
6552918 发表于 2022-10-9 11:24
可以尝试用多个通道,分时发送,共用内存,或者数据提前建好,放到flash里,从flash传输数据 ...

这gd芯片的定时器只有单个通道的,flash的话应该怎么弄呢

使用特权

评论回复
25
6552918|  楼主 | 2022-10-9 17:17 | 只看该作者
arosyyy 发表于 2022-10-9 16:18
这gd芯片的定时器只有单个通道的,flash的话应该怎么弄呢

像存图片一样,建数组

使用特权

评论回复
26
arosyyy| | 2022-10-10 08:55 | 只看该作者
6552918 发表于 2022-10-9 17:17
像存图片一样,建数组

我就是用数组来存储数据,然后通过dma发送的

使用特权

评论回复
27
6552918|  楼主 | 2022-10-10 10:36 | 只看该作者
arosyyy 发表于 2022-10-10 08:55
我就是用数组来存储数据,然后通过dma发送的

把数组定义到flash中,不要在内存中

使用特权

评论回复
28
arosyyy| | 2022-10-10 16:17 | 只看该作者
6552918 发表于 2022-10-10 10:36
把数组定义到flash中,不要在内存中

有没有例程啥的,第一次没参照6

使用特权

评论回复
29
6552918|  楼主 | 2022-10-10 16:48 | 只看该作者
arosyyy 发表于 2022-10-10 16:17
有没有例程啥的,第一次没参照6

数组用const声明一下

使用特权

评论回复
30
arosyyy| | 2022-10-11 17:06 | 只看该作者
6552918 发表于 2022-10-10 16:48
数组用const声明一下

这样就没了吗?

使用特权

评论回复
31
6552918|  楼主 | 2022-10-11 17:51 | 只看该作者

数据都存flash了,RAM不就剩下了吗

使用特权

评论回复
32
arosyyy| | 2022-10-11 19:47 | 只看该作者
6552918 发表于 2022-10-11 17:51
数据都存flash了,RAM不就剩下了吗

#define TRANSFER_NUM     (24*LED_NUM)

const uint16_t dma_ws2812_buffer[TRANSFER_NUM];       

while(memaddr < 300)//复位
                {
                dma_ws2812_buffer[memaddr] = 0x00;//报错等号
                memaddr++;        
                }
                 
         for(i=0; i<8; i++) // GREEN data
                {
                dma_ws2812_buffer[memaddr] = ((AuarRGBTableBuf[1]<<i) & 0x0080) ? T1H:T0H;//等号报错
                memaddr++;
                }
                 for(i=0; i<8; i++) // RED
                 {
                dma_ws2812_buffer[memaddr] = ((AuarRGBTableBuf[0]<<i) & 0x0080) ? T1H:T0H;//等号报错
                memaddr++;
                }
                for(i=0; i<8; i++) // BLUE
                {
                dma_ws2812_buffer[memaddr] = ((AuarRGBTableBuf[2]<<i) & 0x0080) ? T1H:T0H;//报错
                 memaddr++;
                }
                }

}

如果在定义数组那里加了const,那么就不能赋值占空比的大小了,报错

使用特权

评论回复
33
6552918|  楼主 | 2022-10-11 21:19 | 只看该作者
arosyyy 发表于 2022-10-11 19:47
#define TRANSFER_NUM     (24*LED_NUM)

const uint16_t dma_ws2812_buffer[TRANSFER_NUM];       

用const定义完当然不能再动态赋值了,需要把每个周期的占空比数值建数组

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则