国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32開發(fā)(14)----CubeMX配置ADC

這篇具有很好參考價值的文章主要介紹了STM32開發(fā)(14)----CubeMX配置ADC。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


前言

本章介紹使用STM32CubeMX對ADC進(jìn)行配置的方法,ADC的原理、概念和特點,配置各個步驟的功能,并通過單通道,多通道,DMA三種方式實現(xiàn)采集。

一、什么是ADC?

ADC 即模擬數(shù)字轉(zhuǎn)換器,英文詳稱 Analog-to-digital converter,可以將外部的模擬信號轉(zhuǎn)換為數(shù)字信號。

以下是datasheet當(dāng)中的內(nèi)容,我就做個搬運(yùn)工,簡單翻一下,大家可以配合datasheet學(xué)習(xí),這樣理解會更加深刻。 STM32 的 ADC 是 12 位逐次逼近型的模擬數(shù)字轉(zhuǎn)換器,它有 18 個通道,可測量 16 個外部和 2 個內(nèi)部信號源,其中 ADC3 根據(jù) CPU 引腳的不同其通道數(shù)也不同,一般有 8 個外部通道。 ADC 中的各個通道的 A/D 轉(zhuǎn)換可以單次、連續(xù)、掃描或間斷模式執(zhí)行。 ADC 的結(jié)果可以以左對齊或者右對齊存儲在 16 位數(shù)據(jù)寄存器中。

STM32F103 的 ADC 主要特性如下:
1、 12 位分辨率;
2、轉(zhuǎn)換結(jié)束、注入轉(zhuǎn)換結(jié)束和發(fā)生模擬看門狗事件時產(chǎn)生中斷
3、單次和連續(xù)轉(zhuǎn)換模式
4、自校準(zhǔn)
5、帶內(nèi)嵌數(shù)據(jù)一致性的數(shù)據(jù)對齊
6、采樣間隔可以按通道分別編程
7、規(guī)則轉(zhuǎn)換和注入轉(zhuǎn)換均有外部觸發(fā)選項
8、間斷模式
9、雙重模式(帶 2 個或以上 ADC 的器件)
10、 ADC 轉(zhuǎn)換時間:時鐘為 72MHz 為 1.17us
11、 ADC 供電要求: 2.4V 到 3.6V
12、 ADC 輸入范圍: VREF–≤VIN≤VREF+
13、規(guī)則通道轉(zhuǎn)換期間有 DMA 請求產(chǎn)生

我們按照 ADC 的配置流程標(biāo)記了七處位置,分別如下,理解不同的步驟請參考圖和下列的介紹進(jìn)行。
STM32開發(fā)(14)----CubeMX配置ADC

① ADC模塊的輸入電壓
② 輸入通道:電壓輸入后,外部輸入的電壓會通過通道輸入到 ADC 轉(zhuǎn)換器中,下面各個是ADC通道的列表
STM32開發(fā)(14)----CubeMX配置ADC
③ 轉(zhuǎn)換順序:ADC 多個通道以任意順序輸入,則需要進(jìn)行順序轉(zhuǎn)換,轉(zhuǎn)換的方式有兩種,一種是規(guī)則組:即按照順序進(jìn)行,另一種是注入組:即打破原有順序,有點類似中斷的形式進(jìn)行順序轉(zhuǎn)換、
④ 轉(zhuǎn)換觸發(fā)源:從圖中可以看到,順序轉(zhuǎn)換是需要觸發(fā)源的,這里就是對觸發(fā)源的配置
⑤ 轉(zhuǎn)換時間:即輸入電壓通過ADC的時間 計算公式:T = 采樣時間 + 12.5 個周期
⑥數(shù)據(jù)寄存器:ADC 轉(zhuǎn)換完成后的數(shù)據(jù)輸出寄存器
⑦ 中斷:ADC 中斷可分為三種:規(guī)則組轉(zhuǎn)換結(jié)束中斷、注入組轉(zhuǎn)換結(jié)束中斷、設(shè)置了模擬看門狗狀態(tài)位中斷
⑧ 單次轉(zhuǎn)換模式和連續(xù)轉(zhuǎn)換模式
⑨ 掃描模式

二、實驗過程

1.單通道ADC采集

STM32CubeMX配置

選擇芯片stm32f103c6t6,新建工程

STM32開發(fā)(14)----CubeMX配置ADC

設(shè)置時鐘源,最小系統(tǒng)外部晶振8Mhz,作為外部高速HSE時鐘源。由于沒有外接外部低速晶振,這里低速時鐘源選擇旁路時鐘源。

STM32開發(fā)(14)----CubeMX配置ADC

配置時鐘樹,這里使用官方推薦的配置

STM32開發(fā)(14)----CubeMX配置ADC
為了展示內(nèi)部溫度的變化,我們配置USART1,打印獲取溫度的結(jié)果
STM32開發(fā)(14)----CubeMX配置ADC
USART1的參數(shù)配置如下,波特率115200,傳輸數(shù)據(jù)長度為8 Bit,奇偶檢驗無,停止位1.其他參數(shù)默認(rèn)
STM32開發(fā)(14)----CubeMX配置ADC
使用ADC 通道0,參數(shù)中設(shè)置采樣時間
STM32開發(fā)(14)----CubeMX配置ADC

Code Generator中設(shè)置只拷貝使用到的庫,分離.c和.h文件
STM32開發(fā)(14)----CubeMX配置ADC

設(shè)置好項目名稱和路徑,點擊GENERATE CODE即可,生成后使用keil5 IDE打開。

STM32開發(fā)(14)----CubeMX配置ADC

代碼實現(xiàn)

在usart.c文件后面添加如下代碼,代碼中添加了#ifdef宏定義進(jìn)行條件編譯,如果使用GUNC編譯,則PUTCHAR_PROTOTYPE 定義為int __io_putchar(int ch)函數(shù),否則定義為int fputc(int ch, FILE *f)函數(shù)。

/* USER CODE BEGIN 0 */
#include "stdio.h"
#ifdef __GNUC__
  /* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
     set to 'Yes') calls __io_putchar() */
  #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
  #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */
/**
  * @brief  Retargets the C library printf function to the USART.
  * @param  None
  * @retval None
  */
PUTCHAR_PROTOTYPE
{
  /* Place your implementation of fputc here */
  /* e.g. write a character to the EVAL_COM1 and Loop until the end of transmission */
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
 
  return ch;
}
/* USER CODE END 0 */

main函數(shù)如下:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
  uint32_t ADC_Value;
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_ADC_Start(&hadc1);	
	HAL_ADC_PollForConversion(&hadc1,10);	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	  if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
	  {
		ADC_Value = HAL_ADC_GetValue(&hadc1);
	  }
      printf(" ADC channel0 value = %1.3fV \r\n", ADC_Value*3.3f/4096);
      }

  }
  /* USER CODE END 3 */
}

2.多通道ADC采樣(非DMA)

STM32CubeMX配置

為了避免冗余,這里省略掉CubeMX新建工程,配置時鐘等步驟,直接展示ADC的配置
STM32開發(fā)(14)----CubeMX配置ADC

代碼實現(xiàn)

為了避免冗余,這里省略掉printf重載,直接展示main函數(shù)如下:

int main(void)
{
  /* USER CODE BEGIN 1 */
  uint32_t ADC_Value[2];
  uint8_t i;
  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	HAL_ADC_Start(&hadc1);	
	HAL_ADC_PollForConversion(&hadc1,10);	
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	HAL_Delay(500);
	  for(i=0;i<2;i++)
	  {
			if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))
	  		{
				ADC_Value[i] = HAL_ADC_GetValue(&hadc1);
	 		}
	  		HAL_ADC_Stop (&hadc1);//打開ADC
      		printf(" ADC channel0 value = %1.3fV \r\n", ADC_Value[0]*3.3f/4096);
      		printf(" ADC channel1 value = %1.3fV \r\n", ADC_Value[1]*3.3f/4096);
  }
  /* USER CODE END 3 */
}

3.多通道ADC采樣(DMA)

STM32CubeMX配置

為了避免冗余,這里省略掉CubeMX新建工程,配置時鐘等步驟,直接展示DMA和ADC的配置

DMA配置如下,主要配置了通道,模式,字寬等信息
STM32開發(fā)(14)----CubeMX配置ADC
ADC配置如下
STM32開發(fā)(14)----CubeMX配置ADC

代碼實現(xiàn)

為了避免冗余,這里省略掉printf重載,直接展示main函數(shù)如下:

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */
  uint32_t ADC_Value[100];
  uint8_t i;
  uint32_t ad1,ad2;
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 50);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    /* USER CODE BEGIN 3 */
	HAL_Delay(500);
    for(i = 0,ad1 =0,ad2=0; i < 100;)
    {
        ad1 += ADC_Value[i++];
        ad2 += ADC_Value[i++];
    }
    ad1 /= 50;
    ad2 /= 50;
    printf("\r\n******** ADC DMA Example ********\r\n\r\n");//串口打印
    printf(" AD1 value = %1.3fV \r\n", ad1*3.3f/4096);
    printf(" AD2 value = %1.3fV \r\n", ad2*3.3f/4096);

}

總結(jié)

本章介紹使用STM32CubeMX對ADC進(jìn)行配置的方法,ADC的原理、概念和特點,配置各個步驟的功能,并通過單通道,多通道,DMA三種方式實現(xiàn)采集,對于配置的細(xì)節(jié),可以參照ADC實現(xiàn)原理圖,一點點梳理,這樣易于理解。文章來源地址http://www.zghlxwxcb.cn/news/detail-411975.html

到了這里,關(guān)于STM32開發(fā)(14)----CubeMX配置ADC的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32開發(fā)(10)----CubeMX配置基本定時器

    STM32開發(fā)(10)----CubeMX配置基本定時器

    本章介紹使用STM32CubeMX對基本定時器進(jìn)行配置的方法,STM32F103高性能系列設(shè)備包括基本定時器、高級控制定時器、通用定時器、看門狗定時器和 SysTick 定時器,但是STM32F103C6t6上資源比較有限(高級定時器TIM1,通用定時器TIM2和TIM3),沒有真正的基本定時器,其實通用定時器和

    2024年02月16日
    瀏覽(22)
  • 嘗試使用CubeMX做stm32開發(fā)之十:ADC配置

    嘗試使用CubeMX做stm32開發(fā)之十:ADC配置

    ????????參考《STM32中文參考手冊_V10》,研究CubeMX中有關(guān)ADC的配置。 ADC1 Mode and Configuration: ????????IN0~IN9:10路12位ADC采樣通道,外部模擬量信號輸入 ????????Temperature Sensor Channel:MCU內(nèi)置溫度傳感器采樣通道,用來測量器件周圍的溫度。在MCU內(nèi)部與ADC1_IN16通道相連

    2024年02月05日
    瀏覽(19)
  • STM32CubeIDE開發(fā)(二), 全面解析cubeMX圖形配置工具

    STM32CubeIDE開發(fā)(二), 全面解析cubeMX圖形配置工具

    目錄 一、cubeIDE 集成cubeMX 二、STM32CubeMX界面簡介 ??????? 2.1 總界面及支持功能 ?????? 【1】 功能頁面 ???????? 【2】支持配置的功能欄目 ???????? 2.2 通信接口外設(shè)配置 ??????? 【1】CAN外設(shè) ???????? 【2】FMC外設(shè) ??????? 【3】I2C外設(shè) ??????? 【4】串

    2023年04月12日
    瀏覽(34)
  • STM32CubeMX配置STM32G031多通道ADC采集(HAL庫開發(fā))

    STM32CubeMX配置STM32G031多通道ADC采集(HAL庫開發(fā))

    時鐘配置HSI主頻配置64M ?勾選打開8個通道的ADC ?使能連續(xù)轉(zhuǎn)換模式 ?配置好串口,選擇異步模式 配置好需要的開發(fā)環(huán)境并獲取代碼 ?修改main.c 串口重定向 ?串口重定向一定要勾選Use Micro LIB ?獲取ADC通道值 主函數(shù)? ?串口輸出

    2024年02月15日
    瀏覽(31)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫開發(fā))

    STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫開發(fā))

    ?時鐘配置HSI主頻配置64M ?勾選打開8個通道的ADC ?使能連續(xù)轉(zhuǎn)換模式 ?添加DMA ?DMA模式選擇循環(huán)模式 ?使能DMA連續(xù)請求 采樣時間配置160.5 轉(zhuǎn)換次數(shù)為8 ?配置好8次轉(zhuǎn)換的順序 ?配置好串口,選擇異步模式 配置好需要的開發(fā)環(huán)境并獲取代碼 ?修改main.c 串口重定向 ?串口重定向

    2024年02月08日
    瀏覽(40)
  • STM32CubeMx配置ADC(多通道采集+DMA讀取數(shù)據(jù))(HAL庫開發(fā))

    STM32CubeMx配置ADC(多通道采集+DMA讀取數(shù)據(jù))(HAL庫開發(fā))

    目錄 1、函數(shù)配置過程(這是標(biāo)準(zhǔn)庫配置過程): 2、STM32CubeMx配置過程 ?3、main函數(shù)源文件 采集5路ADC數(shù)據(jù),并用串口printf()函數(shù)打印出來。 實驗現(xiàn)象:? ADC轉(zhuǎn)換的初始條件: 1、使能 2、觸發(fā)源條件完成(這個需要自己配置)利用:HAL_ADC_Start_DMA()函數(shù); ADC中HAL開發(fā)優(yōu)勢就是,

    2023年04月08日
    瀏覽(27)
  • 嘗試使用CubeMX做stm32開發(fā)之十三:Clock Configuration(時鐘樹配置)

    嘗試使用CubeMX做stm32開發(fā)之十三:Clock Configuration(時鐘樹配置)

    ????????參考《STM32中文參考手冊_V10》,研究CubeMX中有關(guān)時鐘樹配置。 三種不同的時鐘源可被用于驅(qū)動系統(tǒng)時鐘(SYSCLK): HSI振蕩器時鐘 HSE振蕩器時鐘 PLL時鐘 時鐘源選擇對應(yīng)時鐘配置寄存器(RCC_CFGR)中的SW[1:0]位。 三種不同的時鐘源可被用于驅(qū)動系統(tǒng)時鐘???? M

    2024年02月16日
    瀏覽(18)
  • 1、STM32CubeMX和STM32Cube庫(HAL)詳細(xì)介紹

    1、STM32CubeMX和STM32Cube庫(HAL)詳細(xì)介紹

    目錄 前言 STM32Cube生態(tài) STM32Cube 是什么????????? STM32Cube 軟件工具套件 STM32Cube Embedded 軟件 STM32CubeMX ?編輯 ????????也許大家在學(xué)習(xí)正點原子或者其他32視頻和代碼的時候都聽過HAL庫,是的這是ST官方最新的函數(shù)庫,而以前的標(biāo)準(zhǔn)庫已不再更新與發(fā)展。而跟隨而來的就是

    2024年02月03日
    瀏覽(24)
  • 【11】STM32·HAL庫開發(fā)-STM32CubeMX簡介、安裝 | 新建STM32CubeMX工程步驟

    【11】STM32·HAL庫開發(fā)-STM32CubeMX簡介、安裝 | 新建STM32CubeMX工程步驟

    ??STM32CubeMX是ST開發(fā)的一款圖形配置工具,可通過配置自動生成 初始化代碼 (并不包括邏輯代碼)。以下是STM32CubeMX官方宣傳圖片,適用于Windows和macOS系統(tǒng),用于生成初始化代碼,一個圖形配置工具,搭配不同系列的STM32Cube固件包,即可支持不同系列的STM32芯片,初始化代碼

    2024年02月17日
    瀏覽(57)
  • STM32CubeMX軟件介紹及工程文件生成

    STM32CubeMX軟件介紹及工程文件生成

    ????STM32CubeMX 是用于 32 位 ARM Cortex STM32 微控制器的圖形工具。它通過分步過程可以非常輕松地配置STM32微控制器和微處理器,以及為Arm??Cortex?-M內(nèi)核或面向Arm??Cortex?-A內(nèi)核的特定Linux?設(shè)備樹生成相應(yīng)的初始化C代碼。 STM32CubeMX 是 ST 意法半導(dǎo)體近幾年來大力推薦的STM3

    2024年02月12日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包