日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STM32F413 SPI+DMA接收错误(SCK时钟接收后一直存在)【后参考网上论坛及F4官方例程:收发同时进行】

發布時間:2023/12/8 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STM32F413 SPI+DMA接收错误(SCK时钟接收后一直存在)【后参考网上论坛及F4官方例程:收发同时进行】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1:平臺 STM32F413 + GD5F4(spi nand flash)(沒開啟DMA中斷,讀寫操作NAND 都是單片機發起,所以知道什么時候讀,什么時候寫)

2: 問題(STM32 SPI+DMA機制發送,接收理解不到位)
能狗發送數據,但是接收數據不對且接收后,SCK時鐘一直存在

在不使用DMA情況下,正常讀寫


使用DMA后,DMA接收數據后一直有時鐘存在

當時思想是單寫和單讀數據;

Direction_CfgSpiHard(SPI_Direction_1Line_Tx); //設置SPI工作模式及方向
NAND0_CS_0();

// bsp_spiWrite1(PROGRAM_LOAD);
// bsp_spiWrite1( 0x0f & ((0&0xff00)>>8)); //讀內存塊+地址
// bsp_spiWrite1(0&0xff);
SPI_DMACmd(SPI2,SPI_DMAReq_Tx,ENABLE); //使能串口1的DMA發送
MYDMA_Enable(SPI2_TX_DMA_STREAM,20); //開始一次DMA傳輸!
while(DMA_GetFlagStatus(SPI2_TX_DMA_STREAM,DMA_FLAG_TCIF4)==RESET)
{

printf("\r\n write err! %d",DMA_GetCurrDataCounter(SPI2_TX_DMA_STREAM)); //得到當前還剩余多少個數據 };

//等待 DMA1_Steam4 傳輸完成

NAND0_CS_1();

單獨寫

void read_test(void)
{

NAND0_CS_0(); Direction_CfgSpiHard(SPI_Direction_2Lines_FullDuplex); //設置SPI工作模式及方向bsp_spiWrite1(READ_FROM_CACHE); //寫入讀命令bsp_spiWrite1(Byte_16 | ((0&0xff00)>>8)); //讀內存塊+地址 bsp_spiWrite1(0&0xff);bsp_spiWrite1(0x00); //虛擬字節

//等待 DMA1_Steam4 傳輸完成

Direction_CfgSpiHard(SPI_Direction_2Lines_RxOnly); //設置SPI工作模式及方向 SPI_DMACmd(SPI2,SPI_DMAReq_Rx,ENABLE); //使能串口1的DMA發送 MYDMA_Enable(SPI2_RX_DMA_STREAM,20); //開始一次DMA傳輸!while(DMA_GetFlagStatus(SPI2_RX_DMA_STREAM,DMA_FLAG_TCIF3)==RESET){printf("\r\n read err! %d",DMA_GetCurrDataCounter(SPI2_RX_DMA_STREAM)); //得到當前還剩余多少個數據};DMA_ClearFlag(SPI2_RX_DMA_STREAM,DMA_FLAG_TCIF3);//清除DMA1_Steam3傳輸完成標志 DMA_Cmd(SPI2_RX_DMA_CHANNEL,DISABLE);SPI_DMACmd(SPI2,SPI_DMAReq_Rx,DISABLE); //使能串口1的DMA發送 NAND0_CS_1();

}
單獨讀;數據不對,后用SPI讀設備ID,發現ID號滯后一個字節(估計是DMA接收后,讀ID時沒有清除標準位的原因);

后在網上查找說DMA操作SPI時讀寫同時進行的


參考這位博主的這段話 及 參考了官方的例程

現在收發同時進行
數據OK,波形正常

思考:DMA為什么不能通過SPI的單線收發工作模式,來接收收數據(難道是發送時需要清楚接收標準,接收時需要清楚發送標準?)

總結

以上是生活随笔為你收集整理的STM32F413 SPI+DMA接收错误(SCK时钟接收后一直存在)【后参考网上论坛及F4官方例程:收发同时进行】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。