SPI_OLED: 用GPIO模拟SPI
将二期驱动第18课中关于i2c的文件夹at24cxx复制到另一个文件夹下并重命名为spi_i2c_adc,并在该文件下创建si工程。
明确需要创建的文件及作用。
gpio_spi.c: 初始化spi【函数SPIInit】,提供oled.c所需的发送字节的函数【函数SPI_SendByte】; oled.c : 初始化oled【OLEDInit】,在oled屏上实现打印【OLEDprint】; gpio_spi.h oled.h
明确在main函数中调用的函数。
SPIInit(); //初始化spi OLEDInit(); //初始化oled OLEDprint(); //打印
实现各个模块函数。
4.1 初始化spi函数:SPIInit()
4.2 初始化oled函数:OLEDInit()
—初始化代码依据(数据手册)
—代码
—发送字节的时序图(OLED数据手册)
注:SPI_SendByte(该函数在gpio_spi.c文件中实现)
4.3 OLED打印:OLEDprint()
注:获取字模,这里将提供一个头文件oledfont.h定义所需的字模
—oledfont.h
—Oled_Set_Pos函数依据(OLED主控芯片数据手册:SPEC UG-2864TMBEG01 )
在oled.c文件中再实现两个函数,并在OLEDInit()中调用。
5.1 页地址模式函数
—OledSetPageAddrMode函数依据(OLED主控芯片数据手册:SSD1306-Revision 1.1 (Charge Pump))
—OledSetPageAddrMode函数
5.2 清屏函数
5.3 在OLEDInit()中调用以上两函数
编写两个头文件gpio_spi.h和oled.h,并完善(添加)各C文件所需的头文件。
—gpio_spi.h
—oled.h
—main.c中所需头文件
—gpio_spi.c中所需头文件
—oled.c中所需头文件
最后完善在main函数中调用函数的参数。(裸板代码至此完成)
修改文件夹下的Makefile,上传文件夹,编译(错误提示大多是函数声明问题:调整函数位置),编译成功生成i2c.bin文件。
—修改Makefile
—编译成功
用Openjtag将i2c.bin文件烧写到开发板的nand flash中,重新上电开发板,OLED屏幕
打印如图。—Openjtag烧写bin文件
—OLED屏幕
2017/12/26 星期二 23:02:50
SPI_FLASH:芯片手册W25Q16DV
读SPI_FLASH的ID
12/28/2017 7:40:54 PM
SPI_FLASH的擦除、烧写、读操作
12/30/2017 12:26:09 AM
测试ADC和I2C
测试ADC
将光盘中自带的测试ADC的文件(adc_ts.c和adc_ts.h),复制到spi_i2c_adc文件夹下,并在si工程中添加这两文件。
修改文件,OLED打印ADC的电压值
—adc_ts.c文件中的Test_Adc函数中打印
—adc_ts.c文件包含oled.h头文件
—在serial.c文件中添加Test_Adc函数所需的awaitkey函数,然后将其放入头文件serial.h中
—main函数调用,并包含adc_ts.h头文件
修改Makefile,上传修改的文件后编译,出现错误提示;并第二次修改Makefile后,编译成功。
—第一次修改Makefile
—错误提示(未包含关于浮点运算的库)
—第二次修改Makefile
—编译成功
烧写i2c.bin,OLED打印(如图1);用螺丝刀逆时针旋转可调电阻,OLED打印的电压变小(如图2)。
—图1
—图2
测试I2C
测试对i2c设备AT24c02是否能正常进行读写操作。
在main函数中调用函数,并OLED打印
(由于前面试验已将OLED屏占满)需要清除OLED某一页的函数,再将所需字符串打印。
—清页函数
—完善头文件oled.h
上传修改文件后编译,编译成功后将新的.bin文件烧写到开发板,重新上电,OLED屏幕打印如图(表明设备正常)。
12/30/2017 4:31:14 PM
s3c2440片内SPI控制器的使用
1/2/2018 12:53:24 PM