整理CubeMX配置ADC實現(xiàn)幾種方式AD轉(zhuǎn)換
(注 : 以STM32F429為例)
1. 輪詢方式
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc); //輪詢模式,需放在循環(huán)中不斷開啟
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc) //獲取轉(zhuǎn)換結(jié)果
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout) /* 此函數(shù)只用于輪詢模式,用于等待轉(zhuǎn)換完成 */
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc); //停止轉(zhuǎn)換
(1)配置CumeMX,如下圖,選擇規(guī)則通道,設(shè)置好AD轉(zhuǎn)換的模式,不掃描,連續(xù)轉(zhuǎn)換。
(2)編程實現(xiàn)
** 2. 中斷方式**
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);//中斷模式
HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);//中斷
(1)配置CubuMX,在輪詢的基礎(chǔ)上,把中斷勾選中,如圖:
(2)編程實現(xiàn):
編寫中斷回調(diào)函數(shù),在里面設(shè)置一個標(biāo)志位。
主循環(huán)中判斷此標(biāo)志位,注意需要調(diào)用 HAL_ADC_Start_IT。
3、DMA方式多通道轉(zhuǎn)換
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);//DMA模式
HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
(1)CubeMX配置,勾選多個通道,然后配置ADC,使能連續(xù)轉(zhuǎn)換和掃描模式,使能DMA請求,配置Rank,如下圖:
(2)編程實現(xiàn):
注: 如果沒有轉(zhuǎn)換,要注意時鐘問題。
- 定時器觸發(fā)+ADC中斷實現(xiàn)單通道AD采集
(1)首先要了解,ADC要好幾種觸發(fā)方式,如下,這里我采用TIM8的事件更新來觸發(fā)AD轉(zhuǎn)換。
#define ADC_EXTERNALTRIGCONV_T1_CC1 0x00000000U
#define ADC_EXTERNALTRIGCONV_T1_CC2 ((uint32_t)ADC_CR2_EXTSEL_0)
#define ADC_EXTERNALTRIGCONV_T1_CC3 ((uint32_t)ADC_CR2_EXTSEL_1)
#define ADC_EXTERNALTRIGCONV_T2_CC2 ((uint32_t)(ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T2_CC3 ((uint32_t)ADC_CR2_EXTSEL_2)
#define ADC_EXTERNALTRIGCONV_T2_CC4 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T2_TRGO ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_T3_CC1 ((uint32_t)(ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T3_TRGO ((uint32_t)ADC_CR2_EXTSEL_3)
#define ADC_EXTERNALTRIGCONV_T4_CC4 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T5_CC1 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_T5_CC2 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_1 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T5_CC3 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2))
#define ADC_EXTERNALTRIGCONV_T8_CC1 ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_0))
#define ADC_EXTERNALTRIGCONV_T8_TRGO ((uint32_t)(ADC_CR2_EXTSEL_3 | ADC_CR2_EXTSEL_2 | ADC_CR2_EXTSEL_1))
#define ADC_EXTERNALTRIGCONV_Ext_IT11 ((uint32_t)ADC_CR2_EXTSEL)
#define ADC_SOFTWARE_START ((uint32_t)ADC_CR2_EXTSEL + 1U)
(2)CubeMX配置TIM8與ADC1:
TIM8配置為1Hz,即1S觸發(fā)一次AD轉(zhuǎn)換。
ADC1配置如下:別忘了開啟中斷
(3)代碼實現(xiàn):實現(xiàn)的效果是1S打印一次AD轉(zhuǎn)換的結(jié)果
1 //首先調(diào)用
2 HAL_ADC_Start_IT(&hadc1);
3 HAL_TIM_Base_Start(&htim8);
4
5 //編寫AD轉(zhuǎn)換完成處理函數(shù)
6 void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
7 {
8 printf("%d\\r\\n",HAL_ADC_GetValue(&hadc1));
9 }
-
adc
+關(guān)注
關(guān)注
99文章
6688瀏覽量
549096 -
STM32
+關(guān)注
關(guān)注
2293文章
11031瀏覽量
364503 -
dma
+關(guān)注
關(guān)注
3文章
576瀏覽量
103154 -
AD轉(zhuǎn)換
+關(guān)注
關(guān)注
3文章
168瀏覽量
46065 -
STM32F429
+關(guān)注
關(guān)注
0文章
40瀏覽量
11338
發(fā)布評論請先 登錄
想在PWM的中點觸發(fā)ADC采樣,使用Cubemx配置一直實現(xiàn)不了,為什么?
轉(zhuǎn):STM32CubeMX系列教程7:模數(shù)轉(zhuǎn)換(ADC)
STM32CubeMX ADC規(guī)則通道輪詢轉(zhuǎn)換
STM32CubeMX配置ADC模擬看門狗實現(xiàn)掉電保存——基于(STM32G070+STM32CubeMX+HAL庫+ADC模擬看門狗) 精選資料分享
通過CubeMx實現(xiàn)ADC多通道掃描采集DMA方式
STM32 HAL庫 CUBEMX配置 ADC采集 精選資料分享
在CubeMX中配置ADC出錯請大神指教
STM32CUBEMX配置教程(十二)STM32的定時器觸發(fā)的固定頻率ADC采樣(使用DMA)

STM32CubeMX配置ADC模擬看門狗實現(xiàn)掉電保存——基于(STM32G070+STM32CubeMX+HAL庫+ADC模擬看門狗)

2.使用cubemx配置stm32(二)__核心配置

STM32 HAL庫 CUBEMX配置 ADC采集

STM32 HAL庫 CubeMX教程(七)ADC電壓采集串口輸出

評論