嵌入式技术论坛
直播中

CDCNKA

9年用户 1302经验值
擅长:385288
私信 关注
[经验]

AB32VG1系列之使用IO来进行模拟SPI接口

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

更多回帖

发帖
×
20
完善资料,
赚取积分