STM32硬件IIC之DMA傳輸數(shù)據(jù)
這里咱們說3個點
1.檢查IIC總線上是否有指定地址的器件
2.IIC讀取數(shù)據(jù)
3.IIC寫數(shù)據(jù)
下面來一個一個詳細(xì)說明
1.檢查IIC總線上是否有指定地址的器件
1.判斷是否總線忙,如果忙則等待2.產(chǎn)生起始位3.等待起始位產(chǎn)生完成4.發(fā)送器件地址(這里選擇讀寫都是可以的)5.等待是否有ACK位回應(yīng),(這里有兩種判斷方法1.通過判斷ACK標(biāo)志2.通過判斷ADDR標(biāo)志),最好使用ADDR標(biāo)志位6.清楚ADDR標(biāo)志位7.產(chǎn)生停止位8.通過判斷是否有ACK,就可以判斷是否有指定地址的器件123456789
2.IIC讀取數(shù)據(jù)
1.判斷是否總線忙,如果忙則等待2.產(chǎn)生起始位3.等待起始位產(chǎn)生完成4.發(fā)送器件地址,這里方向上選擇寫數(shù)據(jù)5.等待發(fā)送完成,通過判斷ADDR標(biāo)志位是否置位6.清除ADDR標(biāo)志位7.同時判斷TXE位,這個在發(fā)送數(shù)據(jù)完成之后,也會被置位8.發(fā)送要讀取內(nèi)存的地址9.等待TXE位置位10.再次發(fā)送起始位11.等待起始位產(chǎn)生完成12.發(fā)送器件地址,這里方向上選擇讀數(shù)據(jù)13.等待發(fā)送完成,通過判斷ADDR標(biāo)志位是否置位14.使能LAST位,使能這個,就能做到在傳輸最后一個數(shù)據(jù)的時候,自動產(chǎn)生NACK14.開始用DMA傳輸下面的數(shù)據(jù)12345678910111213141516
3.IIC寫數(shù)據(jù)
1.判斷是否總線忙,如果忙則等待2.產(chǎn)生起始位3.等待起始位產(chǎn)生完成4.發(fā)送器件地址,這里方向上選擇寫數(shù)據(jù)5.等待發(fā)送完成,通過判斷ADDR標(biāo)志位是否置位6.清除ADDR標(biāo)志位7.同時判斷TXE位,這個在發(fā)送數(shù)據(jù)完成之后,也會被置位8.發(fā)送要讀取內(nèi)存的地址9.等待TXE位置位10.開始用DMA傳輸下面的數(shù)據(jù)11.在DMA傳輸完成中斷中產(chǎn)生停止位