SPI的初始化比較簡單,但是能明白原理是最好的,畢竟出了問題以后好排除。
SPI的初始化過程:
1、初始化GPIO
2、初始化SPI_InitStructure結構體
3、使能SPI外設
SPI的初始化結構體如下圖所示:
typedef struct
{
uint16_t SPI_Direction;
uint16_t SPI_Mode;
uint16_t SPI_Daize;
uint16_t SPI_CPOL;
uint16_t SPI_A;
uint16_t SPI_NSS;
uint16_t SPI_BaudRatePrescaler;
uint16_t SPI_FirstBit;
uint16_t SPI_CRCPolynomial;
}SPI_InitTypeDef;
SPI_Direction為SPI的傳輸方向有如下選項:
#define SPI_Direction_2Lines_FullDuplex ((uint16_t)0x0000) //2線全雙工
#define SPI_Direction_2Lines_RxOnly ((uint16_t)0x0400) //2線只接收
#define SPI_Direction_1Line_Rx ((uint16_t)0x8000) //1線只接收
#define SPI_Direction_1Line_Tx ((uint16_t)0xC000) //1線只發(fā)送
#define IS_SPI_DIRECTION_MODE(MODE) (((MODE) == SPI_Direction_2Lines_FullDuplex) || \
((MODE) == SPI_Direction_2Lines_RxOnly) || \
((MODE) == SPI_Direction_1Line_Rx) || \
((MODE) == SPI_Direction_1Line_Tx))
SPI_Mode指定SPI的模式的可選擇參數(shù)如下:
SPI主機模式下,主機輸出SCK,從機時候接收SCK,當配置為主機模式接收數(shù)據(jù)的時候必須發(fā)送數(shù)據(jù)來啟動SCK
#define SPI_Mode_ter ((uint16_t)0x0104) //主機模式
#define SPI_Mode_Slave ((uint16_t)0x0000) //從機模式
#define IS_SPI_MODE(MODE) (((MODE) == SPI_Mode_ter) || \
((MODE) == SPI_Mode_Slave))
SPI_Daize為一幀數(shù)據(jù)的長度,可選參數(shù)為:
#define SPI_Daize_16b ((uint16_t)0x0800) //8位
#define SPI_Daize_8b ((uint16_t)0x0000) //16位
#define IS_SPI_DAIZE(DAIZE) (((DAIZE) == SPI_Daize_16b) || \
((DAIZE) == SPI_Daize_8b))
一般選擇為8位
SPI_CPOL和SPI_A是比較重要的參數(shù),他們決定了觸發(fā)信號和采樣信號的時刻,
SPI_CPOL=0,SCK空閑狀態(tài)為低電平
SPI_CPOL=1,SCK空閑狀態(tài)為高電平
SPI_A=0,表示在第一個邊沿跳變時采樣
SPI_A=1,表示在第二個邊沿跳變時采樣
當SPI_CPOL=0,SPI_A=0時,SCK空閑狀態(tài)為低電平,表示在第一個邊沿跳變時采樣,說明采樣狀態(tài)為上升沿采樣,下降沿觸發(fā),
當SPI_CPOL=1,SPI_A=0時,SCK空閑狀態(tài)為高電平,表示在第一個邊沿跳變時采樣,說明采樣狀態(tài)為下降沿采樣,上升沿觸發(fā)。
當SPI_CPOL=0,SPI_A=1時,SCK空閑狀態(tài)為高電平,表示在第二個邊沿跳變時采樣,說明采樣狀態(tài)為下降沿,上升沿觸發(fā)
當SPI_CPOL=1,SPI_A=1時,SCK空閑狀態(tài)為高電平,表示在第二個邊沿跳變時采樣,說明采樣狀態(tài)為上升沿降沿,下降沿觸發(fā)
特別提醒:這兩個位必須和外設支持的傳輸方式一致
SPI_CPOL的可選擇參數(shù)如下:
#define SPI_CPOL_Low ((uint16_t)0x0000)
#define SPI_CPOL_High ((uint16_t)0x0002)
#define IS_SPI_CPOL(CPOL) (((CPOL) == SPI_CPOL_Low) || \
((CPOL) == SPI_CPOL_High))
SPI_A的可選擇參數(shù)如下:
#define SPI_A_1Edge ((uint16_t)0x0000)
#define SPI_A_2Edge ((uint16_t)0x0001)
#define IS_SPI_A(A) (((A) == SPI_A_1Edge) || \
((A) == SPI_A_2Edge))
SPI_NSS為CS信號線,該位表示CS信號是由軟件模擬還是由硬件自動產(chǎn)生。官方推薦CS信號由軟件模擬,畢竟CS信號比較簡單。可選擇的參數(shù)如下:
#define SPI_NSS_Soft ((uint16_t)0x0200)
#define SPI_NSS_Hard ((uint16_t)0x0000)
#define IS_SPI_NSS(NSS) (((NSS) == SPI_NSS_Soft) || \
((NSS) == SPI_NSS_Hard))
/**
SPI_BaudRatePrescaler SPI的分頻系數(shù)設置,可選參數(shù)如下
#define SPI_BaudRatePrescaler_2 ((uint16_t)0x0000)
#define SPI_BaudRatePrescaler_4 ((uint16_t)0x0008)
#define SPI_BaudRatePrescaler_8 ((uint16_t)0x0010)
#define SPI_BaudRatePrescaler_16 ((uint16_t)0x0018)
#define SPI_BaudRatePrescaler_32 ((uint16_t)0x0020)
#define SPI_BaudRatePrescaler_64 ((uint16_t)0x0028)
#define SPI_BaudRatePrescaler_128 ((uint16_t)0x0030)
#define SPI_BaudRatePrescaler_256 ((uint16_t)0x0038)
#define IS_SPI_BAUDRATE_PRESCALER(PRESCALER) (((PRESCALER) == SPI_BaudRatePrescaler_2) || \
((PRESCALER) == SPI_BaudRatePrescaler_4) || \
((PRESCALER) == SPI_BaudRatePrescaler_8) || \
((PRESCALER) == SPI_BaudRatePrescaler_16) || \
((PRESCALER) == SPI_BaudRatePrescaler_32) || \
((PRESCALER) == SPI_BaudRatePrescaler_64) || \
((PRESCALER) == SPI_BaudRatePrescaler_128) || \
((PRESCALER) == SPI_BaudRatePrescaler_256))
具體SPI的時鐘可根據(jù)時鐘樹來設置。
SPI_FirstBit 表示先發(fā)送高位還是先發(fā)送低位
#define SPI_FirstBit_MSB ((uint16_t)0x0000)
#define SPI_FirstBit_LSB ((uint16_t)0x0080)
#define IS_SPI_FIRST_BIT(BIT) (((BIT) == SPI_FirstBit_MSB) || \
((BIT) == SPI_FirstBit_LSB))
SPI_CRCPolynomial 為CRC值計算的多項式,參數(shù)可設置為任意數(shù)字
下面為SPI的初始化實例:
void SPI2_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_APB2PerClockCmd( RCC_APB2Per_GPIOB, ENABLE );
RCC_APB1PerClockCmd( RCC_APB1Per_SPI2, ENABLE );
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_SetBits(GPIOB,GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15); //PB13/14/15é?à-
SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;
SPI_InitStructure.SPI_Mode = SPI_Mode_ter;
SPI_InitStructure.SPI_Daize = SPI_Daize_8b;
SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
SPI_InitStructure.SPI_A = SPI_A_2Edge;
SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256;
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPI_InitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI2, &SPI_InitStructure);
SPI_Cmd(SPI2, ENABLE);
SPI2_ReadWriteByte(0xff);
}
上一篇:STM32使用FATFSW讀寫SD出現(xiàn)錯誤2的原因
下一篇:STM32 ADC多通道DMA傳輸
推薦閱讀
史海拾趣
在電子行業(yè)中,F(xiàn)CI(First Components International)公司作為一家知名的連接器和互聯(lián)系統(tǒng)制造商,其發(fā)展歷程中確實有許多值得分享的故事。以下是關于FCI公司的五個發(fā)展故事:
- FCI的氣體流量計與傳感器技術突破
FCI作為一家全球性的氣體流量計、氣體和液體流量開關以及液位開關的制造商,其產(chǎn)品廣泛應用于各種工業(yè)領域。為了滿足不斷增長的市場需求,F(xiàn)CI投入大量研發(fā)資源,成功開發(fā)出高精度、高可靠性的氣體流量計和傳感器。這些產(chǎn)品在化工、能源、環(huán)保等多個領域得到了廣泛應用,為FCI贏得了良好的市場口碑。隨著技術的不斷創(chuàng)新和產(chǎn)品質(zhì)量的持續(xù)提升,F(xiàn)CI逐漸成為了行業(yè)內(nèi)的佼佼者。
- FCI中國分公司的成立與服務升級
隨著中國市場的快速發(fā)展,F(xiàn)CI看到了在中國市場發(fā)展的巨大潛力。為了更好地服務中國客戶,F(xiàn)CI決定在中國成立分公司。分公司的成立,不僅為FCI提供了更貼近本地市場的服務平臺,還為其在中國市場的業(yè)務拓展提供了有力支持。分公司雇傭了一批在過程儀表和測量控制方面經(jīng)驗豐富的員工,并新增了數(shù)條經(jīng)過認證的高精度流體標定臺,以提供專業(yè)的服務和技術支持。這一舉措顯著提升了FCI在中國市場的競爭力和品牌影響力。
- FCI的AirMax VS高速背板連接器技術革新
為了滿足未來高速數(shù)據(jù)傳輸?shù)男枨螅現(xiàn)CI投入巨資研發(fā)新一代的高速背板連接器技術。經(jīng)過多年的努力,F(xiàn)CI成功開發(fā)出了先進的AirMax VS高速背板連接器技術,為未來傳輸速率達到40Gb/s的設計奠定了基礎。這一技術的推出,不僅鞏固了FCI在連接器行業(yè)的領先地位,還為其在高速數(shù)據(jù)傳輸領域的發(fā)展打開了新的市場空間。
- FCI與航空領域的深度合作
隨著航空技術的不斷發(fā)展,對高精度傳感器和流量計的需求也日益增長。FCI憑借其在氣體流量計和傳感器方面的技術優(yōu)勢,成功打入了航空領域市場。公司與多家知名航空企業(yè)建立了深度合作關系,為其提供定制化的產(chǎn)品和解決方案。這些產(chǎn)品在航空器的燃油系統(tǒng)、液壓系統(tǒng)以及環(huán)境控制系統(tǒng)中發(fā)揮著重要作用,為航空安全提供了有力保障。
- FCI的全球化戰(zhàn)略布局
為了適應全球化的市場趨勢,F(xiàn)CI積極拓展其國際業(yè)務。公司通過并購、合資等方式,在全球范圍內(nèi)建立了多個生產(chǎn)基地和銷售網(wǎng)絡。這些舉措不僅提高了FCI的生產(chǎn)效率和響應速度,還使其能夠更好地服務全球客戶。同時,F(xiàn)CI也加大了對新興市場的投入,通過與當?shù)睾献骰锇榈木o密合作,成功打入了多個具有潛力的市場領域。
以上五個故事展示了FCI在電子行業(yè)發(fā)展中的關鍵里程碑和重大成就。從技術創(chuàng)新到市場拓展,再到全球化布局,F(xiàn)CI始終保持著敏銳的市場洞察力和強大的競爭力,不斷推動著電子行業(yè)的發(fā)展進步。
隨著全球對環(huán)境保護的日益重視,Herga公司積極響應綠色制造的號召,將環(huán)保理念融入產(chǎn)品設計和生產(chǎn)過程中。公司研發(fā)出了一系列節(jié)能高效的電子產(chǎn)品組件,如低能耗的驅動器、可回收材料的電機外殼等。這些產(chǎn)品不僅滿足了市場對高性能、高品質(zhì)的需求,還降低了生產(chǎn)過程中的碳排放和資源消耗。Herga公司的這一舉措贏得了社會各界的廣泛贊譽,也為其在電子行業(yè)中的可持續(xù)發(fā)展奠定了堅實基礎。
申風(everanalog)公司于2013年在上海成立,由一群充滿激情和夢想的電子工程師組成。創(chuàng)始人施嘉銘憑借其深厚的行業(yè)經(jīng)驗和前瞻性的視野,帶領團隊開始了集成電路設計的探索之旅。在初創(chuàng)階段,公司面臨著資金緊張、人才短缺等挑戰(zhàn),但團隊憑借著堅定的信念和不懈的努力,逐漸在市場上站穩(wěn)了腳跟。
在申風(everanalog)公司的發(fā)展過程中,知識產(chǎn)權保護和品牌建設一直是其重點關注的問題。公司注重技術研發(fā)和知識產(chǎn)權保護,已經(jīng)擁有多項專利和注冊商標。這些知識產(chǎn)權的保護不僅提升了公司的核心競爭力,也為公司的品牌建設提供了有力支持。同時,公司還積極參與行業(yè)展會和交流活動,提升品牌知名度和影響力。
Antelec公司創(chuàng)立于XXXX年,由一群富有遠見和熱情的電子工程師組成。創(chuàng)立初期,公司專注于研發(fā)先進的電子測量與分析技術,成功開發(fā)出一種具有高精度和穩(wěn)定性的測量儀器,填補了市場上的空白。這一技術突破不僅贏得了客戶的青睞,也為公司的后續(xù)發(fā)展奠定了堅實的基礎。
3D封裝的發(fā)展動態(tài)與前景 【來源:《電子與封裝》】【作者:翁壽松】 1 為何要開發(fā)3D封裝 迄今為止,在IC芯片領域,SoC(系統(tǒng)級芯片)是最高級的芯片;在IC封裝領域,SiP(系統(tǒng)級封裝)是最高級的封裝。 SiP涵蓋SoC,SoC簡化SiP。 ...… 查看全部問答∨ |
|
在模擬技術,如圖是曾經(jīng)有人跟帖說不明白如圖的電-光驅動電路。那些電阻,那些二極管為什么要加?如何加? 時間好長了,記得當時沒有明確的答案,我也答這不上。偶然碰到一個器件手冊內(nèi)的部分內(nèi)容,這就有了明確的答案了。前面部分我譯出來了, ...… 查看全部問答∨ |
|
呵呵,一點個人建議哦!現(xiàn)在學習單片機的人是越來越多,EEworld在這方面的推廣的功勞那也是非常多的!! 單片機的學習者一般都是從MC51的8位機學習起來的,但是隨著信息社會的發(fā)展。8位的單片機畢竟也有一定的局限性,所以16位的,32位的單片機也 ...… 查看全部問答∨ |
|
socket函數(shù)原型為:int socket(int domain, int type, int protocol);domain指明所使用的協(xié)議族,通常為PF_INET,表示互聯(lián)網(wǎng)協(xié)議族(TCP/IP協(xié)議族);type參數(shù)指定socket的類型:SOCK_STREAM 或SOCK_DGRAM,Socket接口還定義了原始Sock ...… 查看全部問答∨ |
1,插上USB線,OS會把SD卡在PC機上彈出;插上電源線,OS只會充電。請問OS如何區(qū)分的? 2,在PC機上卸載掉SD卡,OS能否收到通知?… 查看全部問答∨ |
我想要實現(xiàn)如下功能:要用stm32自帶的AD測量交流信號的一個周波32個點。思路是這樣子的:先用TIM4來檢測交流信號的過零點,我準備用TIM4的捕獲功能,當信號有上升沿時,捕獲,此時會進入中斷程序(在定時器配置的時候已經(jīng)開了捕獲中斷),在中 ...… 查看全部問答∨ |
設計資源 培訓 開發(fā)板 精華推薦
- 英飛凌微控制器:以全新實惠套件和強大開發(fā)環(huán)境為開發(fā)者提供支持
- iTOP-i.MX6開發(fā)板設備數(shù)驅動Menuconfig的用法
- 迅為IMX6ULL開發(fā)板Qt for Android搭建開發(fā)環(huán)境
- 迅為i.MX8M mini開發(fā)板Windots QT系統(tǒng)開發(fā)環(huán)境搭建
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)使用Gstarwmra(一)
- 迅為IMX8M mini開發(fā)板Linix系統(tǒng)修改默認屏幕
- iTOP-4412開發(fā)板支持4G以上文件系統(tǒng)擴展
- 迅為IMX8MM開發(fā)板Yocto系統(tǒng)設置開機自啟動
- 迅為IMX6Q開發(fā)板 Buildroot文件系統(tǒng)mqtt測試
- AI算力狂飆下的能源困局,ST如何突圍?
- 韓國研究人員開發(fā)出耐火電池電解質(zhì)以防止熱失控
- “史上最嚴電池安全令”或引發(fā)產(chǎn)業(yè)第四次大洗牌
- 現(xiàn)代汽車發(fā)布新一代混動系統(tǒng),燃油效率提升45%
- 三星顯示將全面采用雙棧串聯(lián)技術提升車載OLED性能
- 禾賽科技計劃2026年推L3級智駕專用激光雷達“千厘眼”
- 寧德時代發(fā)布驍遙雙核電池:跨體系技術革新,續(xù)航超1000km
- 寧德時代發(fā)布全球首款800km續(xù)航12C超充磷酸鐵鋰電池
- 華為發(fā)布全液冷超充技術,15分鐘充電90%革新重卡市場
- 車規(guī)級MCU介紹