硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3010|回复: 8
收起左侧

[SPI/QSPI] STM32H745 SPI问题

[复制链接]

7

主题

23

回帖

44

积分

新手上路

积分
44
发表于 2021-6-29 15:16:09 | 显示全部楼层 |阅读模式
汉哥,

我参照你H7的代码,使用H745驱动ST7789,基本上是移植你的代码,只是改了一些RESET\RS\CS的管脚,使用SPI5,但是在初始化BSP的时候只要加上LCD_InitHard,程序就跑步下去,追踪下看了,是卡在下面的函数,如果使用寄存器就是卡在while ((SPI5->SR & SPI_SR_TXC) == 0);,如果使用HAL_SPI_Transmit,就会卡在等待EOT的标志,感觉SPI没有执行操作,附件是代码。不知道是哪里需要设置了。

static void ST7789_SendByteQuick(uint8_t data)
{
#if 1   /* 纭欢妯″紡 */
          SPI5->CFG1 = SPI_BAUDRATEPRESCALER_8 | 7;
    SPI5->CR1 = SPI_CR1_SSI;
    SPI5->CR2 = 1;
    SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI;
    SPI5->CR1 = SPI_CR1_SPE | SPI_CR1_SSI | SPI_CR1_CSTART;

    while ((SPI5->SR & SPI_FLAG_TXE) == 0);

    *((__IO uint8_t *)&SPI5->TXDR) = data;
       
    while ((SPI5->SR & SPI_SR_TXC) == 0);
       
    SPI5->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC;
       
        SPI5->CR1 &= ~(SPI_CR1_SPE);
#else   /* 杞欢妯″紡 */
                HAL_SPI_Transmit(&hspi5 , &data , 1, 0xFFFFFFFF);
#endif

bsp_tft_st7789.c

35.79 KB, 下载次数: 2

bsp_tft_lcd.h

13.76 KB, 下载次数: 0

bsp_tft_st7789.h

1.9 KB, 下载次数: 0

bsp_tft_lcd.c

138.53 KB, 下载次数: 0

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-6-29 15:46:31 | 显示全部楼层
最关键的第1步,读ID正常吗
回复

使用道具 举报

7

主题

23

回帖

44

积分

新手上路

积分
44
 楼主| 发表于 2021-6-29 15:54:04 | 显示全部楼层
您指的是读7789的ID吗?
我感觉SPI压根就没发出去任何数据,应该是没到读ID的位置。
是不是缺了哪个参数或者中断没设置吗,不应该哈,应该都在这几个文件里了,其他位置也没有任何操作SPI的地方
企业微信截图_16249531563150.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-6-30 09:29:26 | 显示全部楼层
jacksimcom 发表于 2021-6-29 15:54
您指的是读7789的ID吗?
我感觉SPI压根就没发出去任何数据,应该是没到读ID的位置。
是不是缺了哪个参数 ...

那不正常,最起码这里要通过,方便的话,你的接线图发下
回复

使用道具 举报

7

主题

23

回帖

44

积分

新手上路

积分
44
 楼主| 发表于 2021-6-30 09:37:18 | 显示全部楼层
接线如下,不过目前我还没把H7和LCD接在一起,这个没影响吧,因为只有MOSI输出,就算任何器件都不接,程序应该跑的下去的   
PG15  --->  LCD_RS
    PE2   --->  LCD_CS
    PH6   --->  LCD_SCK        SPI3_SCK   
    PH7   --->  LCD_SDA        SPI3_MOSI
    PH9   --->  BACK_LIGHT    TIM12_CH2
   
    PB5   --->  LCD_RESET
    PH15  --->  电源控制
回复

使用道具 举报

2

主题

28

回帖

34

积分

新手上路

积分
34
发表于 2021-6-30 19:08:21 | 显示全部楼层
PH7 SPI5_MISO
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-7-1 09:30:05 | 显示全部楼层
jacksimcom 发表于 2021-6-30 09:37
接线如下,不过目前我还没把H7和LCD接在一起,这个没影响吧,因为只有MOSI输出,就算任何器件都不接,程序 ...

可以,不过接上测试靠谱。


PH7 是 SPI5_MISO,程序里面做了反向处理,可以用于MOSI,这点要注意
回复

使用道具 举报

7

主题

23

回帖

44

积分

新手上路

积分
44
 楼主| 发表于 2021-7-5 18:22:52 | 显示全部楼层
谢谢提醒,我把IO换到PFx的几个管脚,目前上屏看,50MHz的SPI刷新比较快了。

对了还有个问题,像这种SPI屏使用内部RAM的,对240x240这种屏幕,DMA2D这种高级货,memory to memory会不会好一些?能不能提高速度啊?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2021-7-6 08:35:58 | 显示全部楼层
jacksimcom 发表于 2021-7-5 18:22
谢谢提醒,我把IO换到PFx的几个管脚,目前上屏看,50MHz的SPI刷新比较快了。

对了还有个问题,像这种SPI ...

可以啊,你可以给你的显示屏开240*240大小的显存,通用DMA定期刷显存到SPI显示屏

而DMA2D可以刷数据到显存。即:DMA2D -> 显存 -> 通用DMA - > SPI 显示屏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 06:18 , Processed in 0.182286 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表