現(xiàn)在有STM32用戶(hù)使用STM32G474R芯片開(kāi)發(fā)產(chǎn)品,其中用到TIM1做電源驅(qū)動(dòng),TIM1工作在中心對(duì)齊計(jì)數(shù)模式?,F(xiàn)在有個(gè)應(yīng)用需求,就是希望在TIM1每個(gè)周期的下圖箭頭所指時(shí)刻觸發(fā)外部ADC器件的采樣,等ADC完成轉(zhuǎn)換后并通過(guò)SPI接口將結(jié)果取回來(lái)。但有個(gè)要求,從觸發(fā)時(shí)刻【下圖中的A點(diǎn)】開(kāi)始到把ADC結(jié)果取回來(lái)這個(gè)過(guò)程不能有CPU的參與。
該用戶(hù)覺(jué)得原理上可行,但經(jīng)一番折騰感覺(jué)相應(yīng)硬件時(shí)序的實(shí)現(xiàn)和DMA傳輸都遇到了些障礙。就像拼魔方一樣,規(guī)則和需求雖然很清晰,基本動(dòng)作也簡(jiǎn)單,但真要轉(zhuǎn)成功不太容易。
我們來(lái)進(jìn)一步看看他目前所用ADC器件跟STM32G4在硬件時(shí)序上有哪些關(guān)聯(lián)與要求。下圖黃色欄里記錄的是外部ADC器件用到的幾個(gè)信號(hào),綠色欄記錄的是它跟STM32G4芯片相連的信號(hào)或管腳。圖中紅色信號(hào)代表從ADC器件給到STM32的,藍(lán)色信號(hào)就是STM32芯片給到ADC器件的。
目前大致時(shí)序要求是,在TIM1每個(gè)計(jì)數(shù)周期的A點(diǎn),STM32首先產(chǎn)生兩個(gè)ADC啟動(dòng)信號(hào),即上圖中的兩個(gè)下沿窄脈沖。等ADC轉(zhuǎn)換完成后根據(jù)ADC器件的BUSY信號(hào)的下沿到來(lái),啟動(dòng)STM32的SPI接收多個(gè)數(shù)據(jù),顯然這里需要DMA出場(chǎng)。
現(xiàn)在的問(wèn)題就是,如何將A點(diǎn)跟ADC啟動(dòng)信號(hào)同步關(guān)聯(lián)起來(lái)?如何實(shí)現(xiàn)那兩個(gè)啟動(dòng)脈沖?然后,ADC轉(zhuǎn)換完成信號(hào)出現(xiàn)后又如何跟STM32這邊的SPI接收關(guān)聯(lián)起來(lái)?記住,這整個(gè)過(guò)程不讓CPU插手。
我這里提供一個(gè)方案供參考。因?yàn)橄旅娴尿?yàn)證測(cè)試僅僅基于STM32G4芯片本身,并沒(méi)有連接上相應(yīng)的ADC器件。所以,下面測(cè)試驗(yàn)證過(guò)程中,我通過(guò)STM32G4芯片模擬產(chǎn)生ADC器件的Busy信號(hào)。另外用到SPI1和SPI2,SPI1作為STM32G4端的主SPI,負(fù)責(zé)從外部ADC器件讀回結(jié)果。SPI2模擬ADC器件那邊的從SPI設(shè)備,負(fù)責(zé)發(fā)送結(jié)果到STM32G4芯片。
我讓TIM2跟TIM1同步啟動(dòng),并設(shè)置相同的計(jì)數(shù)周期。TIM2計(jì)數(shù)到對(duì)應(yīng)于TIM1的A點(diǎn)時(shí)產(chǎn)生OC1事件去同步啟動(dòng)TIM3和TIM4,TIM3基于兩個(gè)通道輸出兩路ADC啟動(dòng)脈沖后停下來(lái),TIM4用來(lái)模擬產(chǎn)生ADC器件的BUSY信號(hào)。BUSY信號(hào)接到STM32G474RE芯片的PC2腳,基于PC2腳下沿觸發(fā)的外部中斷事件再作為STM32G474SPI1的DMA發(fā)送的同步信號(hào)。
我將上面描述的內(nèi)容用下圖示意出來(lái),即從A點(diǎn)開(kāi)始到產(chǎn)生Busy信號(hào)的各種信號(hào)前后關(guān)系時(shí)序圖,這樣便于觀察和理解。具體參數(shù)可以根據(jù)實(shí)際情況適當(dāng)調(diào)整。
要產(chǎn)生這個(gè)時(shí)序關(guān)系,所需核心知識(shí)點(diǎn)就是TIMER的主從觸發(fā)與同步以及TIMER不同輸出比較模式的特性,并加以活用。
解決了前面幾個(gè)信號(hào)間的時(shí)序關(guān)系,還不能萬(wàn)事大吉。我們還需要對(duì)DMA以及DMAMUX的有關(guān)原理和SPI應(yīng)用相關(guān)知識(shí)點(diǎn)有著清晰地把握,才能解決眼前的問(wèn)題。
下面我會(huì)把全部配置及用戶(hù)代碼都貼出來(lái)供參考,這里就沒(méi)法逐字逐句解說(shuō)了。
原理弄清晰后,我們就可以使用STM32開(kāi)發(fā)神器-STM32CubeMx圖形化工具進(jìn)行初始化配置。順便說(shuō)明下,這里提到的方案不是一成不變的,能達(dá)到目的即可。尤其有關(guān)TIMER的具體實(shí)現(xiàn)方式往往靈活多樣。
一、有關(guān)TIM1的配置。它其實(shí)不是這里的重點(diǎn),這里主要是基于它再構(gòu)造一個(gè)跟它同步啟動(dòng)的輔助定時(shí)器2。TIM1的主要任務(wù)是做它該做的驅(qū)動(dòng)就好。
二、定時(shí)器2的配置。它被TIM1同步觸發(fā)啟動(dòng)。計(jì)數(shù)周期跟TIM1一樣,并在特定計(jì)數(shù)點(diǎn)【前面提到的對(duì)應(yīng)于A點(diǎn)的位置】產(chǎn)生OC1比較事件。
三、定時(shí)器3的配置,它被TIM2觸發(fā)啟動(dòng),工作在單脈沖模式。計(jì)數(shù)周期根據(jù)自身信號(hào)特征和時(shí)序要求來(lái)擬定。使用通道1和通道2來(lái)產(chǎn)生兩路相同的ADC啟動(dòng)信號(hào)。
四、定時(shí)器4的配置,也是被TIM2觸發(fā)啟動(dòng),工作在單脈沖模式。計(jì)數(shù)周期根據(jù)自身信號(hào)特征和時(shí)序要求來(lái)擬定。這里使用其通道1模擬產(chǎn)生ADC器件的BUSY信號(hào)。
五、SPI的配置。SPI1作為主設(shè)備,負(fù)責(zé)從ADC器件讀取結(jié)果到RAM。SPI2模擬ADC器件的從設(shè)備,負(fù)責(zé)發(fā)送ADC結(jié)果給主設(shè)備。我這里啟用了SPI1收、發(fā)的DMA傳輸,并且DMA發(fā)送使用EXTI2事件做同步。另外我也啟用了SPI2的DMA發(fā)送功能。這里重點(diǎn)關(guān)注下SPI1發(fā)送功能的DMA配置。
需要重點(diǎn)關(guān)注的基本配置就是上面這些,其它有關(guān)時(shí)鐘、EXTI2配置就不貼圖了。創(chuàng)建工程后,添加用戶(hù)代碼。這里需添加的用戶(hù)代碼比較簡(jiǎn)單。見(jiàn)下圖,清一色的啟動(dòng)代碼,寥寥幾行。
因?yàn)檫@里只需接收數(shù)據(jù),MOSI腳釋放出來(lái)無(wú)妨,所以才有了上面截圖的第一行,不做重點(diǎn)關(guān)注。下圖是我驗(yàn)證測(cè)試過(guò)程中的實(shí)際波形圖:
上圖中的黃色波形是TIM1的輸出波形。兩路綠色波形是STM32G4給到ADC器件的啟動(dòng)信號(hào)。紫色波形是STM32G4模擬產(chǎn)生的BUSY信號(hào)。
我們不妨看看基于上面配置及代碼的驗(yàn)證結(jié)果。每次讀取4個(gè)數(shù)據(jù)回來(lái)。下面兩圖是基于兩次不同的模擬測(cè)試結(jié)果截圖。TxData是從SPI2發(fā)過(guò)來(lái)的數(shù)據(jù),RxData是主SPI1收到的數(shù)據(jù)。
好,今天的話(huà)題就分享到這里,希望能帶給大家一些參考和啟示。上面內(nèi)容涉及的東西較多,應(yīng)該說(shuō)有較強(qiáng)的綜合性,應(yīng)用上也不失靈活。如果有啥相關(guān)問(wèn)題,我們可以討論交流~!
審核編輯:劉清
-
RAM
+關(guān)注
關(guān)注
8文章
1392瀏覽量
117587 -
SPI接口
+關(guān)注
關(guān)注
0文章
264瀏覽量
35535 -
電源驅(qū)動(dòng)
+關(guān)注
關(guān)注
1文章
41瀏覽量
14763 -
ADC采樣
+關(guān)注
關(guān)注
0文章
134瀏覽量
13202 -
STM32芯片
+關(guān)注
關(guān)注
0文章
38瀏覽量
4624
原文標(biāo)題:基于STM32G4芯片TIM+SPI+DMA應(yīng)用示例
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話(huà)MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32G4定時(shí)器TIM輸入捕獲頻率測(cè)量
請(qǐng)問(wèn)一下STM32G4定時(shí)器TIM輸入捕獲頻率測(cè)量的應(yīng)用?
求一種基于STM32F103C8T6的無(wú)線(xiàn)飛鼠設(shè)計(jì)方案
一種基于單片機(jī)系統(tǒng)的DMA控制電路的模塊化設(shè)計(jì)方案
基于STM32G4芯片的DAC應(yīng)用示例分享

基于STM32G4的3kW 5G通信電源模塊解決方案

基于STM32G4和STM32H7的ST室內(nèi)和商用空調(diào)方案

STM32G4市場(chǎng)和特性篇

評(píng)論