scyangjunjie 发表于 2023-3-13 17:04

AT32F435硬件SPI驱动TFT屏,无法正常驱动

本帖最后由 scyangjunjie 于 2023-3-13 17:34 编辑

芯片用的是AT32F435VGSPI2只挂了一个TFT屏
引脚定义如下
PB13 SCK
PC2 MISO
PC3 MOSI
PB12 CS


问题现象:示波器能观察到输出时序,但是TFT无法显示,尝试调整分频系数,还是无法显示
尝试修改:将硬件SPI换成GPIO软件模拟SPI,就能正常显示(没有用到MISO引脚读入,纯写入操作)各位帮忙看看。{:lol:}

代码如下
#include "stdio.h"
#include "bsp_spi.h"
spi_init_type spi_init_struct;


static void spi_gpio_config(void);
/**
* @briefspi configuration.
* @paramnone
* @retval none
*/
void spi_config(void)
{

spi_gpio_config();
crm_periph_clock_enable(CRM_SPI2_PERIPH_CLOCK, TRUE);
spi_default_para_init(&spi_init_struct);
spi_init_struct.transmission_mode = SPI_TRANSMIT_FULL_DUPLEX;
spi_init_struct.master_slave_mode = SPI_MODE_MASTER;
spi_init_struct.mclk_freq_division = SPI_MCLK_DIV_64;
spi_init_struct.first_bit_transmission = SPI_FIRST_BIT_MSB;
spi_init_struct.frame_bit_num = SPI_FRAME_8BIT;
spi_init_struct.clock_polarity = SPI_CLOCK_POLARITY_LOW;
spi_init_struct.clock_phase = SPI_CLOCK_PHASE_2EDGE;
spi_init_struct.cs_mode_selection = SPI_CS_SOFTWARE_MODE;
spi_init(SPI2, &spi_init_struct);

spi_enable(SPI2, TRUE);




}
/**
* @briefgpio configuration.
* @paramnone
* @retval none
*/
static void spi_gpio_config(void)
{
gpio_init_type gpio_initstructure,gpio_initstructure1;
crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
gpio_default_para_init(&gpio_initstructure);

/* spi2 sck pin */
gpio_initstructure.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_pull         = GPIO_PULL_DOWN;
gpio_initstructure.gpio_mode         = GPIO_MODE_MUX;
gpio_initstructure.gpio_pins = GPIO_PINS_13;
gpio_init(GPIOB, &gpio_initstructure);
gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE13, GPIO_MUX_5);

/* spi2 miso pin */
gpio_initstructure.gpio_pull         = GPIO_PULL_UP;
gpio_initstructure.gpio_pins         = GPIO_PINS_2;
    gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
    gpio_initstructure.gpio_mode         = GPIO_MODE_MUX;
gpio_init(GPIOC, &gpio_initstructure);
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE2, GPIO_MUX_5);

/* spi2 mosi pin */
gpio_initstructure1.gpio_out_type       = GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure1.gpio_pull         = GPIO_PULL_UP;
gpio_initstructure1.gpio_pins         = GPIO_PINS_3;
gpio_initstructure1.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure1.gpio_mode         = GPIO_MODE_MUX;
gpio_init(GPIOC, &gpio_initstructure1);
gpio_pin_mux_config(GPIOC, GPIO_PINS_SOURCE3, GPIO_MUX_5);

/////////////////////////////////////////////////////////////////////////
/* spi2 cs pin */
gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
gpio_initstructure.gpio_out_type= GPIO_OUTPUT_PUSH_PULL;
gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
gpio_initstructure.gpio_pins = GPIO_PINS_12;
gpio_initstructure.gpio_pull = GPIO_PULL_NONE;
gpio_init(GPIOB, &gpio_initstructure);

}

void spi2SendByte(uint8_t byte)
{

    while(spi_i2s_flag_get(SPI2, SPI_I2S_TDBE_FLAG) == RESET);
    spi_i2s_data_transmit(SPI2,byte);
}


这部分是模拟的时序
就用了SCKMOSI
void SPI2SendByte(uint8_t byte)
{
        unsigned char i,Result = 0;;
        for(i=0;i<8;i++)
        {
                if(byte & 0x80)        SPI_MOSI(1);
                else SPI_MOSI(0);
                byte <<= 1;
               
                SPI_CLK(0);
                SPI_CLK(1);
               
                Result <<= 1;
                //if(SPI_MISO()) Result |= 0x01;
        }
        SPI_CLK(0);
        //return(Result);
}


muyichuan2012 发表于 2023-3-13 17:43

SPI驱动LCD可参考这个demo

eefas 发表于 2023-4-4 22:05

这个是spi的速度的问题吧。            

xiaoyaodz 发表于 2023-4-4 22:17

官网的代码移植过来的吗            

wwppd 发表于 2023-4-4 22:30

使用的是硬件spi的吗            

cemaj 发表于 2023-4-7 09:37

你看看官网提供的代码是怎么实现的

ccook11 发表于 2023-4-7 09:43

网上有很多的教程的。            

qiufengsd 发表于 2023-4-7 10:08

硬件SPI需要读取数据的            

loutin 发表于 2023-4-7 18:14

是不是屏幕跟不上速度呢            

phoenixwhite 发表于 2023-4-7 23:20

使用模拟spi操作tft怎么样            

nomomy 发表于 2023-4-7 23:40

软件模拟SPI,这个可移植性很高。

skys2000 发表于 2023-4-29 10:02

你这是9位spi吧,没有dc脚?不过也是可以硬件spi的
页: [1]
查看完整版本: AT32F435硬件SPI驱动TFT屏,无法正常驱动