在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

        STM32SPI讀寫函數(shù)

        作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏

        //SPIx讀寫一個(gè)字節(jié)

        本文引用地址:http://www.biyoush.com/article/201611/317124.htm

        //TxData:要寫入的字節(jié)

        //返回值:讀取到的字節(jié)

        u8 SPIx_ReadWriteByte(u8 TxData)

        {

        while((SPI1->SR&(1<<1))==0);

        SPI1->DR=TxData; //發(fā)送一個(gè)byte

        while((SPI1->SR&(1<<0))==0);

        returnSPI1->DR; //返回收到的數(shù)據(jù)

        }

        對(duì)于這樣的讀寫函數(shù)曾有這樣的疑惑,讀就是讀寫就寫為什么要放一起呢。這樣是不是很麻煩,查詢相關(guān)資料有如下解答。

        a)寫一個(gè)字節(jié):

        ?while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

        //確保發(fā)生前Buffer為空,也就是說(shuō)上一次已經(jīng)發(fā)生完成

        ?SPI_I2S_SendData(SPI1, Data);

        //?往寄存器中寫入一個(gè)字節(jié)

        ?while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

        //等待接受到一個(gè)字節(jié)數(shù)據(jù),

        為什么要這么做?加這一句的原因是為了確保這個(gè)字節(jié)已經(jīng)發(fā)送出去,因?yàn)榘l(fā)生和接受是并行同步進(jìn)行,那就是說(shuō)你發(fā)生出去一個(gè)字節(jié)意味著你收到一個(gè)字節(jié)。所以這樣判斷完全沒(méi)有問(wèn)題,再說(shuō)必要性,如果你不加這句你就會(huì)容易犯過(guò)早拉高CS信號(hào)的錯(cuò)誤(相當(dāng)于檢測(cè)到收到數(shù)據(jù),那么說(shuō)明數(shù)據(jù)一定發(fā)完了),你想想如果在SPI_I2S_SendData(SPI1, Data)后面立即拉高CS是什么后果。SPI_I2S_ReceiveData(SPI1); //都會(huì)接收到的數(shù)據(jù),看起來(lái)沒(méi)什么必要,但以用stm32的經(jīng)驗(yàn)推薦這樣做,也許會(huì)有意想不到的收獲。

        ?SPI_Writebyte(u8data)

        ?{

        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);

        SPI_I2S_SendData(SPI1, Data);

        ?while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);

        ?SPI_I2S_ReceiveData(SPI1);

        }

        b)?讀一個(gè)字節(jié):讀的時(shí)候要注意一個(gè)問(wèn)題,因?yàn)閺哪J绞菦](méi)法提供時(shí)鐘的,所以主模式下必須要在接收的同時(shí)提供時(shí)鐘。辦法就是發(fā)送一個(gè)字節(jié)來(lái)實(shí)現(xiàn),因?yàn)檫€是上面說(shuō)的,發(fā)送一個(gè)字節(jié)就意味著收到一個(gè)字節(jié),代碼和寫完全一樣,只要把讀出來(lái)的字節(jié)保存即可。u8 SPI_Readbyte(u8data){while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);SPI_I2S_SendData(SPI1, Data);while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);return SPI_I2S_ReceiveData(SPI1);}



        關(guān)鍵詞: STM32SPI讀寫函

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉