硬汉嵌入式论坛

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

[SPI/QSPI] SPI数据发送问题

[复制链接]

2

主题

2

回帖

8

积分

新手上路

积分
8
发表于 2024-7-3 16:16:24 | 显示全部楼层 |阅读模式
STM32H7的SPI数据发送

我在发送函数下面要加一个短暂延时,才能发送数据,应该怎么解决

我在发送函数下面要加一个短暂延时,才能发送数据,应该怎么解决
回复

使用道具 举报

1

主题

9

回帖

12

积分

新手上路

积分
12
发表于 2024-7-3 16:32:06 | 显示全部楼层
大概率是数据没发送完成就把他失能了,延时改成判断发送完成标志,等待spi数据发送完成
回复

使用道具 举报

2

主题

2

回帖

8

积分

新手上路

积分
8
 楼主| 发表于 2024-7-3 16:47:42 | 显示全部楼层
lceihn 发表于 2024-7-3 16:32
大概率是数据没发送完成就把他失能了,延时改成判断发送完成标志,等待spi数据发送完成

okok,谢谢
回复

使用道具 举报

34

主题

206

回帖

308

积分

高级会员

积分
308
发表于 2024-7-3 18:25:16 | 显示全部楼层
应该是没发完就失能了吧
加下状态判断
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117564
QQ
发表于 2024-7-4 09:10:17 | 显示全部楼层
这个是之前做的寄存器方式,方便LL库参考

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*    函 数 名: ST7789_FillRect
*    功能说明: 用一个颜色值填充一个矩形。
*    形    参:
*            _usX,_usY: 矩形左上角的坐标
*            _usHeight : 矩形的高度
*            _usWidth  : 矩形的宽度
*            _usColor  : 颜色代码
*    返 回 值: 无
*********************************************************************************************************
*/
void ST7789_FillRect(uint16_t _usX, uint16_t _usY, uint16_t _usHeight, uint16_t _usWidth, uint16_t _usColor)
{
#if 1
    uint16_t i, j;
    uint16_t width, height;
    
    width = _usWidth;
    height = _usHeight;
    if (height > g_LcdHeight)
    {
        height = g_LcdHeight;
    }
    if (width > g_LcdWidth)
    {
        width = g_LcdWidth;
    }   

    for (i = 0; i < width; i++)
    {
        for (j = 0; j < height; j++)
        {
            ST7789_PutPixel(_usX + i, _usY + j, _usColor);
        }
    }
#else    
    uint32_t i;
	uint32_t Color;
	uint32_t blkcnt;
	
	Color = (uint32_t)(_usColor<<16) + _usColor;
	blkcnt = (_usHeight * _usWidth)>>1;
	
    ST7789_SetDispWin(_usX, _usY, _usHeight, _usWidth);

    LCD_RS_1();
    LCD_CS_0();
	
	SPI5->CFG1 = SPI_BAUDRATEPRESCALER_2 | 31;
    for (i = 0; i < blkcnt; i++)
    {     
		SPI5->CR1 = SPI_CR1_SSI; 
		SPI5->CR2 = 2;
		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 uint32_t *)&SPI5->TXDR) = Color;

		while ((SPI5->SR & SPI_SR_TXC) == 0);
		SPI5->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC;

		SPI5->CR1 &= ~(SPI_CR1_SPE);
    }
	
	if((_usWidth % 2) == 1)
	{
		SPI5->CFG1 = SPI_BAUDRATEPRESCALER_2 | 15;
		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 uint16_t *)&SPI5->TXDR) = _usColor;

		while ((SPI5->SR & SPI_SR_TXC) == 0);
		SPI5->IFCR = SPI_IFCR_EOTC | SPI_IFCR_TXTFC;

		SPI5->CR1 &= ~(SPI_CR1_SPE);
	}
    LCD_CS_1();
#endif    
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-15 03:36 , Processed in 0.041839 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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