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

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

這篇具有很好參考價(jià)值的文章主要介紹了STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

?時(shí)鐘配置HSI主頻配置64M

STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?勾選打開(kāi)8個(gè)通道的ADCSTM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?使能連續(xù)轉(zhuǎn)換模式STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?添加DMASTM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?DMA模式選擇循環(huán)模式

STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?使能DMA連續(xù)請(qǐng)求

采樣時(shí)間配置160.5

轉(zhuǎn)換次數(shù)為8

STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?配置好8次轉(zhuǎn)換的順序

STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?配置好串口,選擇異步模式STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32配置好需要的開(kāi)發(fā)環(huán)境并獲取代碼STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32

?修改main.c

串口重定向

#include "stdio.h"
int fputc(int ch, FILE *f)
{
  HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, 0xFFFF);
  return ch;
}

?串口重定向一定要勾選Use Micro LIBSTM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32MX_ADC1_Init();

void MX_ADC1_Init(void)
{

  /* USER CODE BEGIN ADC1_Init 0 */

  /* USER CODE END ADC1_Init 0 */

  ADC_ChannelConfTypeDef sConfig = {0};

  /* USER CODE BEGIN ADC1_Init 1 */

  /* USER CODE END ADC1_Init 1 */

  /** Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion)
  */
  hadc1.Instance = ADC1;
  hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV2;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B;
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
  hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE;
  hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
  hadc1.Init.LowPowerAutoWait = DISABLE;
  hadc1.Init.LowPowerAutoPowerOff = DISABLE;
  hadc1.Init.ContinuousConvMode = ENABLE;
  hadc1.Init.NbrOfConversion = 8;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
  hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
  hadc1.Init.DMAContinuousRequests = ENABLE;
  hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED;
  hadc1.Init.SamplingTimeCommon1 = ADC_SAMPLETIME_160CYCLES_5;
  hadc1.Init.SamplingTimeCommon2 = ADC_SAMPLETIME_160CYCLES_5;
  hadc1.Init.OversamplingMode = DISABLE;
  hadc1.Init.TriggerFrequencyMode = ADC_TRIGGER_FREQ_HIGH;
  if (HAL_ADC_Init(&hadc1) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_0;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLINGTIME_COMMON_1;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_1;
  sConfig.Rank = ADC_REGULAR_RANK_2;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_2;
  sConfig.Rank = ADC_REGULAR_RANK_3;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_3;
  sConfig.Rank = ADC_REGULAR_RANK_4;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_4;
  sConfig.Rank = ADC_REGULAR_RANK_5;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_5;
  sConfig.Rank = ADC_REGULAR_RANK_6;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_6;
  sConfig.Rank = ADC_REGULAR_RANK_7;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }

  /** Configure Regular Channel
  */
  sConfig.Channel = ADC_CHANNEL_7;
  sConfig.Rank = ADC_REGULAR_RANK_8;
  if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN ADC1_Init 2 */

  /* USER CODE END ADC1_Init 2 */

}

void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)

void HAL_ADC_MspInit(ADC_HandleTypeDef* adcHandle)
{

  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(adcHandle->Instance==ADC1)
  {
  /* USER CODE BEGIN ADC1_MspInit 0 */

  /* USER CODE END ADC1_MspInit 0 */
    /* ADC1 clock enable */
    __HAL_RCC_ADC_CLK_ENABLE();

    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**ADC1 GPIO Configuration
    PA0     ------> ADC1_IN0
    PA1     ------> ADC1_IN1
    PA2     ------> ADC1_IN2
    PA3     ------> ADC1_IN3
    PA4     ------> ADC1_IN4
    PA5     ------> ADC1_IN5
    PA6     ------> ADC1_IN6
    PA7     ------> ADC1_IN7
    */
    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3
                          |GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    /* ADC1 DMA Init */
    /* ADC1 Init */
    hdma_adc1.Instance = DMA1_Channel1;
    hdma_adc1.Init.Request = DMA_REQUEST_ADC1;
    hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
    hdma_adc1.Init.Mode = DMA_CIRCULAR;
    hdma_adc1.Init.Priority = DMA_PRIORITY_LOW;
    if (HAL_DMA_Init(&hdma_adc1) != HAL_OK)
    {
      Error_Handler();
    }

    __HAL_LINKDMA(adcHandle,DMA_Handle,hdma_adc1);

  /* USER CODE BEGIN ADC1_MspInit 1 */

  /* USER CODE END ADC1_MspInit 1 */
  }
}

?主函數(shù)

 uint16_t ADC_CHANNEL[8];
/**
  * @brief  The application entry point.
  * @retval int
  */
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 */

  /* 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_DMA_Init();
  MX_ADC1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */
   HAL_ADC_Start_DMA(&hadc1,(uint32_t*)&ADC_CHANNEL, 8); //啟動(dòng)AD轉(zhuǎn)換,DMA模式

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */
    static int count = 0;
    count++;
    uint16_t Adc_Val = 0;

    if(count % 100000 == 0)
    {
        for(int i = 0; i < 8; i++)
        {
            Adc_Val = ADC_CHANNEL[i];
            printf("CHANNEL%d = %04d, %f V\r\n", i, Adc_Val, (double)Adc_Val / 4095 * 3.3); 
        }
         printf("\r\n\r\n\r\n\r\n\r\n"); 
    }
    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

串口打印?

STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā)),STM32CubeMX,單片機(jī),嵌入式硬件,stm32文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-712415.html

到了這里,關(guān)于STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL庫(kù)開(kāi)發(fā))的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 基于高性能的STM32G031K4T6、STM32G031K6T6、STM32G031K8T6(ARM微控制器)64MHz 閃存 32-LQFP

    基于高性能的STM32G031K4T6、STM32G031K6T6、STM32G031K8T6(ARM微控制器)64MHz 閃存 32-LQFP

    STM32G0 32位微控制器 (MCU) 適合用于消費(fèi)、工業(yè)和家電領(lǐng)域的應(yīng)用,并可隨時(shí)用于物聯(lián)網(wǎng) (IoT) 解決方案。這些微控制器具有很高的集成度,基于高性能ARM? Cortex?-M0+ 32位RISC內(nèi)核,工作頻率高達(dá)64MHz。該器件包含內(nèi)存保護(hù)單元 (MPU)、高速嵌入式內(nèi)存、DMA以及各種系統(tǒng)功能、增強(qiáng)型

    2024年02月11日
    瀏覽(24)
  • 【STM32】定時(shí)器1觸發(fā)ADC多(規(guī)則)通道采樣+DMA(CUBEMX配置)

    【STM32】定時(shí)器1觸發(fā)ADC多(規(guī)則)通道采樣+DMA(CUBEMX配置)

    在用單片機(jī)做電源控制時(shí)不得不提ADC采集,離散系統(tǒng)是有固定的執(zhí)行周期的,所以我們采樣也是要固定時(shí)間去采樣。然后就是我希望pwm波(定時(shí)器1產(chǎn)出)的頻率與采樣頻率一致。 我下面演示的是G431CBU6,當(dāng)然其他芯片也大差不差了。 說(shuō)一下大致流程,TIM1觸發(fā)ADC采樣,然后

    2024年02月01日
    瀏覽(36)
  • STM32初學(xué)入門(mén)筆記(3):STM32CubeMX配置STM32實(shí)現(xiàn)多通道ADC+DMA讀取模擬量

    STM32初學(xué)入門(mén)筆記(3):STM32CubeMX配置STM32實(shí)現(xiàn)多通道ADC+DMA讀取模擬量

    模擬信號(hào)的讀取是我們?cè)谧龊芏囗?xiàng)目是都要用到的,而模擬量的讀取就要依賴于ADC數(shù)模轉(zhuǎn)換器。對(duì)于初學(xué)者,學(xué)習(xí)使用ADC可以很大的幫助以后的STM32學(xué)習(xí)。 目錄 ADC簡(jiǎn)介 : DMA簡(jiǎn)介:? 工程開(kāi)始: STM32CubeMX配置區(qū): 配置外部時(shí)鐘: 配置調(diào)試: 配置ADC: 配置DMA: 配置串口: 配

    2024年02月09日
    瀏覽(31)
  • STM32Cubemx——ADC采集+DMA傳輸

    STM32Cubemx——ADC采集+DMA傳輸

    STM32F407VE核心板 STM32Cubemx 版本 6.0.1 Keil 版本 5.31 杜邦線 ST-Link 12 位 ADC 是逐次趨近型模數(shù)轉(zhuǎn)換器。它具有多達(dá) 19 個(gè)復(fù)用通道,可測(cè)量來(lái)自 16 個(gè)外部源、兩個(gè)內(nèi)部源和 VBAT 通道的信號(hào)。這些通道的 A/D 轉(zhuǎn)換可在單次、連續(xù)、掃描或不連續(xù)采樣模式下進(jìn)行。ADC 的結(jié)果存儲(chǔ)在一個(gè)左

    2023年04月24日
    瀏覽(18)
  • STM32CubeMx實(shí)現(xiàn)ADC多通道+DMA讀?。℉AL庫(kù))

    STM32CubeMx實(shí)現(xiàn)ADC多通道+DMA讀取(HAL庫(kù))

    目錄 一、實(shí)驗(yàn)結(jié)果 ?二、STM32CubeMx配置 三、main.c測(cè)試代碼 1、RCC配置 (外部晶振選擇8MHz。設(shè)置相應(yīng)的分頻器M=8,倍頻器倍頻系數(shù)N=336,分頻器分頻系數(shù)P=2,那么主PLL生成的第一個(gè)輸出高速時(shí)鐘PLLP為:168MHz)? 2、SYS配置 ?3、ADC(規(guī)則)通道配置(獨(dú)立模式,預(yù)分頻4分頻,1

    2024年02月15日
    瀏覽(31)
  • STM32-單通道ADC采集(DMA讀?。?shí)驗(yàn)

    STM32-單通道ADC采集(DMA讀取)實(shí)驗(yàn)

    關(guān)于ADC的一些原理和實(shí)驗(yàn)我們已經(jīng)有了2篇筆記,鏈接如下: 關(guān)于ADC的筆記1_Mr_rustylake的博客-CSDN博客 STM32-ADC單通道采集實(shí)驗(yàn)_Mr_rustylake的博客-CSDN博客 實(shí)驗(yàn)要求:通過(guò)ADC1通道1(PA1)采集電位器的電壓,并顯示ADC轉(zhuǎn)換的數(shù)字量和換算后的電壓值。 我們通過(guò)下表可以知道DMA1通道

    2024年02月16日
    瀏覽(37)
  • STM32-微項(xiàng)目10-ADC多通道采集+DMA數(shù)據(jù)轉(zhuǎn)移

    STM32-微項(xiàng)目10-ADC多通道采集+DMA數(shù)據(jù)轉(zhuǎn)移

    一、微項(xiàng)目實(shí)現(xiàn)目標(biāo): 由于ADC多通道采集在規(guī)則組中只有一個(gè)寄存器CR,實(shí)際上在多通道采集時(shí)刻,需要把每一個(gè)同都的數(shù)據(jù)及時(shí)傳出,否則上一個(gè)通道的數(shù)據(jù)會(huì)被當(dāng)前通道的數(shù)據(jù)給覆蓋掉。 二、微項(xiàng)目硬件配置需求: ?stm32F103C8T6核心板一塊 0.96寸OLED顯示,用于顯示計(jì)數(shù) 三

    2024年02月16日
    瀏覽(30)
  • STM32HAL ADC+TIM+DMA采集交流信號(hào) 基于cubemx

    STM32HAL ADC+TIM+DMA采集交流信號(hào) 基于cubemx

    本文主要講解定時(shí)器觸發(fā)ADC去采集交流信號(hào),DMA把數(shù)據(jù)搬移到內(nèi)存。 所需工具: 開(kāi)發(fā)板:STM32F103C8T6 STM32CubeMX IDE: Keil-MDK 相關(guān)文章: STM32HAL ADC+TIM+DMA采集交流信號(hào) 基于cubemx(二) STM32cubemx ADC+TIM+DMA超頻采樣 ADC+TIM+DMA采集交流信號(hào)是電賽中使用范圍最為廣泛的一個(gè)技術(shù)。這個(gè)模

    2024年02月03日
    瀏覽(32)
  • STM32CubeMX配置ADC采樣(輪詢、中斷、DMA)

    STM32CubeMX配置ADC采樣(輪詢、中斷、DMA)

    STM32CubeMX能夠極大減小STM32外設(shè)配置的工作量,因此作者也借助空閑時(shí)間對(duì)STM32CubeMX相關(guān)配置進(jìn)行了學(xué)習(xí),本文介紹如何利用STM32CubeMX配置ADC采樣,記錄了作者學(xué)習(xí)過(guò)程中遇到的問(wèn)題及解決辦法,使大家少走彎路,并方便以后復(fù)習(xí) 先選擇所使用的MCU,這里我使用的是STM32F407ZGT系

    2024年02月03日
    瀏覽(29)
  • 野火STM32電機(jī)系列(六)Cubemx配置ADC規(guī)則和注入通道

    野火STM32電機(jī)系列(六)Cubemx配置ADC規(guī)則和注入通道

    前文已經(jīng)配置了GPIO、編碼器 本節(jié)講解CubeMXADC規(guī)則和注入通道 本文adc注入通道采用定時(shí)器觸發(fā),因此在上文定時(shí)器配置的基礎(chǔ)上進(jìn)行 常規(guī)信號(hào)(溫度等)使用帶DMA的常規(guī)通道連續(xù)采樣 注入采樣由定時(shí)器觸發(fā),采集電機(jī)三相電流,并進(jìn)入adc中斷執(zhí)行10khz的控制程序 ADC硬件接口

    2024年02月08日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包