NRF52840学习历程(九)SPI协议1.29彩色OLED屏幕

时间在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,操作更方便哦

 

解压到这里

猜你喜欢

转载自blog.csdn.net/jwdeng1995/article/details/113647739