首页 > 其他分享 >CH585的SPI驱动WS2812

CH585的SPI驱动WS2812

时间:2025-01-10 14:44:17浏览次数:1  
标签:电平 WS2812 SPI grb PRINT pdest CH585

目录

链接: https://pan.baidu.com/s/1Su5dgmVWLre5kH2fYiGwQQ?pwd=wch6

CH573系列/583系列/592系列MCU,在使用SPI模拟WS2812波形时,MISO-PA15引脚上的实时电平,会影响MOSI-PA14引脚上的空闲电平状态,故建议SPI驱动WS2812的场景下,固定PA15的电平,不要接其他外设。
异常场景:当PA15引脚上为高电平时,PA14一组波形输出完,空闲态也变为高电平,会影响WS2812识别下一组波形的起始值。

 

CH585系列,实测SPI0已改良,PA14在输出一组DMA波形后,空闲电平始终为低电平,驱动不受PA15实时电平的影响,释放出PA15可以接其他外设。使能SPI后,PA14的GPIOset/reset接口失效,空闲电平固定为低电平;失能SPI后可以正常输出拉高/拉低PA14。

驱动WS2812主要函数:

/*
 * 将GRB灰度转换为通过SPI的DMA发出的比特流。每个WS2812灯珠需要12个字节来驱动。
 * uint8_t *grb_pdest:  SPI缓存数组
 * uint8_t *grb_psrc:   GRB灰度
 * uint16_t len:        灯珠数量
 * */
void grb_scale_2_spi_buff(uint8_t *pdest_grb, uint8_t *psrc_grb, uint16_t len)
{
    memset(pdest_grb, 0, len*3*4);     //数组清零
//  G/R/B驱动中的一个编码位用4个SPI位表示。每种色彩8个编码位,需要4字节。驱动G/R/B共24个位,故需要SPI波形中的96个位即12个字节来表示。
    for(uint16_t i=0; i<len; i++)
    {
        for(uint8_t j=0; j<3; j++)  //G/R/B三种色彩轮流配置
        {
            for(uint8_t k=0; k<4; k++)  //每种色彩8位灰度,用4个字节表示
            {
                for(uint8_t m=0; m<2; m++)  //每个字节包含两个ws2812编码位
                {
                    if( psrc_grb[3*i + j] & (0x80 >> (2*k + m)) )
                    {
                        pdest_grb[3*4*i + 4*j +k] |= (GRB_CODE_1 >> (m*4));
                        //PRINT("1 ");
                    }
                    else
                    {
                        pdest_grb[3*4*i + 4*j +k] |= (GRB_CODE_0 >> (m*4));
                        //PRINT("0 ");
                    }
                }
                //PRINT("%x ", spi_grb_buff[3*4*i + 4*j +k]);
            }
        }
        //PRINT("\n");
    }
    //PRINT("\n");
}

 

标签:电平,WS2812,SPI,grb,PRINT,pdest,CH585
From: https://www.cnblogs.com/JayWellsBlog/p/18663971

相关文章

  • STM32MP157AAA开发板通过GPIO模拟SPI驱动通信控制数码管
    实验目标:硬件:STM32MP157AAA开发板+拓展板管脚:拓展板上数码管(M74HC595),由下图可知,数码管通过SPI与核心板通信,时钟(S)CK对应PE12、主机输出从机输入(MOSI)对应PE14、主机输入从机输出(MISO)对应PE13、从设备选择(CSN)对应PE11,由于当前电路SPI只有一个从设备,因此在硬件层面上将PE11常置为......
  • Spinnaker
    Spinnaker是一个持续交付平台,它定位于将产品快速且持续的部署到多种云平台上。Spinnaker主要特性:配置一次,随时运行;随地部署,集中化管理;开源。Spinnaker组件:Spinnaker最初是以实现内部的端到端持续交付为目标,作为 Asgard 的替代,该项目期望重建一个持续交付平台,能够实现:......
  • C++ Qt练习项目 QSpinBox和QDoubleSpinBos 未完待续
    个人学习笔记新建项目设计UI......
  • [.NET] Aspire 9 新特性及优化
    ......
  • 【RK3588 Linux 5.x 内核编程】-内核SPI子系统
    内核SPI子系统文章目录内核SPI子系统1、SPI子系统2、内核中的SPI协议驱动程序2.1获取SPI控制器驱动程序2.2将从设备添加到SPI控制器2.3配置SPI2.4数据传输2.5删除设备3、驱动实现SPI是流行的串行通信协议之一。SPI(SerialPeripheral......
  • CH585的各memcpy时间开销测试
    目录在涉及大块的/高频次的数据传输时,需要考虑数组拷贝的时间开销。本文基于CH585,测试了部分场景下的memcpy时间开销。注:①使用CH585M_R1_1v0开发板+2024年11月25日EVT驱动代码②在main()中多次拷贝+GPIOA_InverseBits(GPIO_Pin_2);翻转IO测试。main()函数加了HIGHCODE修饰,翻转I......
  • 【JS逆向百例】某江 Hospital 逆向分析
    声明本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作......
  • Spire.PDF for .NET 10.12.4
    Spire.PDFfor.NETisaprofessionalPDFAPIappliedtocreating,writing,editing,handlingandreadingPDFfileswithoutanyexternaldependencieswithin.NET(C#,VB.NET,ASP.NET,.NETCore,.NET5.0,.NET6.0,.NET7.0,MonoAndroidandXamarin.iOS)ap......
  • FPGA QSPI 加载速度
    XilinxFPGA下如何加快QSPIFlash加载速度aibans520原文https://blog.csdn.net/qq_30219205/article/details/130299884 1.首先,不同型号的FPGA对外部QSPIFlash支持的最高频率是不一样的。XC6SLX45支持的最高频率仅为26MHz,而XC7K325T支持的最高频率高达66MHz。所以,当我们......
  • 【2024最新Java面试宝典】—— SpringBoot面试题(44道含答案)_java spingboot 面试题
    1.什么是SpringBoot?SpringBoot是Spring开源组织下的子项目,是Spring组件一站式解决方案,主要是简化了使用Spring的难度,简省了繁重的配置,提供了各种启动器,使开发者能快速上手。2.为什么要用SpringBoot快速开发,快速整合,配置简化、内嵌服务容器3.SpringBoot与Sp......