




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、STM32 I2C 難點(diǎn)2012-11-05 15:595359人閱讀評(píng)論(1)收藏舉報(bào)I2C 總線在所有嵌入式系統(tǒng)中用得極廣, 是一個(gè)工業(yè)級(jí)別的總線, 但由于STM32 是一個(gè)32位的MCU, 注定了他的I2C硬件接口將會(huì)功能強(qiáng)大, 但同時(shí)也會(huì)較難于控制,不象8位機(jī),如AVR8位機(jī)的TWI(實(shí)際完全符合 I2C標(biāo)準(zhǔn)) 那么易用. 以下是我的STM32 I2C硬件接口編程的一些心得體會(huì). 如果你選擇了STM32, 說(shuō)明了你的項(xiàng)目的需求是比較復(fù)雜的,使用EMBEDDED OS 和大量地運(yùn)用中斷+DMA的編程模型是必然的選擇, 如果你的項(xiàng)目中用STM32,而你用模擬的I2C的話, 說(shuō)明了兩點(diǎn): 一
2、是浪費(fèi)了STM32; 二, 如果你的項(xiàng)目很復(fù)雜的話,你會(huì)發(fā)現(xiàn)在項(xiàng)目的開(kāi)發(fā)后期,好象STM32也比8位機(jī)快不了多少, WHY! ,但這不是STM32的問(wèn)題,而是你沒(méi)有最有效地利用上STM32. 很多朋友在搞STM32的I2C接口編程時(shí)總是時(shí)不時(shí)“當(dāng)在某處”(GOOGLE時(shí)你會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題很普遍), 一些朋友這時(shí)就會(huì)用軟件來(lái)模擬I2C,然后,很快發(fā)現(xiàn)和I2C設(shè)備能很好地通信了(但當(dāng)機(jī)還是可能隨機(jī)出現(xiàn)), 這些朋友于是大罵STM32的I2C硬件接口是個(gè)”杯具”(呵呵,我有時(shí)也會(huì)突然想罵罵,但我知道,99.999%的原因還是自已對(duì)于STM32硬件接口的熟悉程度不夠,或者說(shuō),是我沒(méi)有揚(yáng)STM32 I2C
3、的長(zhǎng),而總是捉住他的短不發(fā)。)。 固然,STM32 I2C硬件接口有設(shè)計(jì)不完善的地方,例如下面就是我從STM32最新的Errata sheet中總結(jié)出的,關(guān)于STM32 I2C接口設(shè)計(jì)上的一些缺陷和如何避開(kāi)這些缺陷的推薦程序模型:(1)把I2C的中斷優(yōu)先級(jí)提升到最高(2)把發(fā)送多于2個(gè)字節(jié)的發(fā)送與接收封裝成利用DMA收發(fā)的函數(shù),而把對(duì)某I2C設(shè)備接收和發(fā)送一個(gè)字節(jié)的函數(shù)單獨(dú)封裝為一個(gè)POLLING (輪詢)函數(shù)。(3)在尋址某一I2C DEVICE時(shí)要先CHECK I2C BUS 是否BUSY,如果忙,則等待指定時(shí)間,如果還是忙就說(shuō)明I2C BUS 掛了(原因99.9%是由于我們的I2C通信時(shí)
4、序并不十分尊守I2C規(guī)約,或者我們所封裝的I2C通信模塊沒(méi)有加上防守代碼(出錯(cuò)恢復(fù)代碼),這時(shí)要調(diào)用一個(gè)專門(mén)的用于通知 I2C BUS上的所有device,讓他們結(jié)束當(dāng)前內(nèi)部的工作,重新準(zhǔn)備好(下雨了,收衣服啦)。如下面的我的I2C模塊的FUN 切片:該函數(shù)一定要用在主MCU的啟動(dòng)模塊上,因?yàn)镮2C總線在充當(dāng)Master的MCU啟動(dòng)時(shí),SDA和SCL有可能組合出剛好符合I2C規(guī)約的時(shí)序組合,比如一個(gè)開(kāi)始位(START CONDITION),使得I2C BUS 立即當(dāng)在那里(因?yàn)楫?dāng)主MCU真正需要發(fā)出一個(gè)START CONDITION時(shí),發(fā)現(xiàn)I2C BUS 正處于BUS狀態(tài),而根據(jù)STM32 手
5、冊(cè)的START CONDITION說(shuō)明可知,一個(gè)起始條件將會(huì)使得I2C BUS處于BUSY 狀態(tài), 下面的I2C2_Free_Buf fun 的基本用法:(注: I2C2_Free_Bus Fun 應(yīng)放在線程中,而不是放在上圖中的位置,這樣會(huì)觸發(fā)并進(jìn)入一個(gè)硬件錯(cuò)誤處理向量中斷中)提示:摘自STM32 手冊(cè): I2C.SR1.Bit 0 位(SB)- Start bit(Master mode) - Set when a Start condition generated. - Cleared by software by reading the SR1 register followed by
6、 writing the DR register, or by hardware when PE=0.(4) 不要讓I2C工作在88KHz的頻率上,低于或者使用Fast-mode(400KHz)頻率,這是STM32 I2C真正的一個(gè)硬件BUG(99.999%機(jī)率),但是也是可以編程避免的。(5)Programming the bit NOSTRETCH=0 in the I2C_CR1 register. 這樣也可避免一個(gè)STM32 I2C硬件設(shè)計(jì)的一個(gè)小BUG(2。9。5節(jié))(6)大部分的MCU的硬件I2C接口的工作模式是中斷(高端的會(huì)用DMA)+狀態(tài)機(jī);因此狀態(tài)機(jī)的編程概念要熟悉(7)ST
7、M32 I2C的硬件接口負(fù)責(zé)實(shí)現(xiàn)滿足I2C總線的的規(guī)約,而我們(嵌入式編程開(kāi)發(fā)者)則是通過(guò)I2C 控制寄存器和I2C的事件標(biāo)志組合來(lái)啟動(dòng)狀態(tài)機(jī),然后讓狀態(tài)機(jī)按照由I2C SR1 和SR2所組合志來(lái)的事件自動(dòng)工作,并在發(fā)送或接收完成后通過(guò)FLAG的方式或信號(hào)量的方式通知我們所寫(xiě)的讀寫(xiě)函數(shù),操作已經(jīng)完成,或者在操作中出現(xiàn)了錯(cuò)誤,如最常見(jiàn)的AF錯(cuò)誤(device 在第9位上沒(méi)有拉低SDA應(yīng)答Master。)(8)I2C SR1 和SR2的功能分配(這是一個(gè)極易忽視的思考死角) 從STM32 手冊(cè)的I2C register map 中可以看到, I2C的SR1,主要是反映I2C通信的最基本的標(biāo)志,要清除SR1的某個(gè)標(biāo)志可以直接清除,而I2C的SR2即是輔助SR1的,他一般反映了I2C總一當(dāng)前的工作狀態(tài),如BUSY,是主機(jī)模式還是從機(jī)模式,等
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 藥學(xué)職業(yè)生涯的提升策略試題及答案
- 藥物代謝動(dòng)力學(xué)考試試題及答案
- 績(jī)效考核指標(biāo)設(shè)置試題及答案
- 藥學(xué)專業(yè)考試題及答案
- 營(yíng)地禮儀考試題目及答案
- 教師資格筆試學(xué)習(xí)心態(tài)試題及答案
- 激光技術(shù)工程師考試深度復(fù)習(xí)試題及答案
- 建立有效學(xué)習(xí)方法網(wǎng)絡(luò)規(guī)劃設(shè)計(jì)師考試試題及答案
- 藥物創(chuàng)制相關(guān)考試試題及答案
- 系統(tǒng)架構(gòu)設(shè)計(jì)師考試考察要點(diǎn)試題及答案
- 社會(huì)工作概論 個(gè)案工作方法
- 酒精戒斷患者的護(hù)理查房課件
- 人工智能導(dǎo)論-課件 第1章 人工智能的前世今生
- 2024年中國(guó)人壽招聘筆試參考題庫(kù)含答案解析
- 票據(jù)業(yè)務(wù)承諾函
- 瀝青混凝土配合比報(bào)告
- 普通話-朗讀教學(xué)ppt
- 歐盟食品添加劑編碼系統(tǒng)
- 《愛(ài)我中華》教學(xué)設(shè)計(jì)(江蘇省市級(jí)優(yōu)課)-八年級(jí)音樂(lè)教案
- 勞動(dòng)爭(zhēng)議調(diào)解仲裁法專題講座
- 第4課第1課時(shí)導(dǎo)學(xué)案 初中日語(yǔ)人教版第二冊(cè)
評(píng)論
0/150
提交評(píng)論