硬汉嵌入式论坛

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

[有问必答] Hal库使用SPI配合DMA发送数据

[复制链接]
回帖奖励 9 个金币 回复本帖可获得 1 个金币奖励! 每人限 1 次

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2023-9-6 17:10:32 | 显示全部楼层 |阅读模式
        u16 color1[1],t=1;
        u32 num,num1;
        color1[0]=color;
        num=(xend-xsta)*(yend-ysta)*4;
        LCD_Address_Set(xsta,ysta,xend-1,yend-1);//设置显示范围
        MYDMA_Config_Color();
        LCD_CS_Clr();
        SPI2->CR1|=1<<11;//设置SPI2 16位传输模式
        while(t)
        {
                if(num>65534)
                {
                        num-=65534;
                        num1=65534;
                }
                else
                {
                        t=0;
                        num1=num;
                }
                HAL_SPI_Transmit_DMA(&SPI2_Handler,(uint8_t *)color1,num1);
                while(1)
                {
                        if(__HAL_DMA_GET_FLAG(&SPI2TxDMA_Handler,DMA_FLAG_TC5))//等待通道5传输完成
                        {
                                __HAL_DMA_CLEAR_FLAG(&SPI2TxDMA_Handler,DMA_FLAG_TC5);//清除通道5传输完成标志
                                HAL_SPI_DMAStop(&SPI2_Handler);
                                break;
                        }
                }
        }
Hal库提供这个HAL_SPI_Transmit_DMA函数似乎只能发送8位的数据,但是我颜色代码是16位的,导致我LCD屏幕颜色错误,请教下各位,我应该怎么去发送16位的数据

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2023-9-6 17:13:33 | 显示全部楼层

回帖奖励 +1 个金币

HAL库的DMA方式用法姿势不对。

你应该在TxRxCplt回调里面设置标识,进入这里了才是完成了。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2024-11-21 12:09:11 | 显示全部楼层
关于上述问题我最近也遇到过,后来检查发现是DMA的配置传输位数设置错了,需要内存和外设都是设置为16位传输,同时SPI的使用寄存器方法改为16位传输时先要失能SPI,DMA传输完16位的屏幕数据后,改回8比特时,不要失能spi,不然会多传输一个数据,造成数据混乱,spi改回8bit模式时就不要失能了,非要失能也要等DMA传输完成后,稍微长一点时间后失能。因为DMA传输完后马上失能SPI会出现我刚才说的多传输数据,造成屏幕出错。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-12 02:45 , Processed in 0.038874 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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