STM32 ADC多通道 关键代码

发布者:温文儒雅最新更新时间:2016-08-21 来源: eefocus关键字:STM32  ADC  关键代码 手机看文章 扫描二维码
随时随地手机看文章
做了个上位机

  STM32  ADC多通道 关键代码 - liuyunqian@yeah - 嵌入式学习

 

#==========================================================

define ADC1_DR_Address    ((u32)0x4001244C)

vu16 AD_Value[2];

 

==============================================================

关键代码

void ADC1_Configuration(void)
{
    ADC_InitTypeDef ADC_InitStructure;

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = ENABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; //连续转换开启
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 2;     //设置转换序列长度为2
    ADC_Init(ADC1, &ADC_InitStructure);
    
    //ADC内置温度传感器使能(要使用片内温度传感器,切忌要开启它)
    ADC_TempSensorVrefintCmd(ENABLE);
    
    //常规转换序列1:通道10
    ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_13Cycles5);
    //常规转换序列2:通道16(内部温度传感器),采样时间>2.2us,(239cycles)
    ADC_RegularChannelConfig(ADC1, ADC_Channel_16, 2, ADC_SampleTime_239Cycles5);
    
    // Enable ADC1
    ADC_Cmd(ADC1, ENABLE);
    // 开启ADC的DMA支持(要实现DMA功能,还需独立配置DMA通道等参数)
    ADC_DMACmd(ADC1, ENABLE);
    
    // 下面是ADC自动校准,开机后需执行一次,保证精度
    // Enable ADC1 reset calibaration register 
    ADC_ResetCalibration(ADC1);
    // Check the end of ADC1 reset calibration register
    while(ADC_GetResetCalibrationStatus(ADC1));

    // Start ADC1 calibaration
    ADC_StartCalibration(ADC1);
    // Check the end of ADC1 calibration
    while(ADC_GetCalibrationStatus(ADC1));
    // ADC自动校准结束---------------
    
}

/*******************************************************************************
* Function Name : DMA_Configuration
* Description    : DMA设置:从ADC模块自动读转换结果至内存
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void DMA_Configuration(void)
{
    DMA_InitTypeDef DMA_InitStructure;
    
    DMA_DeInit(DMA1_Channel1);
    DMA_InitStructure.DMA_PeripheralBaseAddr = ADC1_DR_Address;
    DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&AD_Value;
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
    //BufferSize=2,因为ADC转换序列有2个通道
    //如此设置,使序列1结果放在AD_Value[0],序列2结果放在AD_Value[1]
    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;
    //循环模式开启,Buffer写满后,自动回到初始地址开始传输
    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);
    //配置完成后,启动DMA通道
    DMA_Cmd(DMA1_Channel1, ENABLE);
}

关键字:STM32  ADC  关键代码 引用地址:STM32 ADC多通道 关键代码

上一篇:STM32 DMA学习
下一篇:STM32 产品唯一身份标识寄存器(96位) 闪存容量寄存器

推荐阅读最新更新时间:2024-03-16 15:06

使用STM32的SysTick实现精准延迟
使用SysTick的普通计数模式对延迟进行管理. static u8 fac_us=0;//us延时倍乘数 static u16 fac_ms=0;//ms延时倍乘数 //初始化延迟函数 void delay_init(u8 SYSCLK) { SysTick- CTRL&=0xfffffffb; //bit2清空,选择外部时钟*/ fac_us = SYSCLK/8; fac_ms = (u16)fac_us*1000; } //延时nms //SysTick- LOAD为24位寄存器,所以,最大延时为: //nms =0xffffff*8*1000/SYSCLK
[单片机]
STM32|4-20mA输出电路
  为工业场合开发的设备通常情况下都会具有4-20mA输出接口,在以往没有DAC模块的单片机系统,需要外加一主片DAC实现模拟量的控制,或者采用PWM来摸拟DA,但也带来温漂和长期稳定性问题。在以STM32为中心的设备中,使用它自带的DAC即可非常方便的实现4-20mA的输出接口,具有精度高、稳定性好、漂移小以及编程方便等特点。   在STM32单片机系统中,100脚以下没有外接出VREF引脚,但这样使得DAC的参考端和VCC共用,带来较大误码差,为解决这一问题,可以使用廉价的TL431来解决供电问题,TL431典型温漂为30ppm,所以在一般应用中已非常足够。选用两只低温漂电阻,调整输出使TL431的输出电压在3V-3.6V之间
[单片机]
<font color='red'>STM32</font>|4-20mA输出电路
STM32中的串口通信的基础知识
串口通信基本原理 并行通信与串行通信 ① 并行通信传送八路信号,一次并行传送传送完整的一个字节信息。串行通信在一个方向上只能传送一路信号,一次只能传送一个二进制位,传送一个字节信息时,只能一位一位地依次传送; ② 串行的传输速度慢,但是对线路的要求低一些。 并行的对线路的要求高,但是速度快; ③ 串行线路仅使用一对信号线,线路成本低并且抗干扰能力强,因此可以用在长距离通讯上;而并行线路使用多对信号线(还不包括额外的控制线路),线路成本高并且抗干扰能力差,因此对通讯距离有非常严格的限制。 串行通信中单工,半双工和全双工的区别 单工,半双工和全双工是通过传输方向不同而分的。具体说明如下: 按通信方式不同又可分为异
[单片机]
<font color='red'>STM32</font>中的串口通信的基础知识
STM32最小系统硬件组成部分
STM32最小系统硬件组成 最小系统为单片机工作的最低要求,不含外设控制,原理简单,分析最小系统是STM32入门的基础。 组成: 电源 复位 时钟 调试/下载接口 启动 电源 3.3V的电源从这里接入,其中电容起到滤波的作用。 复位电路 当RESET引脚被拉低产生外部复位时,产生复位脉冲,从而使系统复位。 有三种复位方式: 上电复位 手动复位 程序自动复位 上电复位,在上电瞬间,电容充电,RESET出现短暂的低电平,该低电平持续时间由电阻和电容共同决定,需求的复位信号持续时间约在1ms左右,计算方式如下: t = 1.1RC(固定计算公式) 1.1*10K*0.1uF=1.1ms 手动复位:按键按下时,RESET与地导
[单片机]
<font color='red'>STM32</font>最小系统硬件组成部分
ST推出新系列STM32超低功耗微控制器
横跨多重电子应用领域、全球领先的半导体供应商意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)发布了新系列32位通用微控制器产品。新系列产品将大幅延长消费电子、医疗保健和工业控制设备的电池使用寿命。STM32L0超低功耗系列微控制器基于32MHz ARM® Cortex™ M0+处理器内核,内置12位模数转换器(ADC) 和USB FS 2.0无晶振型解决方案。 新产品的内部模数转换器树立了一个新的低功耗标准,在100ksps转换速率时,模数转换器耗电仅为40µA,在1.14Msps时,功耗仅升至200µA。结合处理器内核的优异能效和外设的超低功耗,新系列微控制器将降低健身追踪器(fitness
[单片机]
stm32的任务调度方式和步骤
STM32的任务调度可以有两种方式 1)通过systick_handler定时器调度 2)执行一个系统调用 任务调度的步骤总结为如下: 保存程序的上下文即当前任务的寄存器,保存存储寄存器的任务堆栈的地址。 根据下一个任务的任务堆栈地址依次弹出下一个任务的16个寄存器。 堆栈中的寄存器保存顺序如下, XPSR SP(代表MSP或PSP,在任务调度完成后,根据PSP的值定位了是哪个任务) LR(存储函数的返回) R12 R3 R2 R1 R0 R11 R10 R9 R8 R7 R6 R5 R4
[单片机]
低压差(LDO)稳压器与ADC电源接口
考虑到目前可用ADC的采样速度以及典型ADC内部的众多不同电压和时钟域,一般建议把不同电源输入分开。 让不同电源输入分属不同的域,电源之间的串扰便可降至最低,噪声将更难以跨越不同的域,避免蠕升并造成ADC性能问题。 如果无法将其放在不同的域上,至少应使用铁氧体磁珠等元件,在不同电源域之间提供一定的隔离。 分别驱动不同电源输入的一种方法是使用低压差(LDO)稳压器。 实例如下面的图1所示。 Figure 1 图1 用不同的LDO驱动不同的ADC电源 LDO通常是最安全的电源类型,驱动ADC电源输入的风险也最小。 一般而言,LDO的噪声非常低,电源抑制比(PSRR)则很高。 低压差通常意味着,LDO的输入电源可以低
[电源管理]
低压差(LDO)稳压器与<font color='red'>ADC</font>电源接口
RyanMqtt移植指南
测试环境:stm32F401RCT6、RT-Thread版本: v4.1.0、RT-Thread Studio版本: 2.2.6、网络硬件使用ec800m移植at_socket使用sal框架。 1、移植介绍 RyanMqtt 库希望应用程序为以下接口提供实现: system 接口 RyanMqtt 需要 RTOS 支持,必须实现如下接口才可以保证 mqtt 客户端的正常运行 network 接口 RyanMqtt 依赖于底层传输接口 API,必须实现该接口 API 才能在网络上发送和接收数据包 MQTT 协议要求基础传输层能够提供有序的、可靠的、双向传输(从客户端到服务端 和从服务端到客户端)的字节流 time 接口
[单片机]
RyanMqtt移植指南
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved