我看数据手册一般是特性、引脚定义、外围电路、时序图以及驱动代码。

特性

● Top SMD内部集成高质量外控单线串行级联恒流IC;
● 控制电路与芯片集成在SMD 3528元器件中,构成一个完整的外控像素点,色温效果均匀且一致性高。
● 内置数据整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
● 内置上电复位和掉电复位电路,上电不亮灯;
● 灰度调节电路( 256级灰度可调),
● 红光驱动特殊处理,配色更均衡,
● 单线数据传输,可无限级联。
● 整形转发强化技术,两点间传输距离超过10M.
● 数据传输频率可达800Kbps, 当刷新速率30帧/秒时,级联数不小于1024点。

引脚定义

典型电路

在实际应用电路中,为防止产品在测试时带电插拔产生的瞬间高压损伤IC内部信号输入输出引脚,应在信号输入及输出端串接保护电阻。此外,为了使各IC芯片间更稳定工作,各灯珠间的退偶电容则必不可少;

时序图

看到这里就大致知道器件的功能了,剩下的就是要去关注驱动的注意点。

由于我采用PWM+DMA的方式去驱动SK6812,所以需要了解器件的数据传输时间和数据传输规则,方便确定我们的周期。

数据传输时间

从数据手册中可以看到厂家规定是码元周期最小为1.2us,所以我们采用PWM驱动时需要周期不大于1.2us。

逻辑“1”代表占空比在64%左右,逻辑“0”代表在33%左右。

24bit数据结构

24bit的数据是按照GRB的顺序发送,所以我们选择HEX转RGB时要注意“R”与"G"的HEX要交换一下位置。

数据传输方式

灯数据刷新的间隔要大于80us。

代码

初始化定时器3和输出比较器。

  /* Compute the prescaler value */PrescalerValue = (uint16_t) (SystemCoreClock / 20000000) - 1;/* TMRe base configuration */TMR_TimeBaseStructInit(&TMR_TMReBaseStructure);TMR_TMReBaseStructure.TMR_Period = 20;TMR_TMReBaseStructure.TMR_DIV = PrescalerValue;TMR_TMReBaseStructure.TMR_ClockDivision = 0;TMR_TMReBaseStructure.TMR_CounterMode = TMR_CounterDIR_Up; TMR_TimeBaseInit(TMR3, &TMR_TMReBaseStructure);/* PWM1 Mode configuration: Channel1 */TMR_OCStructInit(&TMR_OCInitStructure);TMR_OCInitStructure.TMR_OCMode = TMR_OCMode_PWM1;TMR_OCInitStructure.TMR_OutputState = TMR_OutputState_Enable;TMR_OCInitStructure.TMR_Pulse = CCR1_Val;TMR_OCInitStructure.TMR_OCPolarity = TMR_OCPolarity_High;TMR_OC1Init(TMR3, &TMR_OCInitStructure);TMR_OC1PreloadConfig(TMR3, TMR_OCPreload_Enable);

初始化DMA。ss

void DMA_Configuration(void)
{DMA_InitType DMA_InitStructure = {0};/* DMA1 Channel5 Config */DMA_Reset(DMA1_Channel6);DMA_DefaultInitParaConfig(&DMA_InitStructure);DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&TMR3->CC1;DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SRC_Buffer;DMA_InitStructure.DMA_Direction = DMA_DIR_PERIPHERALDST;DMA_InitStructure.DMA_BufferSize = sizeof(SRC_Buffer);DMA_InitStructure.DMA_PeripheralInc = DMA_PERIPHERALINC_DISABLE;DMA_InitStructure.DMA_MemoryInc = DMA_MEMORYINC_ENABLE;DMA_InitStructure.DMA_PeripheralDataWidth = DMA_PERIPHERALDATAWIDTH_HALFWORD;DMA_InitStructure.DMA_MemoryDataWidth = DMA_MEMORYDATAWIDTH_HALFWORD;DMA_InitStructure.DMA_Mode = DMA_MODE_NORMAL;DMA_InitStructure.DMA_Priority = DMA_PRIORITY_HIGH;DMA_InitStructure.DMA_MTOM = DMA_MEMTOMEM_DISABLE;DMA_Init(DMA1_Channel6, &DMA_InitStructure);/* DMA1 Channel5 enable */DMA_ChannelEnable(DMA1_Channel6, ENABLE);
}

使能定时器的预装载器、DMA和使能定时器。

  TMR_ARPreloadConfig(TMR3, ENABLE);TMR_DMACmd(TMR3, TMR_DMA_CC1, ENABLE);/* TMR3 enable counter */TMR_Cmd(TMR3, ENABLE);

根据数据手册可知, 周期我设置为20,所以13代表逻辑“1”,7代表逻辑“0”.

uint16_t SRC_Buffer[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \//按照GRB的顺序//FF0000 green13,13,13,13,13,13,13,13,\7,7,7,7,7,7,7,7,\7,7,7,7,7,7,7,7,\//00FF00 red7,7,7,7,7,7,7,7,\13,13,13,13,13,13,13,13,\7,7,7,7,7,7,7,7,\//0000FF blue7,7,7,7,7,7,7,7,\7,7,7,7,7,7,7,7,\13,13,13,13,13,13,13,13,\
};

上面的数据代码表示先用100us的低电平复位灯,按照GRB的顺序第一个灯显示绿色,第二个灯显示红色,第三个灯显示蓝色。

以上例程是基于雅特力AT32F407平台写的,不过在其他都一样可用。

SK6812驱动入门相关推荐

  1. Android驱动入门

    Android驱动入门 https://blog.csdn.net/brantyou/article/list/1?t=1 驱动入门

  2. Linux驱动入门(四)非阻塞方式实现按键驱动

    Linux驱动入门系列 Linux驱动入门(一)字符设备驱动基础 Linux驱动入门(二)操作硬件 Linux驱动入门(三)Led驱动 Linux驱动入门(四)非阻塞方式实现按键驱动 Linux驱动入 ...

  3. Android驱动入门系列(一)

    Android驱动入门系列(一)   -- Android驱动简介及编写第一个Android驱动 以下文章参考网上搜到的<Android驱动开发全过程(有图有真相)>一文,其中根据自己的实 ...

  4. kdir测试软件,[OK210开发板体验]入门篇(4)编程入门(NFS登录、驱动入门)

    前面分别介绍了 [OK210开发板体验]的第一篇:开箱验板 [OK210开发板验]的第二篇:板载资源 [OK210开发板体验]的第三篇:开发环境(软件安装,开发环境,烧写系统) 今天是[OK210开发 ...

  5. linux驱动编写(usb host驱动入门)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途. 联系信箱:feixiaoxing @163.com] usb协议是一个复杂的协议,目前涉及到的版本就有usb1.0, usb2.0, usb3.0.大 ...

  6. Linux驱动入门篇(一):Hello, world

    学习Linux驱动有半年的时间了,但是临近毕业,由于各种事务的耽误,很多东西遗忘,现在写此博客以记录重新学习的历程. 首先,自然是从最简单的内核模块,Hello, world开始啦. 1 #inclu ...

  7. Linux驱动入门基础基础知识

    嵌入式折腾了如此之久,今天终于有幸的点亮了第一个LED--故记录之 在Linux下,驱动可以分为三大类,字符设备,块设备,和网络接口. 这次完成LED驱动的就是的字符类设备(character dev ...

  8. Linux设备驱动入门----globalmem字符设备驱动

    1.什么是globalmem虚拟设备 (1).globalmem字符设备驱动中,分配一片内存大小为GLOBALMEM_SIZE(4K)的空间 (2).提供对该片内存的读写.控制和定位函数 (3).用户 ...

  9. linux 驱动入门 魏清,Linux下的SPI总线驱动(三)

    版权所有,转载请说明转自 原创作者:南京邮电大学  通信与信息系统专业 研二 魏清 五.SPI测试代码 对于SPI总线驱动,我们可以分为SPI控制设备驱动和SPI接口设备驱动.而作为驱动开发人员主要是 ...

最新文章

  1. 1023. 组个最小数
  2. 服务端高并发分布式架构演进之路【转】
  3. 使用第三方《UITableView+FDTemplateLayoutCell》自动计算UITableViewCell高度(Masonry约束)...
  4. Vue (响应式原理-模拟-3-Compiler)
  5. 浅谈算法和数据结构: 八 平衡查找树之2-3树
  6. GoLang爬取花瓣网美女图片
  7. linux系统声卡安装教程,Linux操作系统声卡驱动的安装与配置
  8. 51c语言延时作用,51单片机C语言延时函数的使用 - 51单片机C语言延时函数怎么定义和使用...
  9. html快捷键快速复制粘贴,复制粘贴快捷键是哪几个 最简单的复制粘贴快捷键的使用...
  10. go zap + lumberjack 日志按大小分割demo整理
  11. mysql sql stuff函数_mssql 系统函数 字符串函数 stuff 功能简介
  12. c语言Dvv实验报告,电渗实验报告
  13. 串行通信_SPI通讯协议
  14. 中国农科院深圳基因组所刘永鑫组招聘研究助理10万+/博士后30万+等岗位
  15. sql姓名、证件号码、手机号码脱敏
  16. 管理心理学第四讲.目标管理心理学 之一
  17. 2021电赛控制类预测【看了也不亏系列】
  18. SketchUp 2019 实现 Arboskin Pavilion(ITKE)建模教程
  19. elementUI——tab定位和渐变色图标
  20. 微信小程序开发——项目组成员合作开发问题 no merge base found

热门文章

  1. AHCI模式导致系统蓝屏
  2. 互斥锁--day33
  3. 快速去除图标斜线水印
  4. 中国地图投影(实现Lambert投影)
  5. 搞机助手功能介绍及使用指南
  6. qq更换头像php简单,Typecho将评论头像修改为QQ头像
  7. 常用类---Object类
  8. 微信小程序上传图片到阿里云OSS
  9. 对国产板子有阴影这些软硬件开源的ARM开发板可以学习Linux驱动
  10. 步进电机驱动器设计c语言软件,最新基于单片机系统的步进电机驱动STC单片机步进电机驱动器的设计及C语言程序.doc...