本次的实验是通过配置DMA来获取ADC采集到的数据的。

软件实现如下:

  adc.c文件

#include "adc.h"#define ADC1_DR_Address    ((u32)0x40012400+0x4c)                      //定义ADC1地址volatile uint16_t ADCConvertedValue[2];                                //定义内存地址数组
float AD_Value[2];static void ADC1_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;/* Enable ADC1 and GPIOC clock */RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB, ENABLE);/* Configure PC.01  as analog input */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 |GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOB, &GPIO_InitStructure);                               // PB0,PB1 ,输入时不用设置速率
}static void ADC1_DMA_Config(void)
{DMA_InitTypeDef DMA_InitStructure;/* DMA channel1 configuration */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);                    //使能DMA传输
    DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&(ADC1->DR);        //ADC地址DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADCConvertedValue;     //内存地址DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;DMA_InitStructure.DMA_BufferSize = 2; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;    //外设地址固定DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;              //内存地址不固定DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //半字DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                       //循环传输DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;DMA_Init(DMA1_Channel1, &DMA_InitStructure);
}static void ADC1_Config(void)
{/* ADC1 configuration */ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1);RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);                  //使能ADC1时钟ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;                   //独立ADC模式ADC_InitStructure.ADC_ScanConvMode = ENABLE;                         //启动扫描模式,扫描模式用于多通道采集ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;                   //开启连续转换模式,即不停地进行ADC转换ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;    //不使用外部触发转换ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;               //采集数据右对齐ADC_InitStructure.ADC_NbrOfChannel = 2;                               //要转换的通道数目2ADC_Init(ADC1, &ADC_InitStructure);/*配置ADC时钟,为PCLK2的6分频,即12Hz*/RCC_ADCCLKConfig(RCC_PCLK2_Div6); /*配置ADC1的通道8,9为239.5个采样周期,序列为1,2*/ ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 1 , ADC_SampleTime_239Cycles5);ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 2 , ADC_SampleTime_239Cycles5);/* Enable ADC1 DMA */ADC_DMACmd(ADC1, ENABLE);    /* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);/*复位校准寄存器 */   ADC_ResetCalibration(ADC1);/*等待校准寄存器复位完成 */while(ADC_GetResetCalibrationStatus(ADC1));    /* ADC校准 */ADC_StartCalibration(ADC1);/* 等待校准完成*/while(ADC_GetCalibrationStatus(ADC1));
}void adc1_start(void)
{ADC_SoftwareStartConvCmd(ADC1, ENABLE);                         //ADC1软计启动DMA_Cmd(DMA1_Channel1, ENABLE);                                 //使能DMA通道1
}void ADC1_Init(void)
{ADC1_GPIO_Config();ADC1_DMA_Config();ADC1_Config();
}

adc.h文件

#ifndef __ADC_H
#define __ADC_H#include <stm32f10x.h>void ADC1_Init(void);
void adc1_start(void);#endif  /*ADC_H*/

main.c文件

#include "adc.h"extern volatile uint16_t ADCConvertedValue[2];                  //定义内存地址数组
extern float AD_Value[2];int main(void)
{    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);             //设置中断优先级组为组2,2位抢占优先级,2位响应优先级USART1_Int();                                               //串口初始化
    ADC1_Init();                                                //ADC1初始化
    adc1_start();SysTick_Init();                                             //系统时钟初始化while(1){        AD_Value[0]=(float)ADCConvertedValue[0]/4096*3.3;      //获取电压值AD_Value[1]=(float)ADCConvertedValue[1]/4096*3.3;      //获取电流值        printf("\r\n电压值为:%f V\r\n",AD_Value[0]);printf("\r\n电流值为:%f A\r\n",(AD_Value[1]-2.5)/0.185);}
}

本次实验的电流采集模块用的是ACS712模块,所以在打印输出时需要转换一下。

转载于:https://www.cnblogs.com/lucky-3/p/11269835.html

STM32实现双通道ADC采集电压电流值相关推荐

  1. 基于STM32F407使用ADC采集电压实验

    核心板:STM32F407 实验目的:使用ADC采集电压值将其打印在串口助手上 目录 ADC简介 STM32F407 ADC通道对应的引脚 STM32F407中的数据寄存器 ADC 规则数据寄存器 ( ...

  2. 小壁虎EFM32之ADC 采集电压

    前言 最近在学习小壁虎EFM32芯片的使用,需要用ADC采集电压,学习之中,遇到一些小问题和需要注意的地方,现将其记录下来,避免以后自己再次踩坑和往后可以学而时习之:好了,进入正题. 代码 主函数: ...

  3. Arduino Uno 使用 ADC采集电压在LCD上显示

    Arduino Uno 使用 ADC采集电压显示在LCD上 前言 所需组件 电路图及说明 Arduino使用ADC 代码 前言 在本教程中,我们将在 ARDUINO UNO 中介绍 ADC(模数转换) ...

  4. 蓝桥杯嵌入式模板的构建——STM32G431RB(LCD和ADC采集电压)

    基于LED和按键的模板来写的 下载工程的链接 蓝桥杯嵌入式模板的构建--STM32G431RB(LED和按键的配置)-其它文档类资源-CSDN下载这个模板亲测有效只写了按键三和按键4对LED进行点灯和 ...

  5. STM32 - ADC采集电压 中断处理

    一.参考电压 VDD接入电压为3.3V ADC供电要求:2.4V到3.6V 注意:STM32的100脚以上(含100脚)有参考电压引脚.在没有参考电压引脚的单片机上,可以把基准电压芯片接入VDDA,但 ...

  6. STM32物联网项目-ADC采集实验板板温度(NTC热敏电阻)

    STM32 ADC采集板载温度 STM32 ADC简介 ​ STM32 拥有 1~3 个 ADC(STM32F101/102 系列只有 1 个 ADC),这些 ADC 可以独立使用, 也可以使用双重模 ...

  7. LPC1768 双通道ADC采集数据并发送

    实验需要用到两个ADC同时采集电压信号.LPC1768有8个通道的ADC,这次实验中使用了P0.23引脚的AD0[0]和P0.26引脚的AD0[3].在实验中用的是uCOS-II操作系统,设计了两个任 ...

  8. GD32 ADC采集电压

    文章目录 ADC TIM DMA 其他一些初始化 main 总结 使用芯片为GD32F307 ADC 连续转换模式,可以运行在规则组通道上,一旦相应软件触发或者外部触发产生,ADC就会采样和转换规定的 ...

  9. 单片机 ADC采集电压

    单片机:N76E003 /********************************************* 函数名:Adc_Configuration 功 能:ADC初始化配置 形 参: 返 ...

最新文章

  1. 移除单链表的倒数第N个节点
  2. 有的时候入门只是一瞬间
  3. UI设计师必知:link和@import引用css文件方法的区别
  4. 电商美工手里没有C4D素材模板,不能体现有多厉害
  5. 基于Huffman树的CBOW模型的理解
  6. [转载] C++学习之异常处理详解
  7. HDU 1527 取石子游戏
  8. 在MyEclipse中安装SVN插件subclipse
  9. C语言链表详解(通俗易懂)
  10. cad怎么表示出一个孔_AutoCAD如何画一个带孔的立体球
  11. 服装制图软件测试初学者,服装行业版软件测试方案.ppt
  12. 畅想X9BYOD式的生活
  13. 九龙证券|服务器龙头获资金连续抢筹,尾盘主力抢筹前期大热门股
  14. 金融 python 招聘,滴滴、度小满金融python工程师社招面经
  15. 计算机应用基础课程的评价方法,对计算机应用基础课程评价方法探讨.doc
  16. 短线绝招--潜龙出海
  17. scal数组: 化整为多,取出单个元素
  18. 面试-Java【之】(revers)递归实现字符串倒序排列(详解)
  19. 计算机网络原理课后作业答案,自考04741《计算机网络原理》课后习题答案
  20. 鲁大师5月新机性能/流畅榜:中兴Axon 40 Ultra性能夺冠,特供版新机扎堆了!

热门文章

  1. JSD-2204-Java语言基础-运算符-分支结构-Day03
  2. 【Python】netwokx生成图源码
  3. Python—md5加密
  4. STM32CubeIDE体验
  5. 网格交易法的优缺点及策略优化方法
  6. springBoot 2.x过滤器--监听器--拦截器
  7. android 电视分享,Android系统电视去广告2.1
  8. java实现excel导出图片
  9. 关于谷歌和IE内核兼容性问题
  10. Visual Studio 2017 Enterprise 发布 15.4 版本,离线安装包百度网盘下载。