有人使用STM32U5系列MCU開發(fā)產(chǎn)品,在用到ADC結(jié)合DMA傳輸時(shí)遇到點(diǎn)障礙,這里針對(duì)片內(nèi)ADC1和ADC4基于DMA標(biāo)準(zhǔn)請(qǐng)求模式和鏈表模式演示下實(shí)現(xiàn)過程,以供參考。
先對(duì)ADC1基于DMA標(biāo)準(zhǔn)請(qǐng)求模式做演示。
隨意選擇ADC1的4個(gè)通道,掃描模式,連續(xù)轉(zhuǎn)換,DMA傳輸轉(zhuǎn)換結(jié)果并令DMA工作在外設(shè)字到內(nèi)存字的循環(huán)傳輸模式。使用CubeMx進(jìn)行配置。其中DMA通道使用Channel 1。
相關(guān)代碼:
#defineADC_BUFFRER_SIZE((uint32_t)8)
uint32_t ADC1_Result[ADC_BUFFRER_SIZE];
ADC_HandleTypeDef hadc1;
DMA_HandleTypeDef handle_GPDMA1_Channel1; //For ADC1
/*USERCODEBEGIN2*/
HAL_PWREx_EnableVddA();//additmanuallywithlowercubeMxversion
__HAL_LINKDMA(&hadc1,DMA_Handle,handle_GPDMA1_Channel1);
if(HAL_ADC_Start_DMA(&hadc1,(uint32_t*)ADC1_Result,
(ADC_BUFFRER_SIZE)
) != HAL_OK)
{
Error_Handler();
}
/* USER CODE END 2 */
運(yùn)行結(jié)果如下圖所示:【目前4個(gè)通道我是懸空的】
現(xiàn)在對(duì)ADC4基于DMA鏈表模式做演示,其實(shí)就一個(gè)節(jié)點(diǎn)。
選擇ADC4的4個(gè)內(nèi)部信號(hào)通道,掃描模式,連續(xù)轉(zhuǎn)換,DMA傳輸轉(zhuǎn)換結(jié)果,并令DMA工作在外設(shè)字到內(nèi)存字的循環(huán)模式。使用CubeMx進(jìn)行配置。其中DMA通道使用Channel 0。對(duì)于內(nèi)部信號(hào)的采樣,往往有最小采樣時(shí)間要求,我這里的演示隨便選了個(gè)參數(shù),具體應(yīng)用時(shí)請(qǐng)參考數(shù)據(jù)手冊(cè)及當(dāng)時(shí)ADC時(shí)鐘具體擬定。特此提醒!
關(guān)于DMA鏈表模式的配置在CubeMx界面里的Utility菜單下。
相關(guān)用戶代碼:
/*Privatevariables---------------------------------------------------------*/
ADC_HandleTypeDef hadc4;
DMA_NodeTypeDef Node_GPDMA1_Channel1;
DMA_QListTypeDef List_GPDMA1_Channel1;
DMA_HandleTypeDef handle_GPDMA1_Channel0;
/* USER CODE BEGIN PV */
/* USER CODE BEGIN 2 */
HAL_PWREx_EnableVddA(); //add it manually with lower cubeMx version
MX_ADC4Queue_Config();
__HAL_LINKDMA(&hadc4,DMA_Handle,handle_GPDMA1_Channel0);
HAL_DMAEx_List_SetCircularMode(&ADC4Queue);
if (HAL_DMAEx_List_LinkQ(&handle_GPDMA1_Channel0, &ADC4Queue) != HAL_OK)
{
Error_Handler();
}
if (HAL_ADC_Start_DMA(&hadc4,
(uint32_t *)ADC4_Result,
(ADC_BUFFRER_SIZE)
) != HAL_OK)
{
Error_Handler();
}
/* USER CODE BEGIN WHILE */
結(jié)果驗(yàn)證【顯示了2組數(shù)據(jù)】:
最后還提醒下,如果CubeMx版本比較低時(shí),HAL_PWREx_EnableVddA()函數(shù)需要自己手動(dòng)添加。我目前CubeMx 6.9.0版本已經(jīng)不用手動(dòng)添加了,創(chuàng)建工程時(shí)會(huì)將其自動(dòng)生成于相應(yīng)位置。
-
adc
+關(guān)注
關(guān)注
99文章
6698瀏覽量
549170 -
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103197
原文標(biāo)題:STM32U5 ADC+DMA配置演示
文章出處:【微信號(hào):stmcu832,微信公眾號(hào):茶話MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
STM32U5系列TIMER+DMA+DAC應(yīng)用演示

STM32多通道ADC+DMA為什么無法進(jìn)入中斷
怎樣去解決STM32多通道ADC+DMA無法進(jìn)入中斷的問題
如何對(duì)單緩沖模式的ADC+DMA如何進(jìn)行配置
STM32U5系列物聯(lián)網(wǎng)節(jié)點(diǎn)探索套件

STM32U5帶OEM Key保護(hù)的RDP降級(jí)

STM32U5系列使用LPBAM進(jìn)行功耗優(yōu)化

STM32U5系列片內(nèi)ADC1和ADC4實(shí)現(xiàn)過程(上)

STM32項(xiàng)目實(shí)戰(zhàn):基于STM32U5的火災(zāi)報(bào)警系統(tǒng)(LVGL),附項(xiàng)目教程/源碼

評(píng)論