找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1557|回復: 4
打印 上一主題 下一主題
收起左側(cè)

求助關(guān)于STM32單片機SPI+dma傳輸數(shù)據(jù)的問題

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:905498 發(fā)表于 2023-8-23 12:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大佬好,前面發(fā)過一個問題了,現(xiàn)在又來麻煩大家了。
就是用STM32F103單片機驅(qū)動24位AD的話,通過硬件SPI,讀取數(shù)據(jù)時是這樣的:
//讀取24位數(shù)據(jù)
sum |= (SPI2_ReadWriteByte(0xff) << 16);
sum |= (SPI2_ReadWriteByte(0xff) << 8);
sum |= SPI2_ReadWriteByte(0xff);

if (sum & 0x800000)
        {
                sum += 0xFF000000;
        }
  return (int)sum;

就是通過DMA搬運到緩沖區(qū)的話,上述該怎么改寫呢?
因為24位分成3個部分通過DMA傳進緩沖數(shù)組的話,那不是一個數(shù)據(jù)分成3個部分了
我可以在 if (DMA_GetITStatus(DMAx_FLAG_TC) != RESET) 中將三個部分整合成一個數(shù)據(jù),
但是在讀取AD數(shù)據(jù)的時候,我是不是可以直接:
SPI2_ReadWriteByte(0xff) << 16;
SPI2_ReadWriteByte(0xff) << 8;
SPI2_ReadWriteByte(0xff);
去掉sum了
希望各位大佬能夠指點指點迷茫的我,謝謝!如思路有誤或者有更好的辦法請盡情Q我,不勝感激。。!


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:419968 發(fā)表于 2023-8-23 17:42 | 只看該作者
用聯(lián)合體
union Data
{
        unsigned int  sum;                       
        unsigned char byte[4];               
};
Data.byte[0]=SPI2_ReadWriteByte(0xff);
Data.byte[1]=SPI2_ReadWriteByte(0xff);
Data.byte[2]=SPI2_ReadWriteByte(0xff);
Data.sum 就是讀到的數(shù)了
回復

使用道具 舉報

板凳
ID:905498 發(fā)表于 2023-8-23 21:47 | 只看該作者
adject 發(fā)表于 2023-8-23 17:42
用聯(lián)合體
union Data
{

大佬,不是很能明白。
還想i向您請教一個問題,就是:

1、SPI全雙工的,當我用SPI2_ReadWriteByte發(fā)送命令驅(qū)動AD的時候,也會有相應(yīng)的返回數(shù)據(jù)通過DMA搬運進緩沖數(shù)組,那我在數(shù)據(jù)處理的時候該怎么舍棄這些沒用的數(shù)據(jù)啊
2、您給的這個例子中,聯(lián)合體該放在哪個位置呢?ad.h中嗎?
還有就是打括號中定義的 sum 并沒有調(diào)用,為什么Data.sum就是我所需要的一個24位數(shù)呢?
感覺和提問的最前邊的幾行代碼好像意義相通呢

恕小生愚鈍,還望指點一二,真的非常感謝!
回復

使用道具 舉報

地板
ID:744809 發(fā)表于 2023-8-24 20:28 | 只看該作者
小可愛u 發(fā)表于 2023-8-23 21:47
大佬,不是很能明白。
還想i向您請教一個問題,就是:

聯(lián)合體是共用內(nèi)存空間的,只要把數(shù)據(jù)放進byte數(shù)組中,就相當于放進sum了,但是我看你最高位還判斷了0x800000是不是1,如果是1還得加0xff00000,這部分就得另外實現(xiàn)了
回復

使用道具 舉報

5#
ID:905498 發(fā)表于 2023-8-28 08:57 | 只看該作者
123156fsadf 發(fā)表于 2023-8-24 20:28
聯(lián)合體是共用內(nèi)存空間的,只要把數(shù)據(jù)放進byte數(shù)組中,就相當于放進sum了,但是我看你最高位還判斷了0x800 ...

我前幾天看了一下用法,是的。理解了
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表