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