APT32F102-SIO模块控制WS2812
1.硬件电路
2. 数据协议采用单线归零码的通讯方式, 像素点在上电复位以后, DIN端接受从控制器传输过来的数据, 首先送过来的24bit数据被第一个像素点提取后, 送到像素点内部的数据锁存器, 剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点, 每经过一个像素点的传输, 信号减少24bit。 像素点采用自动整形转发技术, 使得该像素点的级联个数不受信号传送的限制, 仅仅受限信号传输速度要求 。
图片来自网络-
3.程序处理
/*************************************************************/
//SIO Functions
//驱动RGB LED(ws2812), RGB DATA = 24bit; 驱动数据输出排列方式:GRB
/*************************************************************/
void SIO_CONFIG(void)
{SIO_DeInit();//SIO_IO_Init(SIO_PB01); //配置IO为SIO模式//tx clk =4MHz, Ttxshift = 1/4 = 250ns;发送每bit时间是250nsSIO_TX_Init(SIOCLK_EN,11); ////TXCR1 TXCR0--空闲输出L//TXBUFLEN = 8-1 TXCNT =24-1// D0 D1 不使用//默认电平为低SIO_TX_Configure(SIO_IDLE_LOW,SIO_TX_LSB,7,23,0,0,SIO_OBH_4BIT,SIO_OBL_4BIT,7,1);
}void SIO_TXBUF_Send(CSP_SIO_T *sio,const uint32_t *pwData, uint32_t hwSize)
{uint32_t i;for(i = 0; i < hwSize; i++){sio->TXBUF = pwData[i];while(!(sio->RISR &SIO_TXBUFEMPT));}while(!sio->RISR &SIO_TXDNE);sio->ICR = SIO_TXDNE;
}/***************************************************/
//send
/**************************************************/
//rgb 原始数据
uint8_t byDipData[24*3] =
{//R G B0x07, 0x00, 0x00,//rgb10x00, 0x07, 0x00,//rgb20x00, 0x00, 0x07,//rgb30x00, 0x07, 0x00,//rgb40x07, 0x00, 0x00,//rgb50x00, 0x07, 0x00,//rgb60x00, 0x00, 0x07,//rgb70x00, 0x07, 0x00, //rgb80x07, 0x00, 0x00,//rgb90x00, 0x07, 0x00,//rgb100x00, 0x00, 0x07,//rgb110x00, 0x07, 0x00,//rgb120x07, 0x00, 0x00,//rgb130x00, 0x07, 0x00,//rgb140x00, 0x00, 0x07,//rgb150x00, 0x07, 0x00, //rgb160x07, 0x00, 0x00,//rgb170x00, 0x07, 0x00,//rgb180x00, 0x00, 0x07,//rgb190x00, 0x07, 0x00,//rgb200x07, 0x00, 0x00,//rgb210x00, 0x07, 0x00,//rgb220x00, 0x00, 0x07,//rgb230x00, 0x07, 0x00, //rgb24
};static uint32_t sio_led_data_conver(uint8_t byData)
{uint8_t i;uint32_t wData = 0xaaaa;for(i = 0; i < 8; i++){if(byData & 0x80)wData |= (0x01 << (2*i));byData = byData << 1;}return wData;
}static void set_led_rgb_store(uint32_t *pwLeddData,uint32_t hwLedNum)
{//led*(pwLeddData+hwLedNum*3) = sio_led_data_conver(byDipData[hwLedNum*3+1]) ; //G*(pwLeddData+hwLedNum*3+1) = sio_led_data_conver(byDipData[hwLedNum*3]); //R*(pwLeddData+hwLedNum*3+2) = sio_led_data_conver(byDipData[hwLedNum*3+2]); //B
}void led_rgb_display(uint8_t *byColData, uint32_t hwLedNum)
{uint32_t i;uint32_t wRgbData[72];for(i = 0; i < hwLedNum; i++) //hwLedNum = 8{set_led_rgb_store(wRgbData,i);}for(i = 0; i < hwLedNum; i++){SIO_TXBUF_Send(SIO0, &wRgbData[3*i],3);}
}/***************************************************/
//main
/**************************************************/
int main(void)
{delay_nms(1000);APT32F102_init();//while(1){SYSCON_IWDCNT_Reload();//....led_rgb_display(byDipData, 24);//发送输出测试delay_nms(1000);//....}
}
0x07, 0x00, 0x00,//rgb1 此处是对应编码格式。
bit1 bit 0
符合时序
APT32F102-SIO模块控制WS2812相关推荐
- 利用硬件SPI控制WS2812,驱动1024颗灯珠
" 简 介: 利用ESP32中的硬件SPI控制WS2812的显示.使用了高频三极管9018 作为输出接口反向器,确定合适的电阻参数,验证了驱动方案的硬件和软件的可行性. 关键词: WS281 ...
- 基于STM32的ESP8266模块控制多路继电器
基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...
- Arduino人体红外模块控制
Arduino人体红外模块控制 示例代码 /** Arduino UNO R3(或Arduino Nano)连接红外人体感应模块检测是否有人*/int irSensorPin = 3;//Arduin ...
- 【STC15控制WS2812 RGB彩灯级联】
STC15控制WS2812 RGB彩灯级联 下面是基于STC15F2K60S2的WS2812RGB彩灯级联测试. 一.WS2812介绍 引脚 工作时序 注意 当我们使用WS2812控制RGB彩灯的时候 ...
- Arduino控制WS2812灯带(灯环)
设计者:STCode(公众号同名) Arduino控制WS2812灯带(灯环) 1) WS2812灯 WS2812灯带 WS2812灯环 WS2812是一个集控制电路与发光电路于一体的智能外空LED光 ...
- 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码
树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码 文章目录 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码 一. Servo Driver ...
- 最简单DIY基于ESP8266的智能彩灯⑦(APP通过彩虹调色板和WIFI控制WS2812彩灯)
ESP8266和ESP32智能彩灯开发系列文章目录 第一篇:最简单DIY基于ESP8266的智能彩灯①(在网页用按钮点亮普通RGB灯) 第二篇:最简单DIY基于ESP8266的智能彩灯②(在网页用按键 ...
- 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯
本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...
- ESP32使用外设RMT控制WS2812灯条
目录 一.简介 二.所需材料 三.官方例程 四.使用方法 4.1 RMT初始化 4.2 WS2812初始化 4.3 点亮WS2812 五.LED颜色渐变 5.1 第一种实现方法 5.2 第二种实现方法 ...
最新文章
- 最快捷的Linux命令查询工具来了:「我该怎么做XX」,一句话自动返回操作指南...
- 1971 John McCarthy--人工智能之父和LISP语言的发明人(ZT)
- 基于Xml 的IOC 容器-解析配置文件路径
- 使用泛型解决之前的问题
- android studio adb 命令行,Android Studio如何配置adb以及经常使用命令
- mcrypt拓展_【PHP】Mcrypt 扩展模块安装及使用
- 基于DCT系数的实时监控中运动目标检测
- Python机器学习:评价分类结果005precisoion-Recall的平衡
- 设计灵感图片,到哪里搜索!看这里!
- docker 保存 环境持久化_为什么 Docker 适合微服务架构?
- 中国数据中心加速卡市场趋势报告、技术动态创新及市场预测
- 获取支付宝小程序链接
- 关于XAMPP Apache 启动失败的问题
- 为了下一代,抖音真的该关了---读<<我观察到的牛人有这三个特质>>有感
- yii2 aliases web.php,Yii2的深入学习--别名(Aliases),yii2aliases
- Android WebView播放视频并支持全屏
- 【笔记】位图(.bmp)和矢量图(Vector):位图是点阵图或光栅图,使用像素的一格一格来描述图像,放大以后每一个像素看就像是一个个的马赛克;矢量图是使用直线和曲线来描述图形,可以无限方法,不会失真
- 带货直播源码,浅谈直播实现过程和技术
- linux挂nas盘步骤,linux下需要将nas盘挂
- 使用三丰云免费云主机安装cyberpanel面板并创建wordpress站点
热门文章
- vs插件html,VSCode插件推荐-html实时加载插件-live server
- 软件测试中文电子版姚静_软件测试[(美)ron patton]读书笔记
- SQL学习(2):大厂真题实例-视频平均播放进度
- STM32F4(正点原子)学习笔记(一):GPIO及其小实验
- 【两行代码——最简单装X 哈哈哈】
- Collection集合入门
- 【开源库推荐】go-linq 强大的语言集成查询库如,ORM一般丝滑处理内存数据
- oracle minus 是什么意思,oracle minus用法
- 使用java进行本地文件全盘搜索
- CorelDraw 课程标准