时间在2021年2月6日,寒假放假在家好好学一学nRF52840
今天还在感冒,休息一波
开发板:初雪的100出头那块 NRF52840 EVAL KIT
下载工具:JINLK V11(最好是JLINK V9以上 也有人用JLINK OB也行,其他的下载器诸如STLINK,DAP不建议用)
版本号: KEIL5编程环境,CMSIS为5.3.0, NRF52840的CMSIS为8.35.0
参考资料: NRF52840-Eval-Kit-Schematic.pdf(原理图)
nRF5_SDK_17.0.2_d674dde(官方例程)
nRF5_SDK_17.0.0_offline_doc(官方文档)
nRF52840_PS_v1.1.pdf(官方数据手册)
ws2812b数据手册
代码太长, 先放效果图
------------------------------------------------------------------------------
------------------------------------------------------------------------------
已用IO
0.96OLED / 1.29彩色OLED
D0(CLK) -> 12
D1(SDA) -> 23
RES -> 7
DC -> 21
CS -> 19
按键
KEY0 ->11
KEY1 ->24
KEY2 ->20
KEY3->17
LED
LED0 ->13
LED1->14
LED2->32+9=41
LED3->16
串口
TX ->6
RX ->8
ADC
光敏 -> 5
摇杆X -> 28
摇杆Y -> 29
IIC_0.96OLED
SDA -> 32
SCL -> 22
还没用到(空闲)
P0.0 1 2 3 9 10 15 26 27 30 31
P1.1 2 3 4 5 6 7 8 10 11 12 13 14 15
添加WS2812B 幻彩RGB
DAT ->25(1路)
DAT->15(第2路)
-------------------------------------------------------------------------------
------------------------------------------------------------------------------
先介绍下WS2812B
时序
可以看出,
1码时需要高电平时间为800ns左右
0码 需要400ns左右
传输流程是, 第一个灯吃掉24位数据之后,再把剩下的数据(已经少了24个数据了)原封不动的传到下一个灯
24位数据为 G R B 排列 ,其中B是最低8位
传输是高位先行(就是先传最高位,再传次高位)
数据手册推荐电路图
工作频率是 800Khz ( 就是它的周期,1.25u 要传输一Bit位,跟上面的0,1码相符合)
工作电压是3.3V~5.0V都行,我这边测试过3.3V是正常的, 5V更不用说了, 超过5.3V可能就烧,所以别用超过5.3V电源, 可以用5V电压,建议串一个大功率的(比如3A的)肖特基二极管,确保电压低于5V
------------------------------------------------------------------------------
------------------------------------------------------------------------------
------------------------------------------------------------------------------
下面直接代码
添加了中断,作为PWM停止之后更新数据用,后面会讲到中断里面
添加了一个播放序列结构体, 以及一个RAM数组存放序列内容(放RGB转换后数据的)
PWM1的代码没有变,但增加了中断事件函数
PWM2变更内容已指出
然后我在PWM中断里面 更新RAM数据数组, 做了个流水灯, true是上流,false是往下流
流水灯代码如上, 不理解的我也不需要你理解
此外,增加了指定位置修改颜色, 看不懂也没关系 , 也不需要你理解
主函数添加初始化
1是给PWM2控制器的RAM数据初始化内容
2是测试修改指定位置的颜色
3是运行一次PWM2, 跑完停止, 注意是跑完就停止了
这个基本没有变化
然后在定时器上面, 每隔500ms播放一次PWM序列, 注意,序列内容已经在PWM中断处更新了
代码因为个人使用. 就不放了,你们按上一节的单路PWM修改就行