對于STM32芯片,其GPIO輸出可以根據不同的應用需求而靈活選擇不同檔次的輸出速率。一般分為低、中、高或者很高幾個檔次,具體速率視不同的STM32芯片而定。
不妨以STM32F407為例,它分四個輸出檔次,具體的數值范圍參考芯片數據手冊的I/O的交流特性部分。 這個輸出速率主要體現I/O驅動電路的輸出反應能力,通過選擇不同的輸出驅動速率,實現最佳的噪聲與和功耗控制。不難理解,選擇輸出驅動速率越高,噪聲也越大,相應的芯片功耗也會越大。所以對于這個輸出頻率的選擇,不要太隨意,合適就好。在滿足應用的需求的前提下,就不要隨意往高端速率選擇。
這里說幾個簡單的應用案例,以加深印象和理解。
某客戶使用STM32F4芯片做產品開發,其中用到 while( count++ > 0xffffff) 做軟件delay,然后讓LED閃爍。相關代碼甚為簡單,卻發現產品的一致性不好,LED 閃爍有的快有的慢。 反復排查代碼原因,未發現程序邏輯錯誤。后來嘗試將LED 驅動腳的Output Speed設置從very high調整為 low 后一切正常。
2、Audio 噪聲 某客戶使用STM32芯片做產品開發。其中有I2S的音頻播放功能。客戶在調試時用到Printf串口打印,發現使用printf輸出時會出現噪音,如果關閉printf則正常。 后來,反復查看代碼,直到將UART的TX輸出端口的管腳輸出速率由very high改為Low后噪聲消失。
3、SPI通信異常 有人使用STM32芯片開發產品,其中用到SPI通信。STM32做主,其它外圍器件做從,有時發現SPI讀取數據總是出錯。 對于這里的通信出錯,如果SPI通信端口腳的輸出速率選擇跟實際通信速率不合適的話也會出現。相比實際速率需求,過高或過低了都會導致通信出錯。
好,拋磚引玉似地羅列上面幾個案例。這里順便聊下跟GPIO輸出速率有關的I/O補償單元。
目前STM32家族的9大系列里面,其中高性能的STM32F2/STM32F4/STM32F7系列的芯片,都帶有GPIO補償單元。 該補償單元的功能就是對GPIO的輸出擺率進行合理控制以降低I/O噪聲和功耗。當你在產品開發中需要配置50M或更高的輸出速率時,強烈建議開啟該補償單元。
總之,對于STM32 GPIO輸出速率的選擇問題,我們在開發應用中應多加注意。如果因為這個輸出速率選擇導致麻煩,原因往往比較隱晦,很難直接從代碼語句或程序邏輯上找到突破。在滿足實際應用需求的前提下,速率就低不就高,這對降低功耗、減少噪聲、改善EMI都有好處。當然,如果選擇過低于實際需求的輸出速率也不可取,那樣會導致輸出失真、通信異常等問題,自然也違背了ST設計多檔位輸出速率的初衷。
文章來源:微信公眾號 融創芯城(一站式電子元器件、PCB、PCBA購買服務平臺,電子項目眾包平臺)
|