STM32的IIC端口配置開漏輸出,可以隨時讀取端口電平狀態

查了下數據手冊,裏面有這麼一句話:The input data register (GPIOx_IDR) captures the data present on the I/O pin at every AHB1 clock cycle.

在另外一個手冊裏,有這麼一句話:The written data on GPIOx_ODR can be read from GPIOx_IDR register that is updated
every AHB clock cycle

就是說,配置成輸出之後,照樣可以讀取端口的電平狀態,所以,IIC完全可以只配置成OD(開漏輸出)模式,然後直接讀取總線電平狀態以檢測忙閒。

爲什麼IIC一定要配置成開漏輸出模式呢,因爲如果不這麼配置,就沒法支持clock stretching ,SCL被從設備拉低後,主機可能無法知曉,還以爲可以正常傳輸數據,其實從設備處於非傳輸狀態,那麼就會出錯。

手冊裏也有這麼一句話:This pull-up resistor could be internal with a typical value of 40 kOhm and activated through GPIO port pull-up / pull-down register(GPIOx_PUPDR).就是內部上拉電阻的典型值,只有40K歐姆,所以必須要設置外部強上拉,不然速度是沒辦法提高的。

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