1. 程式人生 > >STM32硬體IIC之DMA傳輸資料

STM32硬體IIC之DMA傳輸資料

這裡給出一個實現用DMA傳輸IIC資料的實現過程

這裡咱們說3個點
1.檢查IIC總線上是否有指定地址的器件
2.IIC讀取資料
3.IIC寫資料
下面來一個一個詳細說明

1.檢查IIC總線上是否有指定地址的器件

1.判斷是否匯流排忙,如果忙則等待
2.產生起始位
3.等待起始位產生完成
4.傳送器件地址(這裡選擇讀寫都是可以的)
5.等待是否有ACK位迴應,(這裡有兩種判斷方法1.通過判斷ACK標誌2.通過判斷ADDR標誌),最好使用ADDR標誌位
6.清楚ADDR標誌位
7.產生停止位
8.通過判斷是否有ACK,就可以判斷是否有指定地址的器件

2.IIC讀取資料

1.判斷是否匯流排忙,如果忙則等待
2.產生起始位
3.等待起始位產生完成
4.傳送器件地址,這裡方向上選擇寫資料
5.等待發送完成,通過判斷ADDR標誌位是否置位
6.清除ADDR標誌位
7.同時判斷TXE位,這個在傳送資料完成之後,也會被置位
8.傳送要讀取記憶體的地址
9.等待TXE位置位
10.再次傳送起始位
11.等待起始位產生完成
12.傳送器件地址,這裡方向上選擇讀資料
13.等待發送完成,通過判斷ADDR標誌位是否置位
14.使能LAST位,使能這個,就能做到在傳輸最後一個數據的時候,自動產生NACK
14.開始用DMA傳輸下面的資料

3.IIC寫資料

1.判斷是否匯流排忙,如果忙則等待
2.產生起始位
3.等待起始位產生完成
4.傳送器件地址,這裡方向上選擇寫資料
5.等待發送完成,通過判斷ADDR標誌位是否置位
6.清除ADDR標誌位
7.同時判斷TXE位,這個在傳送資料完成之後,也會被置位
8.傳送要讀取記憶體的地址
9.等待TXE位置位
10.開始用DMA傳輸下面的資料
11.在DMA傳輸完成中斷中產生停止位