1。 ADC初始化

void ADC_CH_DMA_Config(void)
{ADC_InitTypeDef     ADC_InitStructure;DMA_InitTypeDef     DMA_InitStructure;GPIO_InitTypeDef    GPIO_InitStruct; /* ADC1 DeInit */  ADC_DeInit(ADC1);  /* Enable  GPIOA clock */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);                //PA0,PA1/* ADC1 Periph clock enable */RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE); /* DMA1 clock enable */RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1 , ENABLE);  /* Configure PA0,PA1  as analog input */GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;                  //PA0,PA1GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AN;GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL ;GPIO_Init(GPIOA, &GPIO_InitStruct);               // PA0&PA1,ÊäÈëʱ²»ÓÃÉèÖÃËÙÂÊ/* DMA1 Channel1 Config */DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ADC1_DR_Address;DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)RegularConvData_Tab;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);  /* DMA1 Channel1 enable */DMA_Cmd(DMA1_Channel1, ENABLE);  /* ADC DMA request in circular mode */ADC_DMARequestModeConfig(ADC1, ADC_DMAMode_Circular); /* Enable ADC_DMA */ADC_DMACmd(ADC1, ENABLE);   /* Initialize ADC structure */ADC_StructInit(&ADC_InitStructure); /* Configure the ADC1 in continous mode withe a resolutuion equal to 12 bits  */ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;ADC_InitStructure.ADC_ContinuousConvMode = ENABLE; ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;ADC_InitStructure.ADC_ScanDirection = ADC_ScanDirection_Backward;ADC_Init(ADC1, &ADC_InitStructure); /* Convert the ADC1 temperature sensor  with 55.5 Cycles as sampling time */ /* Convert the ADC1 ADC_Channel_0 with 55.5 Cycles as sampling time */ ADC_ChannelConfig(ADC1, ADC_Channel_0 , ADC_SampleTime_55_5Cycles);  /* Convert the ADC1 Vref  with 55.5 Cycles as sampling time */ /* Convert the ADC1 ADC_Channel_1 with 55.5 Cycles as sampling time */ ADC_ChannelConfig(ADC1, ADC_Channel_1 , ADC_SampleTime_55_5Cycles);   /* ADC Calibration */ADC_GetCalibrationFactor(ADC1); /* Enable ADC1 */ADC_Cmd(ADC1, ENABLE);     /* Wait the ADRDY falg */while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_ADRDY));  /* ADC1 regular Software Start Conv */ ADC_StartOfConversion(ADC1);
}

2。读adc 值
void ReadAdcValue(void)
{
/* Test DMA1 TC flag /
while((DMA_GetFlagStatus(DMA1_FLAG_TC1)) == RESET );
/
Clear DMA TC flag /
DMA_ClearFlag(DMA1_FLAG_TC1);
/
Convert temperature sensor voltage value in mv /
// TempSensVoltmv = (uint32_t)((RegularConvData_Tab[0]
3300) / 0xFFF);
AdcChn0Voltmv = (uint32_t)((RegularConvData_Tab[0]* 3300) / 0xFFF);
/* Convert Vref voltage value in mv /
// VrefIntVoltmv = (uint32_t)((RegularConvData_Tab[1]
3300) / 0xFFF);
AdcChn1Voltmv = (uint32_t)((RegularConvData_Tab[1]* 3300) / 0xFFF);
// printf(“AdcChn0Voltmv = %x “,AdcChn0Voltmv);
// printf(”\r\n”);
UART1_SendByte(0x01);
UART1_SendByte(AdcChn0Voltmv&0x00ff); //low
UART1_SendByte((AdcChn0Voltmv>>8)&0x00ff); //hi
UART1_SendByte(0x0D);
UART1_SendByte(0x0A);
// printf(“AdcChn1Voltmv = %x”,AdcChn1Voltmv);
// printf("\r\n");
UART1_SendByte(0x02);
UART1_SendByte(AdcChn1Voltmv&0x00ff); //low
UART1_SendByte((AdcChn1Voltmv>>8)&0x00ff); //hi
UART1_SendByte(0x0D);
UART1_SendByte(0x0A);
}

STM32F0 ADC程序设计相关推荐

  1. STM32F0 ADC学习

    开始时候使用的是stdlib的库,最近发现cube库用的越来越广泛了,遂开始使用cube库来完成ADC的多通道采集实验. ADC 的driver 在STM32F0XX_HAL_DRIVER当中,有st ...

  2. 基于计算机控制的电压跟随器的设计,基于单片机的汽车转弯信号灯控制系统设计...

    <基于单片机的汽车转弯信号灯控制系统设计.doc>由会员分享,可免费在线阅读全文,更多与<基于单片机的汽车转弯信号灯控制系统设计>相关文档资源请在帮帮文库(www.woc88. ...

  3. 嵌入式设计与开发项目-ADC键盘扫描程序设计

    嵌入式设计与开发项目-ADC键盘扫描程序设计 一.实现的功能 二.根据功能实现代码 1.主文件main.c 2.ADC按键程序的头文件"adc.h" 3.ADC按键程序的源文件&q ...

  4. STM32F0 定时器触发ADC,多通道采样、DMA传输数据的配置

    本块代码实现了定时器定时触发ADC,多通道采样,并通过DMA进行数据传输到内存的操作. #include    "adc.h" [cpp] view plaincopy #defi ...

  5. linux 嵌入式汇编 adc,嵌入式Linux ARM汇编(四)——ARM汇编程序设计

    嵌入式Linux ARM汇编(四)--ARM汇编程序设计 汇编程序有顺序.循环.分支.子程序四种结构形式. 一.顺序结构 程序实例: AREA Buf,DATA,READWRITE;定义数据段Buf ...

  6. Σ-Δ型ADC转换原理及程序设计--AD7712

    要理解Σ-Δ型 ADC的工作原理,首先应对以下概念有所了解:①过采样.②噪声成形.③数字滤波和抽取. ①过采样 单音(基频)信号的功率与所有频率的噪声的RMS功率之和的比值就是信号噪声比(SNR).对 ...

  7. STM32F0 休眠模式下 ADC采样失效

    笔者最近在作某汽车上的智能方向盘按键项目,系统要求待机电流小于100uA,同时能检测系统输入电压状态,做到能自检欠压和过压,并通过LIN发送给中控. 故笔者在对输入电压加了一个分压电路来检测,现在客户 ...

  8. AD7760转换原理及采集程序设计 (24位Σ-Δ型ADC)

    1 AD7760(Σ-Δ模数转换器) 1.1 Σ-Δ型ADC的工作原理 的ADC不同,Σ-Δ型ADC不是直接根据采样数据的每一个样值的大小进行量化编码,而是根据前一量值与后一量值的差值即所谓的增量的大 ...

  9. linux下ad数模转换驱动程序设计,iTOP-4412开发板实现3路ADC数模转换驱动例程

    学习下 linux 数模程序驱动的编写,本节我们实现的功能是实现三路 ADC 数模转换. 驱动程序 驱动程序的名字:"itop4412_adc.c". 要想把这个驱动注册到内核,先 ...

最新文章

  1. USEARCH11新功能——OTU表抽平otutab_rare
  2. 搭建yum仓库定制rpm包
  3. ElementUI中el-table设置指定列固定不动,不受滚动条影响
  4. Android 双击和手势的图片缩放
  5. 解决cell循环利用造成的重复勾选
  6. 增加表单的文字段的html的代码是,表单及表单新增元素(示例代码)
  7. 证明3-SAT问题是NP-complete
  8. paip.输出内容替换在Apache 过滤器filter的设置
  9. 【源码】基于MPPT算法的混合风能太阳能系统建模与仿真
  10. GitHub 加速神器, 来了!
  11. 2014 Unity 璀璨星空夜
  12. numpy:数组累乘
  13. Kafka集群的安装和使用
  14. 利用APPium获取自动浏览获取喵币
  15. 玲珑学院OJ 1130 - 喵哈哈村的魔法大师╳灬兲笙疯癫°月【强连通+可相交最小路径覆盖+背包】
  16. 案例|山东省中医院基于ZABBIX构建网络设备监控预警平台
  17. 【Bootstrap4】Bootstrap4 安装使用
  18. 小米手机用什么耳机音质好?发烧级音质蓝牙耳机推荐
  19. 怎么在电脑上登陆多个微信
  20. 微信小程序用定时器实现倒计时效果

热门文章

  1. 进入一个新公司,首先该怎么做?
  2. 新媒体人打开 ChatGPT 的正确姿势
  3. 响应式网页设计(3)
  4. vulnhub:DC1靶机
  5. Java开源生鲜电商平台-订单抽成模块的设计与架构(源码可下载)
  6. 【绘图必备】国际色卡
  7. 《人人都是产品经理》读书笔记 Part 1
  8. 凡人修仙传java安卓_凡人修仙传之七派六宗BT版
  9. iOS网络请求错误nw_proxy_resolver_create_parsed_array PAC evaluation error: NSURLErrorDomain: -1004
  10. 使用中国移动NB-IoT模组M5310-A快速连接到OneNET(LwM2M协议)