久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
STM32 SPI讀寫函數
[打印本頁]
作者:
51heisex
時間:
2016-1-23 00:12
標題:
STM32 SPI讀寫函數
//SPIx 讀寫一個字節
//TxData:要寫入的字節
//返回值:讀取到的字節
u8 SPIx_ReadWriteByte(u8 TxData)
{
while((SPI1->SR&(1<<1))==0);
SPI1->DR=TxData; //發送一個byte
while((SPI1->SR&(1<<0))==0);
returnSPI1->DR; //返回收到的數據
}
對于這樣的讀寫函數曾有這樣的疑惑,讀就是讀寫就寫為什么要放一起呢。這樣是不是很麻煩,查詢相關資料有如下解答。
a)寫一個字節:
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) ==RESET);
//確保發生前Buffer為空,也就是說上一次已經發生完成
SPI_I2S_SendData(SPI1,Data);
//往寄存器中寫入一個字節
while (SPI_I2S_GetFlagStatus(SPI1,SPI_I2S_FLAG_RXNE) == RESET);
//等待接受到一個字節數據,
為什么要這么做?加這一句的原因是
為了確保這個字節已經發送出去
,
因為發生和接受是并行同步進行,那就是說你發生出去一個字節意味著你收到一個字節。所以這樣判斷完全沒有問題,再說必要性,如果你不加這句你就會容易犯過早拉高CS信號的錯誤(相當于檢測到收到數據,那么說明數據一定發完了),你想想如果在SPI_I2S_SendData(SPI1,Data)后面立即拉高CS是什么后果。SPI_I2S_ReceiveData(SPI1);//都會接收到的數據,看起來沒什么必要,但以用stm32的經驗推薦這樣做,也許會有意想不到的收獲。
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)讀一個字節:讀的時候要注意一個問題,因為從模式是沒法提供時鐘的,所以主模式下必須要在接收的同時提供時鐘。辦法就是發送一個字節來實現,因為還是上面說的,發送一個字節就意味著收到一個字節,代碼和寫完全一樣,只要把讀出來的字節保存即可。u8SPI_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); returnSPI_I2S_ReceiveData(SPI1); }
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
黄色片网站在线观看
|
91一区
|
97色伦网
|
亚洲一二三区不卡
|
亚洲v日韩v综合v精品v
|
成人av免费
|
在线高清免费观看视频
|
国产精品一区久久久
|
久久久久久久久久久爱
|
国产视频三区
|
国产精品综合视频
|
国产成人精品网站
|
欧美一级免费
|
天天成人综合网
|
欧美日韩一区二区三区四区五区
|
91麻豆精品国产91久久久更新资源速度超快
|
做a视频在线观看
|
美国黄色毛片
|
亚洲国产精品一区二区久久
|
久久国产综合
|
久久99精品久久久久久噜噜
|
91在线视频网址
|
美女福利网站
|
日韩中文在线
|
成人在线免费av
|
亚洲免费在线观看
|
中文字幕一区在线观看视频
|
久久99精品久久久久久琪琪
|
亚洲精品一区二区另类图片
|
国产91丝袜在线播放
|
久久精品99久久
|
国产日韩精品视频
|
cao视频
|
久久久男人的天堂
|
午夜精品久久久久久久久久久久
|
日韩一区中文字幕
|
www.日韩
|
精品国产亚洲一区二区三区大结局
|
国产真实乱对白精彩久久小说
|
黄色免费在线观看
|
天堂一区二区三区四区
|