1.硬件
官方并没有给出硬件SPI的相关资料,因此只能使用IO来进行模拟SPI
在使用IO进行模拟SPI时遇到了一些关于硬件的坑。
1.引脚对不上
为解决这个问题只能使用其他IO口
2.软件
本次驱动的是1.8寸TFT屏幕,其主控是ST3375,使用SPI的方式驱动。具体SPI代码如下,工程代码详见GITEE
// 发送8位数据
void lcd7735_senddata(uint8_t data)
{
for(int i=0;i<8;i++){
LCD_CLK0;
if( data& 0x80){
LCD_SDA1;
}
else{
LCD_SDA0;
}
LCD_CLK1;
data = data<<1;
}
}
// 发送16位数据
void lcd7735_send16bData(uint16_t data)
{
for(int i=0;i<16;i++){
LCD_CLK0;
if( data& 0x8000){
LCD_SDA1;
}
else{
LCD_SDA0;
}
LCD_CLK1;
data = data<<1;
}
}
/*
- Copyright (c) 2006-2020, RT-Thread Development Team
- SPDX-License-Identifier: Apache-2.0
- Change Logs:
- Date Author Notes
- 2021-03-19 78677 the first version
*/
#include "main.h"
static struct rt_thread spi_thread;
ALIGN(RT_ALIGN_SIZE)
static rt_uint8_t spi_thread_stack[1024];
static void Spi_Thread_Entry(void *parm);
void Spi_Thread_Entry(void *parm){
lcd7735_ini();
lcd7735_fillrect(0,0,160,128,BLACK);
rt_thread_mdelay(1000);
lcd7735_putstr(80,0,"HELLO RT-THREAD",WHITE,BLACK);
while(1){
rt_thread_mdelay(1000);
}
}
int Spi_Init(void){
rt_thread_init(&spi_thread, "spi_thread", Spi_Thread_Entry, RT_NULL,
&spi_thread_stack[0], sizeof(spi_thread_stack), 10, 10);
rt_thread_startup(&spi_thread);
return 0;
}
INIT_APP_EXPORT(Spi_Init);
3.效果
原作者:JiangYangJie
|