打印
[其他ST产品]

SPI DMA发送不成功的问题

[复制链接]
194|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jcky001|  楼主 | 2024-2-19 11:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我今天在使用STM32G474RE来使用SPI+DMA发送给OLED屏时,在启动SPI+DMA发送时,如果使用如下代码:

/**
* @brief  Updates buffer from internal RAM to OLED with SSD1306 in horizontal addressing mode (blocks until interrupt function initialized)
* @note   This function must be called each time you do some changes to OLED, to update buffer from RAM to OLED
*/
uint8_t SSD1306_UpdateScreen(void)
{
        /* Writing data to display buffer - non-blocking function with SPI and DMA */
        uint8_t i,n,state;
        for(i= 0; i<8;i++)
        {
                ssd1306_SPI_WriteCmd(0xb0+i);
                ssd1306_SPI_WriteCmd(0x00);
                ssd1306_SPI_WriteCmd(0x10);
                state = ssd1306_SPI_WriteDisp(&SSD1306_Buffer[SSD1306_WIDTH*i],SSD1306_WIDTH);
                if(state == SSD1306_SPI_ERROR)
                {
                        break;
                }
        }
        return state;
}

使用特权

评论回复
沙发
gaonaiweng| | 2024-2-22 18:24 | 只看该作者
看起来你的代码是为了更新SSD1306 OLED屏幕的显示缓冲区,并通过SPI+DMA进行数据传输。然而,代码片段中并没有包括 ssd1306_SPI_WriteCmd 和 ssd1306_SPI_WriteDisp 函数的实现,这两个函数的具体内容可能包含了SPI和DMA的配置以及数据传输的实现。在你的代码中,你通过循环将数据从 SSD1306_Buffer 中传输到OLED屏幕的不同页。在每一页的传输中,你使用了 ssd1306_SPI_WriteCmd 函数发送两个命令,然后使用 ssd1306_SPI_WriteDisp 函数传输数据。在传输过程中,如果发生了错误(state == SSD1306_SPI_ERROR),则退出循环并返回错误状态。

使用特权

评论回复
板凳
梅花香自123| | 2024-2-22 18:53 | 只看该作者
使用调试工具,如串口输出、LED指示灯等,来辅助查找问题吧。

使用特权

评论回复
地板
两只袜子| | 2024-2-23 19:03 | 只看该作者
检查SPI和DMA的配置参数,包括波特率、数据位、停止位、时钟相位和极性等。确保这些参数与外设的要求匹配。

使用特权

评论回复
5
jcky001|  楼主 | 2024-2-24 08:00 | 只看该作者
硬件连接问题?

使用特权

评论回复
6
cr315| | 2024-2-24 09:08 | 只看该作者
如果在DMA传输过程中有其他通道同时进行数据传输,可能会导致冲突和传输失败。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1414

主题

3785

帖子

5

粉丝