2941|2

1532

帖子

1

TA的资源

五彩晶圆(初级)

楼主
 

【AT-START-F425测评】WS2812彩色灯环的显示驱动 [复制链接]

  本帖最后由 jinglixixi 于 2022-4-17 21:42 编辑

通常驱动W2812的方法是参照它的时序要求,以GPIO口来模拟它的时序进行驱动,

但对于主频较低的MCU来说则较难达到它的时序要求。

对于AT32F425来说,还可以利用它的SPI和DMA来驱动WS2812灯带,并按时序的要求将主频设为80MHz。

在该驱动方式下,其显示效果如图1和图2所示。

图1 显示效果1

 

图2 显示效果2

 

在实现WS2812的驱动过程中,要涉及一个变换处理函数,它需要将8位的二进制色彩值转换为一个4字节的32位二进制数,其中某位为“1”时,就转换为0xe(高电平占优);为“0”,则转换为0x8(低电平占优)。

尽管是使用SPI来驱动WS2812,但WS2812只有一个数据引脚,故其该引脚的配置函数为:

static void gpio_config(void)

{

  gpio_init_type gpio_initstructure;

  crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

  gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE15, GPIO_MUX_0);

  gpio_default_para_init(&gpio_initstructure);

  gpio_initstructure.gpio_pull           = GPIO_PULL_DOWN;

  gpio_initstructure.gpio_mode           = GPIO_MODE_MUX;

  gpio_initstructure.gpio_pins           = GPIO_PINS_15;

  gpio_init(GPIOB, &gpio_initstructure);

}

也就是说将WS2812与PB15相连接就可以了,实现演示效果的主程序为:

int main(void)
{
  int8_t mod;
  system_clock_config();
  at32_board_init();
  delay_us(100);
  gpio_config();
  spi_config();
  int8_t dir[WS2812_NUM][3] = {0};
  for(uint32_t i = 0; i < sizeof(WS2812_rgb_buf); i++)
 {
        for(uint32_t j = 0; j < 3; j++)
        {
            WS2812_rgb_buf[j] = i * (j + 2);
            dir[j] = j + 2;
        }
  }
  while(1)
 {
      dma_channel_enable(DMA1_CHANNEL5, TRUE);
      while(!dma_flag_get(DMA1_FDT5_FLAG));
      dma_flag_clear(DMA1_FDT5_FLAG);
      dma_channel_enable(DMA1_CHANNEL5, FALSE);
      DMA1_CHANNEL5->dtcnt = sizeof(WS2812_bit_buf);
      DMA1_CHANNEL5->maddr = (uint32_t)WS2812_bit_buf;
      delay_ms(10);
      uint8_t *buf = (uint8_t *)WS2812_rgb_buf;
      for(uint32_t i = 0; i < sizeof(WS2812_rgb_buf); i++)
     {
           for(uint32_t j = 0; j < 3; j++)
          {
                 *buf += dir[j];
                 if((*buf >= 255)||(*buf == 0))
                 {
                         dir[j] = -dir[j];
                 }
                 buf++;
           }
      }
      rgb_to_buf(&WS2812_rgb_buf[0][0],&WS2812_bit_buf[0][0]);
  }
}

 

最新回复

WS2812的驱动LED灯,很经典呀,好似这个可以做动态显示图像的,是这个吗?   详情 回复 发表于 2022-4-17 11:52
点赞 关注
 
 

回复
举报

7047

帖子

11

TA的资源

版主

沙发
 

WS2812的驱动LED灯,很经典呀,好似这个可以做动态显示图像的,是这个吗?

点评

没错,点位数多的效果比较好,否则显示的内容受限。  详情 回复 发表于 2022-4-17 21:36
 
 
 

回复

1532

帖子

1

TA的资源

五彩晶圆(初级)

板凳
 
lugl4313820 发表于 2022-4-17 11:52 WS2812的驱动LED灯,很经典呀,好似这个可以做动态显示图像的,是这个吗?

没错,点位数多的效果比较好,否则显示的内容受限。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表