STM32作為主設備,Arduino作為從設備進行IIC通訊的注意要點


  近日公司的項目重心要往米思齊的Arduino圖形化編程上轉移了,需要我將STM32和Arduino的IIC通訊調通。之前Arduino並沒怎么使用過,僅僅是將超聲波的代碼移植成TOF激光測距而已。網上並沒見到STM32與Arduino的IIC通訊實例,唯一的線索是APM中有這部分代碼,因為APM的超聲波模塊與飛控之間是有一個Arduino芯片進行信息交互的,而飛控與Arduino的通訊方式就是IIC。

  在直接使用之前MPU6050的IIC協議與Arduino進行通訊無反應之后,懶得去查看APM源碼找其IIC驅動,所以直接上邏輯分析儀分析波形,把飛控讀取Arduino的超聲波數據的波形采集進行分析。

  

  上圖即APM飛控作為IIC主設備讀取一次Arduino數據的過程。一開始我極為迷惑的是,Arduino作為從設備代碼中設置的從設備地址是0x70,為什么到這里讀取的指令變成了0xE1?調試到最后恍然大悟:地址是7位的數據,最后一位是用來標志讀寫指令的。0x70的二進制編碼是 0111 0000,實際IIC主設備的會將地址放在高位,即將其左移一位變成 1110 0000,然后最后一位置1的話就是讀取0x70地址的命令,置0的話是寫0x70的命令。

  根據波形來看,發送讀取命令之后並不需要發送讀取的地址,這一點和MPU6050是不同的,因為MPU6050緊接着需要發送讀取的地址,從這里看來每個不同的設備都有不同的IIC協議的規則,需要具體查閱手冊。后面的寫命令比較疑惑,不知道是出於什么目的需要將0x51寫入Arduino。

  上圖為我使用STM32與Arduino進行IIC采集到的波形。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM