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