时间在2021年2月4日,寒假放假在家好好学一学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(官方数据手册)
1.29彩色OLED代码参考 技新1.5'OLED、STM32F103VET6代码
代码太长, 先放效果图
妈的 买了没用几次, 就发现在其他颜色状态下看到OLED烧屏了 看来还是黑底比较好
手机拍下来有扫描纹路,这是正常的, 还有 引脚跟上节的SPI 0.96OLED引脚IO一样
-------------------------------------------------------------------
SPI介绍
SPI(Serial Peripheral Interface--串行外设接口)总线系统是一种同步串行外设接口,它可以使MCU 与各种外围设备以串行方式进行通信以交换信息。
SPI 总线系统可直接与各个厂家生产的多种标准外围器件直接接口,该接口一般使用 4 条线:串行时钟线(SCLK)、主机输入/从机输出数据线 MISO、主机输出/从机输入数据线 MOSI 和低电平有效的从机选择线 SS(有的 SPI 接口芯片带有中断信号线 INT、有的 SPI 接口芯片没有主机输出/从机输入数据线 MOSI)。
低功耗时:
当系统处于低功耗且不需要外围设备时,通过停止然后禁用外围设备可以实现最低功耗。可能并不总是需要 STOP 任务(外设可能已经停止),但如果发送,软件应等到收到 STOPPED事件作为响应,然后通过 ENABLE 寄存器禁用外设。
-------------------------------------------------------------------
现在实验为SPI模式的0.96OLED
连接的SPI_0.96OLED的IO引脚为
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
添加SPI驱动文件
具体在
..\..\..\..\..\..\modules\nrfx\drivers\src\nrfx_spi.c
..\..\..\..\..\..\integration\nrfx\legacy\nrf_drv_spis.c
添加SKD_CONFIG配置
添加SPI OLED的驱动文件
都是复制别人的 我这边修改下就用了
然后编译就报错了
.\_build\nrf52840_xxaa.axf: Error: L6200E: Symbol SPIM0_SPIS0_TWIM0_TWIS0_SPI0_TWI0_IRQHandler multiply defined (by nrfx_spim.o and nrfx_twi.o).
查了下,原来是SPI地址与TWI(IIC)地址相同,我这边用了TWI0,所以就不能使用SPI0了,故用SPI1
顺便把别人的SPI OLED代码加入
编译有错, 把 nrf_drv_spis.c删掉即可
1代码修改
2代码修改
3代码修改
main.c里面的代码
SPI_INIT();
Color_OLED_Init();
Fill_RAM(Black); //清屏
Display_Chinese(40, 25, 0, Red);
Display_Chinese(56, 25, 1, Green);
Display_Chinese(72, 25, 2, Blue);
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏
Display_String(45,0,"HELLO",Red);
Display_String(0,14,"ABCDEFGHIJKLMNOP",Green); //显示字符
Display_String(20,28,"QRSTUVWXWZ",Yellow); //显示字符串
Display_String(20,42,"1234567890",White); //显示字符串
Display_String(20,56,"-*/?.,<>{}=",Blue); //显示字符串
Display_String(0,70,"+++++++++++++++",Olive); //显示字符串
Display_String(0,80,"+++++++++++++++",Blue); //显示字符串
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏
Fill_RAM(Blue);
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏
Fill_RAM(Red);
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏;
Fill_RAM(Green);
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏;
Fill_RAM(Purple);
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏;
Fill_RAM(Yellow);
nrf_delay_ms(2000);
Fill_RAM(Black); //清屏;
Display_Chinese(0,0,0,Dcyan);
Display_Chinese(16,16,1,Olive);
Display_Chinese(32,32,2,Cyan);
while(1)
{
// printf("hello world! \r\n");
}
其他的驱动代码我都改好了 之后你们直接用就行 代码就放百度云上面了 我不喜欢放在CSDN上面 ,因为要积分,所以我就放百度云盘里面
链接:https://pan.baidu.com/s/1_pqw1x1HF5NpBP5IeCo9TQ
提取码:v1ha
复制这段内容后打开百度网盘手机App,操作更方便哦
解压到这里