http://cache.baiducontent.com/c?m=9d78d513d98207f04fece47f0d01d7174a02d1743ca6c76409c3e03984145b563710f4bb56644b5bc7823c390ef50f1aa8e737012a1e65f2dedf883d80f9c57478de6323706bd71c4dce5ff58b11769737902cefaa18ecb9e732e5adc5d3a95744ca245f3cdfae&p=8b2a975fca9d5bff57ee947a5b47cc&newp=9133c64ad49614f543bd9b7d0d12cc231610db2151d2d401298ffe0cc4241a1a1a3aecbf21231a01d0ce786c0aaa4e57e1f03772350034f1f689df08d2ecce7e7add7d2f&user=baidu&fm=sc&query=stm32+adc+%CD%AC%B2%BD%A1%A1tim&qid=809b98c2000086f6&p1=4

void ADC_DMA_Config(void)
{
 DMA_InitTypeDef DMA_InitStructure;              
 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
 DMA_DeInit(DMA1_Channel1);  //DMA复位
 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR;  //外设的地址
 DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue;  //存储区的起始地址
 DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;  //DMA传输方向到内部存储区
 DMA_InitStructure.DMA_BufferSize = ADC_NUM;  //ADC转换的次数
 DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                 //外设地址不变
 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                          //内存地址递增
 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;  //ADC数据长度为16位
 DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;  //存储区数据长度为16位
 DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;  //DMA工作方式为循环工作
 DMA_InitStructure.DMA_Priority = DMA_Priority_High;  //DMA 优先级高
 DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;  //存储器对存储器关闭
 DMA_Init(DMA1_Channel1, &DMA_InitStructure);  //DMA通道初始化
 DMA_Cmd(DMA1_Channel1,ENABLE);  //DMA使能
}

void ADC_START(void)
 {
    ADC1, ENABLE);    //ADC的DMA功能开启
   ADC1);  //ADC_GetResetCalibrationStatus(ADC等待完成
   ADC1);                                                    //开始校准
   while(ADC1));  //ADC_SoftwareStartConvCmd(ADC的软件转换启动功能
  }
void ADC1_Config(void)
{
 GPIO_InitTypeDef GPIO_InitStructure;
 ADC_InitStructure;     
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);                         ////PA4567时钟使能
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);                         ////PC45时钟使能
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);                         ////PB01时钟使能     
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7; ////初始化PA4567为模拟输入
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //管脚设为模拟输入
 GPIO_Init(GPIOA, &GPIO_InitStructure);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5;     ////初始化PC45为模拟输入
 GPIO_Init(GPIOC, &GPIO_InitStructure);
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1; ////初始化PB0 1为模拟输入
 GPIO_Init(GPIOB, &GPIO_InitStructure);
 ADC设置
  
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC时钟
 ADC_Mode = ADC1和ADC2工作在独立模式 
 ADC_ScanConvMode = ENABLE;                                        //多通道
 ///ADC_ContinuousConvMode = ENABLE;                               //连续转换
 ADC_ContinuousConvMode = DISABLE;                              //连续转换
 ADC_ExternalTrigConv = ADC_ExternalTrigConv_T2_CC2;
 ///ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;             //软件启动转换
 ADC_DataAlign = ADC_DataAlign_Right;                             //转换结果右对齐
 ADC_NbrOfChannel = ADC_NUM;                                      //通道数目
 ADC1, &ADC_InitStructure);  
/// ADC_TempSensorVrefintCmd(ENABLE);                                            //使能片内温度传感器  
/// RCC_ADCCLKConfig(RCC_PCLK2_Div6);                                            //PCLK 6分频
 RCC_ADCCLKConfig(RCC_PCLK2_Div8);                                               //ADC_RegularChannelConfig(ADC_Channel_4,  1, ADC_SampleTime_239Cycles5);  //通道4,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道5,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道6,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道7,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道8,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道9,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道14,转换次序,转换时间
 ADC1, ADC_SampleTime_239Cycles5);  //通道15,转换次序,转换时间
// ADC1, ADC_SampleTime_239Cycles5);
 ADC_START();
}
/*
 系统时钟为72MHZ,FPCLK2=72 000 000HZ
 对50HZ交流信号进行采集,一个周期为20MS, 采集8路信号,每个信号采用64次,
 20*1000us/64=312us,即每隔312us要启动一次采集信号(需要采集8路信号),采集64次后正好是一个周期;
 采集一次8路的时间:(239.5+12.5)*8/9M =224us

*/
 void TIM2_Configuration(void) 
 { 
  TIM_TimeBaseStructure; 
  TIM_OCInitStructure;  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); 
  TIM_Period    = 312;                             //设置一个周期0.312ms 
  TIM_Prescaler = 71;                           //系统主频72M,这里分频72,相当于1000K的定时器2时钟 
  TIM_ClockDivision = 0x0; 
  TIM_CounterMode = TIM_CounterMode_Up;          /////
  TIM2, & TIM_TimeBaseStructure); 
  TIM_OCMode = TIM_OCMode_PWM1;                     //下面详细说明  
  TIM_OutputState = TIM_OutputState_Disable; 
  TIM_Pulse = 20; /////
  TIM_OCPolarity = TIM_OCPolarity_Low;              //如果是PWM1要为Low,PWM2则为High
  TIM2, & TIM_OCInitStructure);    
  TIM2, ENABLE);   
  TIM2); 
  TIM2, TIM_OCPreload_Enable); 
  TIM2, DISABLE); 
  }

stm32之TIM+ADC+DMA采集50HZ交流信号的更多相关文章

  1. stm32CubeMx 实现单通道ADC DMA采集

    今天要做的是ADC单通道DMA采集实验 MCU : STM32F429 开发工具:STM32CubeMx 版本号 5.0.0 实验目的:实现ADC1 13通道 DMA采集 一 :简介 首先,我们来看一 ...

  2. STM32—ADC多通道采集电压

    文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍: ...

  3. STM32定时器触发ADC多通道连续采样,DMA缓存结果

    STM32的ADC使用非常灵活,采样触发方面:既支持软件触发,定时器或其他硬件电路自动触发,也支持转换完成后自动触发下一通道/轮转换.转换结果存储方面:既支持软件读取和转存,也支持DMA自动存储转换结 ...

  4. STM32 F4 ADC DMA Temperature Sensor

    STM32 F4 ADC DMA Temperature Sensor Goal: detecting temperature variations using a temperature senso ...

  5. stm32 ADC模数转换 ADC多通道 ADC DMA

    通过调节电位器,改变AD转换值和电压值 STM32F1 ADC 配置步骤 1.使能GPIO时钟和ADC时钟 2.配置引脚模式为模拟输入 3.配置ADC的分频因子 4.初始化ADC参数,ADC_Init ...

  6. 1--STM32 ADC1与ADC2 16通道DMA采集笔记(原创)

    最近在搞ADC,网上还是很多资源的,以下为参考链接:1.对STM32 ADC单次转换模式 连续转换模式 扫描模式的理解:https://www.cnblogs.com/zhanghankui/p/51 ...

  7. 第30章 ADC—电压采集—零死角玩转STM32-F429系列

    第30章     ADC—电压采集 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...

  8. STM32L0开发——ADC多通道采集,IDE和IAR开发注意事项

    keil开发L0系列是免费的,官方提供许可的.因此建议Keil开发,L011F3由于flash只有8K,因此不建议HAL库,建议使用cubemx+LL(或snippets库).0.起初,可以参考官方库 ...

  9. STM32基础分析——USART的DMA模式

    有关USART的DMA传输模式,其基本的概念和配置,网上有很多博客和教程都有,这里不再赘述,只是记录一下比较容易忽视而造成调试不通的问题. 1. 串口发送和接收分属两个DMA通道 一般方式操作串口时, ...

随机推荐

  1. BZOJ4888 [Tjoi2017]异或和 FFT或树状数组+二进制拆位

    题面 戳这里 简要题解 做法一 因为所有数的和才100w,所以我们可以直接求出所有区间和. 直接把前缀和存到一个权值数组,再倒着存一遍,大力卷积一波. 这样做在bzoj目前还过不了,但是luogu开O ...

  2. 洛谷P1198 [JSOI2008]最大数(BZOJ.1012 )

    To 洛谷.1198 最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当 ...

  3. 潭州课堂25班:Ph201805201 并发(进程,线程)二 第十二课 (课堂笔记

    线程与进程的其他相关操作 import threading # 线程 import multiprocessing # 进程 import socket import time def wo(): g ...

  4. 20172309 《Java软件结构与数据结构》实验三报告

    课程:<程序设计与数据结构(下)> 班级:1723 姓名: 王志伟 学号:20172309 实验教师:王志强老师 实验日期:2018年11月2日 必修/选修: 必修 实验内容: 实验一: ...

  5. adblock 下载地址

    addblock 的作用: 防止追踪.恶意域名,过滤横幅广告.弹窗广告以及视频广告.   用以支持网站的非侵入式广告将不会被屏蔽 下载地址:https://pan.baidu.com/share/li ...

  6. Matplotlib新手上路(上)

    matplotlib是python里用于绘图的专用包,功能十分强大.下面介绍一些最基本的用法: 一.最基本的划线 先来一个简单的示例,代码如下,已经加了注释: import matplotlib.py ...

  7. CSS 布局整理

    1.css垂直水平居中 效果: HTML代码: <div id="container"> <div id="center-div">&l ...

  8. 微软BI 之SSIS 系列 - 在 SSIS 中将指定目录下的所有文件分类输出到不同文件夹

    开篇介绍 比如有这样的一个需求,旧的一个业务系统通常将产出的文件输出到同一个指定的目录下的不同子目录,输出的文件类型有 XML,EXCEL, TXT 这些不同后缀的文件.现在需要在 SSIS 中将它们 ...

  9. getting-started-with-mqtt

    来自:https://dzone.com/refcardz/getting-started-with-mqtt SECTION 1 Why MQTT? The Internet of Things ( ...

  10. 【PMP】项目采购管理~重点知识

    1.合同的类型与区别 固定总价(FFP):大多数买方都喜欢这种合同,因为货物的采购价格在一开始就已确定,并且不允许改变(除非工作范围发生变更) 总价加激励费用(FPIF):这种总价合同给买方和卖方提供 ...