娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

發(fā)布者:leader5最新更新時(shí)間:2024-05-10 來源: elecfans關(guān)鍵字:STM32CUBEMX  ADC  DMA方式  采樣  USART打印 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

概述

直接存儲(chǔ)器訪問(DMA)用于在外設(shè)與存儲(chǔ)器之間以及存儲(chǔ)器與存儲(chǔ)器之間提供高速數(shù)據(jù)傳輸。可以在無需任何CPU操作的情況下通過DMA快速傳輸傳輸。這樣節(jié)省的CPU資源可供其它操作使用。

DMA允許在后臺(tái)執(zhí)行數(shù)據(jù)傳輸,無需Cortex-MO處理器干預(yù)。在此操作過程中,主處理器可以執(zhí)行其它任務(wù),僅當(dāng)整個(gè)數(shù)據(jù)塊需要處理時(shí),才會(huì)中斷主處理器。這樣即使傳輸大量數(shù)據(jù)也不會(huì)對系統(tǒng)性能造成太大影響。

DMA主要用于為不同的外設(shè)模塊實(shí)現(xiàn)集中數(shù)據(jù)緩沖存儲(chǔ)(通常在系統(tǒng)SRAM中)。與分布式解決方案(其中每個(gè)外設(shè)都需要實(shí)現(xiàn)自己的本地?cái)?shù)據(jù)存儲(chǔ))相比,DMA解決方案在硅片成本和功耗方面的成本較低。

根據(jù)使用的產(chǎn)品型號的不同,有一個(gè)或兩個(gè)DMA模塊。

STM32F0XX DMA控制器總共有5個(gè)通道用于DMA1,每個(gè)通道都專門管理來自一個(gè)或多個(gè)外設(shè)的存儲(chǔ)器訪問請求。它具有一個(gè)仲裁器,用于處理不同的DMA請求的優(yōu)先級。

本篇文章主要介紹如何使用STM32CubeMX實(shí)現(xiàn)ADC在DMA下快速采集,并且打印出去。

非DMA接收請查看:https://blog.csdn.net/qq_24312945/article/details/109685401

在這里插入圖片描述

硬件準(zhǔn)備

首先需要準(zhǔn)備一個(gè)開發(fā)板,這里我準(zhǔn)備的是NUCLEO-F030R8的開發(fā)板:

在這里插入圖片描述

選擇芯片型號

使用STM32CUBEMX選擇芯片stm32f030r8,如下所示:

在這里插入圖片描述

配置時(shí)鐘源

HSE與LSE分別為外部高速時(shí)鐘和低速時(shí)鐘,在本文中使用內(nèi)置的時(shí)鐘源,故都選擇Disable選項(xiàng),如下所示:

在這里插入圖片描述

在這里插入圖片描述

配置時(shí)鐘樹

STM32F0的最高主頻到48M,所以配置48即可:

在這里插入圖片描述插入圖片描述

串口配置

本次實(shí)驗(yàn)使用的串口1進(jìn)行串口通信,波特率配置為115200。

在這里插入圖片描述

ADC配置

STM32f030中,有一個(gè)ADC(模擬/數(shù)字轉(zhuǎn)換器),每個(gè) ADC 有 12 位、 10 位、 8 位和 6 位可選,每個(gè)ADC有16個(gè)外部通道、2個(gè)內(nèi)部通道和一個(gè)VBAT 通道的信號。

本文將開ADC的IN0、IN1、IN4一共三個(gè)通道,來分別讀取ADC,由于串口2和IN2,IN3復(fù)用,故不使用IN2、IN3。配置如下:

在這里插入圖片描述

開啟DMA:

在這里插入圖片描述

打開中斷:

在這里插入圖片描述

生成工程設(shè)置

最后設(shè)置生成獨(dú)立的初始化文件:

在這里插入圖片描述

生成代碼

在這里插入圖片描述

配置keil

在這里插入圖片描述

代碼

在main.c中,添加頭文件,若不添加會(huì)出現(xiàn) identifier 'FILE' is undefined報(bào)錯(cuò)。


/* USER CODE BEGIN Includes */

#include 'stdio.h'

/* USER CODE END Includes */

函數(shù)聲明和串口重定向:


/* USER CODE BEGIN PFP */

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif /* __GNUC__ */

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */

PUTCHAR_PROTOTYPE

{

    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);

    return ch;

}

/* USER CODE END 0 */

變量定義:


/* USER CODE BEGIN 1 */

        uint32_t ADC_1, ADC_2,ADC_3;

        //各采樣30次,故30*3為90

        uint32_t ADC_Value[90];

        uint8_t i;

  /* USER CODE END 1 */

使用DMA傳輸:


/* USER CODE BEGIN 2 */

    HAL_ADC_Start_DMA(&hadc,(uint32_t*)&ADC_Value,90);    //使用DMA傳輸

  /* USER CODE END 2 */

主循環(huán):


/* USER CODE BEGIN WHILE */

  while (1)

  {

        //放個(gè)延遲,防止程序運(yùn)行第一次讀出數(shù)據(jù)有誤

        HAL_Delay(100);

        ADC_1=0;

        ADC_2=0;

        ADC_3=0;

            for(i=0,ADC_1=0,ADC_2=0;i<90;)

        {

            ADC_1+=ADC_Value[i++];   

            ADC_2+=ADC_Value[i++];

            ADC_3+=ADC_Value[i++];

        }

    printf('ADC數(shù)據(jù)如下

');

//除以30為求30次平均ADC值,乘以3.3為以3.3電壓為基準(zhǔn),除以4096為ADC配置為12位


        printf('ADC_IN0=%1.4f

',ADC_1/30*3.3f/4096);

        printf('ADC_IN1=%1.4f

',ADC_2/30*3.3f/4096);

        printf('ADC_IN2=%1.4f

',ADC_3/30*3.3f/4096);

    /* USER CODE END WHILE */



    /* USER CODE BEGIN 3 */

        HAL_Delay(900);

  }

  /* USER CODE END 3 */


演示效果

設(shè)定adc1口接3.3V,adc2口接GND,adc口接1.5V,輸出如下。

在這里插入圖片描述


關(guān)鍵字:STM32CUBEMX  ADC  DMA方式  采樣  USART打印 引用地址:STM32CUBEMX(3)--ADC通過DMA方式采樣,USART打印

上一篇:STM32單片機(jī)擴(kuò)展下的IPUS SQPI PSRAM應(yīng)用領(lǐng)域
下一篇:基于STM32F030對24LC02進(jìn)行代碼讀寫

小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 柯坪县| 德阳市| 龙岩市| 微山县| 岳阳县| 元朗区| 苏州市| 法库县| 中宁县| 平湖市| 汤原县| 北宁市| 嘉峪关市| 拜城县| 彰化市| 缙云县| 竹北市| 西充县| 林州市| 江都市| 三亚市| 大荔县| 新乡县| 乌拉特前旗| 睢宁县| 阿克苏市| 南陵县| 通河县| 望城县| 封开县| 太保市| 宁城县| 永吉县| 搜索| 刚察县| 辽阳市| 子长县| 平潭县| 乌什县| 运城市| 中牟县|