這里就STM32用戶咨詢到的幾個(gè)問題,稍加整理分享出來供君參考。
第1問:我目前使用STM32G0B1,代碼里有設(shè)計(jì)BOOT代碼,想在跳轉(zhuǎn)前清理各類使用過的外設(shè)寄存器。請(qǐng)問STM32有沒有復(fù)位所有外設(shè)寄存器的函數(shù)?
答:其實(shí),每個(gè)STM32系列都有相關(guān)寄存器和應(yīng)用函數(shù)用來針對(duì)指定外設(shè)或掛在指定總線上的外設(shè)進(jìn)行批量復(fù)位,即令其回歸到初始復(fù)位狀態(tài)。以STM32G0系列為例,在STM32HAL庫里就有類似下面的各種實(shí)現(xiàn)函數(shù)。
關(guān)于這個(gè)話題可以參考本公眾號(hào)另外一篇文章《話說STM32外設(shè)復(fù)位》,那里有更多詳細(xì)解讀,此處就不再贅述。
第2問:我在使用STM32F730的時(shí)候,如果SRAM設(shè)置到0x20010000 - 0x2001FFFF之間,DMA傳輸流程都對(duì),但是SPI輸出的數(shù)據(jù)不對(duì),這是怎么回事?另外,在用USB的bulk傳輸?shù)臅r(shí)候也是,數(shù)據(jù)有時(shí)是對(duì)的,有時(shí)候錯(cuò)的。
如果SRAM的緩沖區(qū)設(shè)置到0x20000000-0x2000FFFF之間的時(shí)候,就一切正常。請(qǐng)問這是什么原因?
答:現(xiàn)在問題是,只要代碼使用的RAM內(nèi)存鎖定在0x20000000-0x2000FFFF之間時(shí)功能都正常,只有使用到0x20010000之后的RAM才有異常。結(jié)合他使用的芯片STM32F730,基于ARM Cortex-M7內(nèi)核的,芯片里有高速L1 Cache。同時(shí),他的代碼里還用到了DMA。這樣看來,如果他的代碼啟用了D-Cache,用到2個(gè)主設(shè)備【CPU和DMA】,如果沒有針對(duì)D-Cache的使用做合理的配置,就很可能發(fā)生數(shù)據(jù)一致性方面的問題。經(jīng)用戶的進(jìn)一步反饋,他的代碼里也的確使用了D-Cache。
進(jìn)一步的問題就是,為什么這里不能使用0x20010000之后的區(qū)域呢?為探究竟,我們有必要看看STM32F730相關(guān)的參考手冊(cè)。
經(jīng)查證,0x20000000-0x2000FFFF區(qū)間是屬于DTCM區(qū),CPU訪問它時(shí)不使用D-Cache,即CPU每次訪問DTCM時(shí)都是直接訪問,當(dāng)然DMA是不能使用D-Cache的。這時(shí)自然不會(huì)產(chǎn)生數(shù)據(jù)訪問的一致性問題。而0x20010000~0x2001FFFF區(qū)域是經(jīng)AXI接口訪問的,默認(rèn)情況下,CPU訪問這塊區(qū)域是可以使用D-Cache的【前提是使能了D-Cache】。
也就是說當(dāng)我們使用到0x20010000之后的RAM區(qū)域時(shí),CPU訪問這塊可以啟用D-Cache。如果DMA也訪問這塊,若不對(duì)該區(qū)域做合理存儲(chǔ)屬性配置或適當(dāng)操作就可能發(fā)生數(shù)據(jù)一致性問題。此時(shí)我們可以對(duì)相應(yīng)RAM區(qū)域做MPU配置,將其配置為Shareable 且NonCacheable屬性。或在代碼里適時(shí)地使用針對(duì)Cache的清除或無效操作。關(guān)于MPU如何配置,這里不做展開,有興趣的可以進(jìn)一步了解。本公眾號(hào)里也有多篇相關(guān)文章可供參考閱讀。
第3問:在使用STM32 TIMER事件作為觸發(fā)輸出時(shí),那個(gè)RESET信號(hào)是怎么回事?跟定時(shí)器從模式的RESET 模式有什么關(guān)系?
答:這里的RESET事件特指通過軟件方式對(duì)TIMx_EGR寄存器的UG進(jìn)行置1操作。該操作可以產(chǎn)生1個(gè)觸發(fā)信號(hào)給到其它外設(shè),比方ADC,DAC或其它TIMER。同時(shí)這個(gè)RESET操作對(duì)當(dāng)前定時(shí)器會(huì)產(chǎn)生更新效果或復(fù)位效果,具體點(diǎn)說就是產(chǎn)生更新事件,當(dāng)前計(jì)數(shù)器發(fā)生重裝從新開始計(jì)數(shù)。
該RESET操作跟定時(shí)器RESET從模式有關(guān)系嗎?沒有任何關(guān)系,但有相同的現(xiàn)象或效果。即處于RESET從模式的TIMER收到觸發(fā)信號(hào)時(shí),該從定時(shí)器也會(huì)產(chǎn)生更新事件、計(jì)數(shù)器進(jìn)行重裝計(jì)數(shù)。至于給到處于RESET從模式的TIMER的觸發(fā)信號(hào),可以是源于前級(jí)TIMER的更新事件、計(jì)數(shù)器使能事件、比較事件產(chǎn)生的,也可以是軟件RESET操作產(chǎn)生的。
第4問:在使用STM32 ADC多通道轉(zhuǎn)換時(shí),如果不希望一次性轉(zhuǎn)換完成如何操作?
答: 看情況。如果你選擇使用的多個(gè)ADC通道,平常轉(zhuǎn)換順序固定,只是不希望基于掃描模式啟動(dòng)后就一次性轉(zhuǎn)換完畢,而是分次分批轉(zhuǎn)換完成。這時(shí)我們可以考慮使用ADC的分組轉(zhuǎn)換模式。可以參考本公眾號(hào)文章《STM32 ADC間斷轉(zhuǎn)換模式應(yīng)用示例》。
如果你選擇使用的多個(gè)ADC通道,使用過程中轉(zhuǎn)換順序隨機(jī),只是想每次就某個(gè)通道做轉(zhuǎn)換,不同時(shí)刻可能使用不同的通道。本質(zhì)上講,這其實(shí)就是單通道轉(zhuǎn)換,在配置時(shí)按單通道配置。需要使用哪個(gè)通道時(shí),就針對(duì)某個(gè)通道配置后再做啟動(dòng)。這點(diǎn)可以參考本公眾號(hào)文章《ADC多通道隨機(jī)選擇性轉(zhuǎn)換應(yīng)用示例》。
第5問:在使用STM32片內(nèi)的Vrefint電壓是ADC的參考基準(zhǔn)嗎?它有什么用?
答:STM32片內(nèi)的Vrefint電壓不是ADC模塊的參考基準(zhǔn),STM32片內(nèi)ADC的參考基準(zhǔn)可以是Vref,或VDDA【多數(shù)時(shí)候VDDA跟VDD是接在一起的】,有些系列還可以是VrefBuf電壓。注意不要把Vref、Vrefint、VrefBuf搞混了!事實(shí)上經(jīng)常有人弄混。【早期推出的系列STM32片內(nèi)沒有VrefBuf】
Vrefint電壓值一般固定在1.2v左右,波動(dòng)很小。各STM32芯片數(shù)據(jù)手冊(cè)有給出參數(shù)范圍【下圖來自STM32G0系列數(shù)據(jù)手冊(cè)】:
至于它有什么用,這要看情況。它只是個(gè)備用項(xiàng)、可用項(xiàng)。
我經(jīng)常拿它來驗(yàn)證ADC功能是否正常,因?yàn)槠潆妷嚎芍冶容^穩(wěn)定,無須外邊引線。有些場(chǎng)合,Vrefint作為相對(duì)穩(wěn)定的AD輸入,反過來監(jiān)測(cè)芯片的VDD,此時(shí)ADC模塊的參考電壓VDDA跟VDD是接在一起。有時(shí)Vrefint或其分壓可用作片內(nèi)比較器的輸入做其它用途。
審核編輯:湯梓紅
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124563 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217137 -
adc
+關(guān)注
關(guān)注
99文章
6709瀏覽量
549274 -
STM32
+關(guān)注
關(guān)注
2293文章
11032瀏覽量
365108 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4381瀏覽量
64918
原文標(biāo)題:STM32應(yīng)用五問五答
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32硬件設(shè)計(jì)問答
【高手問答】第5期——STM32硬件問答?
高手問答匯往期回顧
【高手問答】第9期——張工帶你玩轉(zhuǎn)STM32問答
3G相關(guān)問答錦
分享3個(gè)和PCB設(shè)計(jì)相關(guān)的疑難問答
NVIDIA 知乎精彩問答甄選 | 查看 NVIDIA Omniverse 相關(guān)精彩問答

NVIDIA 知乎精彩問答甄選 | 發(fā)掘 NVIDIA 醫(yī)療行業(yè)相關(guān)精彩問答

NVIDIA 知乎精彩問答甄選 | 查看 NVIDIA Jetson 相關(guān)精彩問答
NVIDIA 知乎精彩問答甄選 | 了解更多關(guān)于 NVIDIA BlueField DPU 相關(guān)精彩問答
NVIDIA 知乎精彩問答甄選 | 分享 NVIDIA 助力醫(yī)學(xué)研究的相關(guān)精彩問答

NVIDIA 知乎精彩問答甄選 | 查看關(guān)于 NVIDIA Omniverse 的相關(guān)精彩問答

NVIDIA 知乎精彩問答甄選 | 探索 AI 如何推動(dòng)工作流升級(jí)相關(guān)精彩問答

評(píng)論