STM32寄存器列表 I2C相關寄存器

I2C_CR1(控制寄存器1)

15位:SWRST軟件復位,當被置位時,I2C處於復位狀態,在復位該位前確信I2C的引腳被釋放,總線是空的,定義:0(I2C模塊不處於復位狀態),1(I2C模塊處於復位狀態)

     注:該位可以用於BUSY位爲’1’,在總線上又沒有檢測到停止條件時。

13位:ALERT-SMBus提醒,軟件可以設置或清除該位;當PE=0時,由硬件清除。定義:

     0(釋放SMBAlert引腳使其變高。提醒響應地址頭緊跟在NACK信號後面),1(驅動SMBAlert引腳使其變低。提醒響應地址頭緊跟在ACK信號後面)

12位:PEC數據包出錯檢測,軟件可以設置或清除該位;當傳送PEC後,或起始或停止條件時,或當PE=0時硬件將其清除。定義:

     0(無PEC傳輸)1(PEC傳輸(在發送或接收模式)。注:仲裁丟失時,PEC的計算失效。

11位:POS應答/PEC位置(用於數據接收),軟件可以設置或清除該位,或當PE=0時,由硬件清除.定義:

     0:ACK位控制當前移位寄存器內正在接收的字節的(N)ACK。 PEC位表明當前移位寄存器內的字節是PEC;

     1: ACK位控制在移位寄存器裏接收的下一個字節的(N)ACK。PEC位表明在移位寄存器裏接收的下一個字節是PEC。

     注:POS位只能用在2字節的接收配置中,必須在接收數據之前配置。爲了NACK第2個字節,必須在清除ADDR爲之後清除ACK位。

         爲了檢測第2個字節的PEC,必須在配置了POS位之後,拉伸ADDR事件時設置PEC位。

10位:ACK應答使能,軟件可以設置或清除該位,或當PE=0時,由硬件清除。定義:0(無應答返回),1(在接收到一個字節後返回一個應答(匹配的地址或數據)

9位:STOP停止條件產生,軟件可以設置或清除該位;或當檢測到停止條件時,由硬件清除;當檢測到超時錯誤時,硬件將其置位,

    在主模式下定義:0(不產生停止條件),1(在當前字節傳輸或在當前起始條件發出後產生停止條件)

    在從模式下定義:0(不產生停止條件),1(在當前字節傳輸或釋放SCL和SDA線)

    注:當設置了STOP、START或PEC位,在硬件清除這個位之前,軟件不要執行任何對I2C_CR1的寫操作;否則有可能會第2次設置STOP、START或PEC位。

8位:START起始條件產生,軟件可以設置或清除該位,或當起始條件發出後或PE=0時,由硬件清除。

    在主模式下:0(無起始條件產生),1(重複產生起始條件)在從模式下:0(無起始條件產生),1(當總線空閒時,產生起始條件)

7位:NOSTRETCH禁止時鐘延長(從模式),該位用於當ADDR或BTF標誌被置位,在從模式下禁止時鐘延長,直到它被軟件復位。定義:0(允許時鐘延長),1(禁止時鐘延長)

6位:ENGC廣播呼叫使能,定義:0(禁止廣播呼叫。以非應答響應地址00h),1(允許廣播呼叫. 以應答響應地址00h)

5位:ENPEC-PEC使能,定義:0(禁止PEC計算),1(開啓PEC計算)

4位:ENARP-ARP使能,定義:0(禁止ARP),1(使能ARP),如果SMBTYPE=0,使用SMBus設備的默認地址。如果SMBTYPE=1,使用SMBus的主地址。

3位:SMBTYPE-SMBus類型,定義:0(SMBus設備),1(SMBus主機)

1位:SMBUS-SMBus模式,定義:0(I2C模式),1(SMBus模式)

0位:PE-I2C模塊使能,定義:0(禁用I2C模塊),1(啓用I2C模塊:根據SMBus位的設置,相應的I/O口需配置爲複用功能)

    注:如果清除該位時通訊正在進行,在當前通訊結束後,I2C模塊被禁用並返回空閒狀態。由於在通訊結束後發生PE=0,所有的位被清除。

        在主模式下,通訊結束之前,絕不能清除該位。

 

 

I2C_CR2(控制寄存器2)

12位:LAST-DMA最後一次傳輸,定義:0(下一次DMA的EOT不是最後的傳輸),1(下一次DMA的EOT是最後的傳輸),注:該位在主接收模式使用,

     使得在最後一次接收數據時可以產生一個NACK。

11位:DMAEN-DMA請求使能,定義:0(禁止DMA請求),1(當TxE=1或RxNE =1時,允許DMA請求)

10位:ITBUFEN緩衝器中斷使能,定義:0(當TxE=1或RxNE=1時,不產生任何中斷),1(當TxE=1或RxNE=1時,產生事件中斷(不管DMAEN是何種狀態)

9位:ITEVTEN事件中斷使能,定義:0(禁止事件中斷),1(允許事件中斷),在下列條件下,將產生該中斷– SB = 1 (主模式);– ADDR = 1 (主/從模式);

    –ADD10=1(主模式);–STOPF=1(從模式);–BTF=1,但是沒有TxE或RxNE事件;– 如果ITBUFEN = 1,TxE事件爲1;– 如果ITBUFEN = 1,RxNE事件爲1。

8位:ITERREN出錯中斷使能,定義:0(禁止出錯中斷),1(允許出錯中斷)在下列條件下,將產生該中斷:BERR=1;ARLO=1;AF=1;OVR=1;PECERR=1;TIMEOUT=1;SMBAlert=1

5-0位:FREQ[5:0]I2C模塊時鐘頻率,必須設置正確的輸入時鐘頻率以產生正確的時序,允許的範圍在2~36MHz之間,定義:000000(禁用)000001(禁用)

      000010(2M),000011(3M),100100(36MHz),大於100100(禁用)

 

 

I2C_OAR1(自身地址寄存器1)

15位:ADDMODE尋址模式(從模式),定義:0(7位從地址(不響應10位地址),1(10位從地址(不響應7位地址)

14位:必須始終由軟件保持爲’1’。

9-8位:ADD[9:8]接口地址,7位地址模式時不用關心,10位地址模式時爲地址的9~8位。

7-1位:ADD[7:1]接口地址,地址的7~1位

0位:ADD0接口地址,7位地址模式時不用關心。10位地址模式時爲地址第0位。

 

 

自身地址寄存器2(I2C_OAR2)

7-1位:ADD2[7:1]接口地址,在雙地址模式下地址的7~1位

0位:ENDUAL雙地址模式使能位,定義:0(在7位地址模式下,只有OAR1被識別),1(在7位地址模式下,OAR1和OAR2都被識別)

 

 

I2C_DR(數據寄存器)

7-0位:DR[7:0]8位數據寄存器,用於存放接收到的數據或放置用於發送到總線的數據。發送器模式:當寫一個字節至DR寄存器時,自動啓動數據傳輸。一旦傳輸開始(TxE=1),

      如果能及時把下一個需傳輸的數據寫入DR寄存器,I2C模塊將保持連續的數據流。

      接收器模式:接收到的字節被拷貝到DR寄存器(RxNE=1)。在接收到下一個字節(RxNE=1)之前讀出數據寄存器,即可實現連續的數據傳送。

      注:在從模式下,地址不會被拷貝進數據寄存器DR;注:硬件不管理寫衝突(如果TxE=0,仍能寫入數據寄存器);

      注:如果在處理ACK脈衝時發生ARLO事件,接收到的字節不會被拷貝到數據寄存器裏,因此不能讀到它。

 

 

I2C_SR1(狀態寄存器1)

15位:SMBALERT-SMBus提醒,在SMBus主機模式下:0(無SMBus提醒)1(在引腳上產生SMBAlert提醒事件)在SMBus從機模式下:0(沒有SMBAlert響應地址頭序列)

     1(收到SMBAlert響應地址頭序列至SMBAlert變低)該位由軟件寫’0’清除,或在PE=0時由硬件清除。

14位:TIMEOUT超時或Tlow錯誤,定義:0(無超時錯誤),1(SCL處於低已達到25ms(超時);或者主機低電平累積時鐘擴展時間超過10ms(Tlow:mext);或從設備

     低電平累積時鐘擴展時間超過25ms(Tlow:sext))– 當在從模式下設置該位:從設備復位通訊,硬件釋放總線。

     – 當在主模式下設置該位:硬件發出停止條件。– 該位由軟件寫’0’清除,或在PE=0時由硬件清除。

12位:PECERR在接收時發生PEC錯誤,定義:0(無PEC錯誤:接收到PEC後接收器返回ACK(如果ACK=1),1(有PEC錯誤:接收到PEC後接收器返回NACK(不管ACK是什麼值)

     – 該位由軟件寫’0’清除,或在PE=0時由硬件清除。

11位:OVR過載/欠載,定義:0(無過載/欠載),1(出現過載/欠載)– 當NOSTRETCH=1時,在從模式下該位被硬件置位,同時:

     – 在接收模式中當收到一個新的字節時(包括ACK應答脈衝),數據寄存器裏的內容還未被讀出,則新接收的字節將丟失。

     – 在發送模式中當要發送一個新的字節時,卻沒有新的數據寫入數據寄存器,同樣的字節將被髮送兩次。– 該位由軟件寫’0’清除,或在PE=0時由硬件清除

     注:如果數據寄存器的寫操作發生時間非常接近SCL的上升沿,發送的數據是不確定的,併發生保持時間錯誤

10位:AF應答失敗,定義:0(沒有應答失敗),1(應答失敗)– 當沒有返回應答時,硬件將置該位爲’1’。– 該位由軟件寫’0’清除,或在PE=0時由硬件清除。

9位:ARLO仲裁丟失(主模式),定義:0(沒有檢測到仲裁丟失),1(檢測到仲裁丟失)當接口失去對總線的控制給另一個主機時,硬件將將置該位爲’1’。

    – 該位由軟件寫’0’清除,或在PE=0時由硬件清除。在ARLO事件之後,I2C接口自動切換回從模式(M/SL=0)。

    注:在SMBUS模式下,在從模式下對數據的仲裁僅僅發生在數據階段,或應答傳輸區間(不包括地址的應答)。

8位:BERR總線出錯,定義:0(無起始或停止條件出錯),1(起始或停止條件出錯)– 當接口檢測到錯誤的起始或停止條件,硬件將該位置’1’。

    – 該位由軟件寫’0’清除,或在PE=0時由硬件清除。

7位:TxE數據寄存器爲空(發送時),定義:0(數據寄存器非空),1(數據寄存器空)-在發送數據時,數據寄存器爲空時該位被置’1’,在發送地址階段不設置該位。

    – 軟件寫數據到DR寄存器可清除該位;或在發生一個起始或停止條件後,或當PE=0時由硬件自動清除.如果收到一個NACK,或下一個要發送的字節是PEC(PEC=1),

       該位不被置位。注:在寫入第1個要發送的數據後,或設置了BTF時寫入數據,都不能清除TxE位,這是因爲數據寄存器仍然爲空。

6位:RxNE數據寄存器非空(接收時),定義:0(數據寄存器爲空),1(數據寄存器非空),– 在接收時,當數據寄存器不爲空,該位被置’1’。

    在接收地址階段,該位不被置位。– 軟件對數據寄存器的讀寫操作清除該位,或當PE=0時由硬件清除。在發生ARLO事件時,RxNE不被置位。

    注:當設置了BTF時,讀取數據不能清除RxNE位,因爲數據寄存器仍然爲滿。

4位:STOPF停止條件檢測位(從模式),定義:0(沒有檢測到停止條件),1(檢測到停止條件)– 在一個應答之後(如果ACK=1),當從設備在總線上檢測到停止條件時,

    硬件將該位置’1’。– 軟件讀取SR1寄存器後,對CR1寄存器的寫操作將清除該位,或當PE=0時,硬件清除該位。注:在收到NACK後,STOPF位不被置位。

3位:ADD10-10位頭序列已發送(主模式),定義:0(沒有ADD10事件發生),1(主設備已經將第一個地址字節發送出去)– 在10位地址模式下,當主設備

    已經將第一個字節發送出去時,硬件將該位置’1’。– 軟件讀取SR1寄存器後,對CR1寄存器的寫操作將清除該位,或當PE=0時,硬件清除該位。

    注:收到一個NACK後,ADD10位不被置位。

2位:BTF字節發送結束,定義:0(字節發送未完成),1(字節發送結束)當NOSTRETCH=0時,在下列情況下硬件將該位置’1’:

    –在接收時,當收到一個新字節(包括ACK脈衝)且數據寄存器還未被讀取(RxNE=1)。在發送時,當一個新數據將被髮送且數據寄存器還未被寫入新的數據(TxE=1)。

    – 在軟件讀取SR1寄存器後,對數據寄存器的讀或寫操作將清除該位;或在傳輸中發送一個起始或停止條件後,或當PE=0時,由硬件清除該位。

    注:在收到一個NACK後,BTF位不會被置位。如果下一個要傳輸的字節是PEC(I2C_SR2寄存器中TRA爲1,同時I2C_CR1寄存器中PEC爲’1’),BTF位不會被置位。

1位:ADDR地址已被髮送(主模式)/地址匹配(從模式),在軟件讀取SR1寄存器後,對SR2寄存器的讀操作將清除該位,或當PE=0時,由硬件清除該位。

    地址匹配(從模式)0:地址不匹配或沒有收到地址;1:收到的地址匹配。– 當收到的從地址與OAR寄存器中的內容相匹配、或發生廣播呼叫、或SMBus設備

    默認地址或SMBus主機識別出SMBus提醒時,硬件就將該位置’1’(當對應的設置被使能時)。

    地址已被髮送(主模式)0:地址發送沒有結束;1:地址發送結束。– 10位地址模式時,當收到地址的第二個字節的ACK後該位被置’1’。

    – 7位地址模式時,當收到地址的ACK後該位被置’1’。注:在收到NACK後,ADDR位不會被置位。

0位:SB起始位(主模式),定義:0(未發送起始條件)1(起始條件已發送)– 當發送出起始條件時該位被置’1’。

    – 軟件讀取SR1寄存器後,寫數據寄存器的操作將清除該位,或當PE=0時,硬件清除該位。

 

 

I2C_SR2 (狀態寄存器2)

15-8位:PEC[7:0]數據包出錯檢測,當ENPEC=1時,PEC[7:0]存放內部的PEC的值

7位:DUALF雙標誌(從模式),定義:0(接收到的地址與OAR1內的內容相匹配)1(接收到的地址與OAR2內的內容相匹配)

    – 在產生一個停止條件或一個重複的起始條件時,或PE=0時,硬件將該位清除。

6位:SMBHOST-SMBus主機頭系列(從模式),定義:0(未收到SMBus主機的地址),1(當SMBTYPE=1且ENARP=1時,收到SMBus主機地址)

    – 在產生一個停止條件或一個重複的起始條件時,或PE=0時,硬件將該位清除。

5位:SMBDEFAULT-SMBus設備默認地址(從模式),定義:0(未收到SMBus設備的默認地址)1(當ENARP=1時,收到SMBus設備的默認地址)

    – 在產生一個停止條件或一個重複的起始條件時,或PE=0時,硬件將該位清除。

4位:GENCALL廣播呼叫地址(從模式),定義:0(未收到廣播呼叫地址)1(當ENGC=1時,收到廣播呼叫的地址)

    – 在產生一個停止條件或一個重複的起始條件時,或PE=0時,硬件將該位清除。

2位:TRA發送/接收,定義:0(接收到數據)1(數據已發送)在整個地址傳輸階段的結尾,該位根據地址字節的R/W位來設定。

    在檢測到停止條件(STOPF=1)、重複的起始條件或總線仲裁丟失(ARLO=1)後,或當PE=0時,硬件將其清除。

1位:BUSY總線忙,定義:0(在總線上無數據通訊)1(在總線上正在進行數據通訊)– 在檢測到SDA或SCl爲低電平時,硬件將該位置’1’;

    – 當檢測到一個停止條件時,硬件將該位清除。該位指示當前正在進行的總線通訊,當接口被禁用(PE=0)時該信息仍然被更新。

0位:MSL主從模式,定義:0(從模式)1(主模式)– 當接口處於主模式(SB=1)時,硬件將該位置位;

    – 當總線上檢測到一個停止條件、仲裁丟失(ARLO=1時)、或當PE=0時,硬件清除該位。

 

 

I2C_CCR(時鐘控制寄存器)

15位:F/S-I2C主模式選項,定義:0(標準模式的I2C)1(快速模式的I2C)

14位:DUTY快速模式時的佔空比,定義:0(快速模式下:Tlow/Thigh = 2)1(快速模式下:Tlow/Thigh = 16/9(見CCR)

11-0位:CCR[11:0]快速/標準模式下的時鐘控制分頻係數(主模式)該分頻係數用於設置主模式下的SCL時鐘。

       在I2C標準模式或SMBus模式下: Thigh = CCR ×TPCLK1;Tlow = CCR ×TPCLK1;

       在I2C快速模式下:如果DUTY = 0:Thigh = CCR ×TPCLK1;Tlow = 2 × CCR × TPCLK1

       如果DUTY = 1: (速度達到400kHz);Thigh = 9 × CCR ×TPCLK1;Tlow = 16 × CCR ×TPCLK1

 

 

I2C_TRISE(TRISE寄存器)

5-0位:TRISE[5:0]在快速/標準模式下的最大上升時間(主模式),這些位必須設置爲I2C總線規範裏給出的最大的SCL上升時間,增長步幅爲1。

      注:只有當I2C被禁用(PE=0)時,才能設置TRISE[5:0]。見P514頁


發佈了3 篇原創文章 · 獲贊 31 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章