[其他ST产品] SPI DMA发送不成功的问题

[复制链接]
774|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的配置参数,包括波特率、数据位、停止位、时钟相位和极性等。确保这些参数与外设的要求匹配。
 楼主| jcky001 发表于 2024-2-24 08:00 | 显示全部楼层
硬件连接问题?
cr315 发表于 2024-2-24 09:08 | 显示全部楼层
如果在DMA传输过程中有其他通道同时进行数据传输,可能会导致冲突和传输失败。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1650

主题

5706

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部