娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年05月04日(星期日)

2018年05月04日 | STM32 spi與FPGA的通信

發布者:創意夢者 來源: eefocus關鍵字:STM32  spi  FPGA  通信 手機看文章 掃描二維碼
隨時隨地手機看文章

最近在研究SPI總線,至于協議和硬件描述就不多說了
四線包括時鐘、片選、接收、發送


初始化SP
  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //全雙工
  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                       //主模式
  SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;                  //16bit寬度
  SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;     //2--18MHz; 4--9MHz;  8--4.5MHz
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                    //高位在前
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPIx, &SPI_InitStructure);
  SPI_Cmd(SPIx, ENABLE);
  
SPI不能硬件控制CS,只能軟件來控,就是通過將NSS設為外部GPIO來控制。
像我所做的項目是使用STM32與FPGA通信,而FPGA的SPI工作在這種一直狀態
作為主設備的STM32,CS在傳輸數據的時候為低,傳輸完畢后必須拉高,這樣FPGA可以判斷出SPI的傳輸起止狀態。


FPGA的數據傳輸格式是16bit地址+16bit數據
對于讀16bit,實現如下


uint16_t spi_read(SPI_TypeDef* SPIx,uint32_t addr)
{  
  uint16_t value;
  uint16_t spi_nss;
  uint16_t add;
  uint32_t level;


  if(SPI1 == SPIx)
    spi_nss = SPI1_PIN_NSS;
  else if(SPI2 == SPIx)
    spi_nss = SPI2_PIN_NSS;


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  GPIO_ResetBits(GPIOA, spi_nss);  
  SPI_I2S_SendData(SPIx, addr); //0xf014 >> 2


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(SPIx, 0x0);


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
  SPI_I2S_ReceiveData(SPIx);


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  GPIO_SetBits(GPIOA, spi_nss);
     
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
  value = SPI_I2S_ReceiveData(SPIx);


  return value;
}
  
寫函數


void spi_write(SPI_TypeDef* SPIx,uint32_t addr, uint16_t value)
{


  uint16_t spi_nss;


  uint32_t level;


  if(SPI1 == SPIx)
    spi_nss = SPI1_PIN_NSS;
  else if(SPI2 == SPIx)
    spi_nss = SPI2_PIN_NSS;



  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  GPIO_ResetBits(GPIOA, spi_nss);  
  SPI_I2S_SendData(SPIx, addr); 


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(SPIx, value); 


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
  SPI_I2S_ReceiveData(SPIx);


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  GPIO_SetBits(GPIOA, spi_nss);


  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET);
  SPI_I2S_ReceiveData(SPIx);


}  
拿write函數舉例
只所以這么設計是因為
如果是函數一開始就將NSS腳拉低,然后再去send,如下
  GPIO_ResetBits(GPIOA, spi_nss);  
  while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET);
  SPI_I2S_SendData(SPIx, addr); 
  
這樣在CS拉低一段時間后(時間大概有16個時鐘周期),才有CLK,這樣延時就會降低SPI的傳輸效率  
之前那種方式會在CS拉底后很快就有clk時鐘出來


之所以寫兩次再讀兩次而不是讀一次寫一次也是考慮到效率的問題


如果先寫一次再讀一次,看波形每個數據之間有比較大的空隙是沒有clk的,就是說在傳輸完一個數據后再
傳第二個會要等一段時間,這個對速度要求比較高的設備是不允許的


還有值得注意的是:
如果SPI是主模式,那么GPIO設置為
NSS是GPIO_Mode_Out_PP
CLK是GPIO_Mode_AF_PP
MOSI是GPIO_Mode_AF_PP
MISO是GPIO_Mode_IN_FLOATING


如果SPI是從模式,那么GPIO設置為
NSS是GPIO_Mode_Out_PP
CLK是GPIO_Mode_IN_FLOATING
MOSI是GPIO_Mode_IN_FLOATING
MISO是GPIO_Mode_AF_PP

關鍵字:STM32  spi  FPGA  通信 引用地址:STM32 spi與FPGA的通信

上一篇:STM32的定時器和ADC
下一篇:STM32 ADC 采樣 頻率的確定

推薦閱讀

在UEFI引導支持的情況下,在Windows 10 Mobile手機上安裝微軟最新Windows 10系統的主要障礙是對安全啟動環境的要求。Ben一直致力于編寫最低限度的必需驅動程序集以使UEFI啟動并運行。此前他表示,他通過UEFI開源安裝TianoCore,然后將其與stock UEFI和Windows啟動管理器連接起來,實現了這一目標。據悉,黑客開發者Ben | imbushuo通過編寫所需最低限...
今天,各行各業都在進行數字化轉型,包括醫療、教育等很多傳統企業和機構。而在數字化轉型的賽道上,誰能超前一步呢?青云QingCloud CEO黃允松說,“數字化轉型就是以數字化的方式重構這個世界上的一切。”數字化轉型的本質是將無數由實物、人、傳感器、管理節點構成的路網,和無數的管理規則全部以數字化的形式再造,醫療行業亦是如此。醫院數字化轉型如...
隨著魅族17系列發布會的臨近,魅族官方也開始逐漸對新機進行預熱,這讓廣大網友產生了興趣,畢竟此前有人將魅族17稱為“最美安卓旗艦”。前幾天,魅族17的正面和背面設計一經亮相,正面白色面板的“獨一無二”使其在各大智能手機中擁有了極高的辨識度,那么它的屏幕素質怎么樣呢?5月3日,魅族科技官方微博對魅族17系列的屏幕進行了預熱,從始至終的好屏幕...
4月29日晚間,東旭光電(000413.SZ)發布2020年年度報告,該公司年內營業收入為70.49億元,同比下降59.79%。歸屬于上市公司股東的凈虧損為34.03億元,同比擴大123.37%。歸屬于上市公司股東的扣除非經常性損益的凈虧損為29.62億元,同比擴大60.84%。基本每股收益-0.59元。對于業績變動的原因,東旭光電指出,報告期,公司因債務違約、流動性困難造成的負面影...

史海拾趣

問答坊 | AI 解惑

Google將推Google Chrome網絡瀏覽器

Google將在美國時間周二推出Google Chrome網絡瀏覽器,旨在挑戰微軟的IE瀏覽器。該瀏覽器Google Chrome的官方網站gears.google.com/chrome/也已啟動。谷歌沒有對此馬上作出回應。據了解,Google Chrome瀏覽器通過強化地址欄功能和其它元素,使得瀏 ...…

查看全部問答∨

運放和比較起的根本區別(二)

就算放大器和比較器如出一轍,簡單的講,比較器就是運放的開環應用,但比較器的設計 是針對電壓門限比較而用的,要求的比較門限精確,比較后的輸出邊沿上升或下降時間 要短,輸出符合TTL/CMOS 電平/或OC 等,不要求中間環節的準確度,同時驅動能 ...…

查看全部問答∨

求助(在線等答案)

小弟想請高手推薦幾款triple SPDT模擬開關,Ron和ΔR要小點的,小弟正在使用ADG1433,由于1433受到加電順序的影響,所以需要更換。 請大家幫忙啊…

查看全部問答∨

CPLD 的上電順序是怎么樣的?

問一下帶CPLD 的ARM 上電順序是如何的? 是不是:    CPU的第一條指令->設置mmu地址->CPLD->cpu…

查看全部問答∨

請教下載chain.lst后,出現的問題

.................... [BCSP] HCI_OpenConnection - Started CLK:66562500, BaudRate:9600, UBRDIV:432, UDIVSLOTn:5 CLK:66562500, BaudRate:115200, UBRDIV:35, UDIVSLOTn:1 [BCSP] BCSPLinkEstablishmentThread started... DeviceFolder::L ...…

查看全部問答∨

大師,高人:關于ZigBee芯片CC2430外接天線的問題

麻煩問一下~ 如果我用cc2430芯片開發,涉及到天線的部分是不是需要高頻設計? 有沒有現成的天線不需要我高頻設計的?…

查看全部問答∨

兩個C8051f04x芯片的串口uart的通訊問題,請高手幫忙,我沒啥分,只能感謝你了。。

這是我畢業設計的一部分,目前只是要求能有單片機a向b發送一個字節即可,剩下的就能整明白了,但是我的單片機b怎么也收不到信息呀。發送端只是發送一個字節,接受端節收到這個字節后將把字節顯示在LCD1602上,程序源代碼如下:(我現在不明白為什么 ...…

查看全部問答∨

求助向中文CE5.0的中文目錄中添加文件的問題

我想在ce5.0的windows\\programs目錄下添加一個快捷方式文件, 但是我的是中文系統,所以"windows\\programs"變成了"windows\\程序目錄"了,我在platform.dat中指定目錄為Directory("windows\\programs")或者Directory("windows\\程 ...…

查看全部問答∨

用51做如下功能么?

只需要用小鍵盤輸入0000~9999任意數字,然后中間用.隔開,然后保存好,保存大概最大要50個左右,顯示用LED,輸入好后可以用USB跟電腦傳輸數據....可行么? 如果我需要把保存的數字用TXT文件保存是否是需要用到什么樣的嵌入系統?這樣的話需要用到什么芯片 ...…

查看全部問答∨

***uC/OS-II中實現多個生產者和多個消費者問題****

利用uC/OS-II內核中的信號量操作,生產者和消費者的數目都是3,緩沖區的大小10。 如何利用uC/OS-II中的信號量來實現呢?想了很久不知道怎么實現任務間的同步和互斥,望大蝦指教,給個偽代碼看看也好。…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 永寿县| 莒南县| 甘泉县| 大名县| 安岳县| 商南县| 涞源县| 杭锦后旗| 上高县| 建始县| 玛曲县| 永修县| 鄄城县| 安仁县| 龙山县| 仪陇县| 仁怀市| 福鼎市| 图木舒克市| 鄂托克旗| 阳东县| 巴里| 长白| 确山县| 隆德县| 星子县| 若尔盖县| 宽甸| 梅河口市| 阳江市| 中卫市| 辛集市| 慈溪市| 咸宁市| 台江县| 达孜县| 恭城| 潜山县| 仙桃市| 潮安县| 安化县|