stm32之TIM+ADC+DMA采集50HZ交流信号
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交流信号的更多相关文章
- stm32CubeMx 实现单通道ADC DMA采集
今天要做的是ADC单通道DMA采集实验 MCU : STM32F429 开发工具:STM32CubeMx 版本号 5.0.0 实验目的:实现ADC1 13通道 DMA采集 一 :简介 首先,我们来看一 ...
- STM32—ADC多通道采集电压
文章目录 ADC详解 程序说明 函数主体 引脚配置 ADC和DMA配置 主函数 ADC详解 前面的博客中详细介绍了STM32中ADC的相关信息,这篇博客是对ADC内容的一个总结提升,ADC的详细介绍: ...
- STM32定时器触发ADC多通道连续采样,DMA缓存结果
STM32的ADC使用非常灵活,采样触发方面:既支持软件触发,定时器或其他硬件电路自动触发,也支持转换完成后自动触发下一通道/轮转换.转换结果存储方面:既支持软件读取和转存,也支持DMA自动存储转换结 ...
- STM32 F4 ADC DMA Temperature Sensor
STM32 F4 ADC DMA Temperature Sensor Goal: detecting temperature variations using a temperature senso ...
- stm32 ADC模数转换 ADC多通道 ADC DMA
通过调节电位器,改变AD转换值和电压值 STM32F1 ADC 配置步骤 1.使能GPIO时钟和ADC时钟 2.配置引脚模式为模拟输入 3.配置ADC的分频因子 4.初始化ADC参数,ADC_Init ...
- 1--STM32 ADC1与ADC2 16通道DMA采集笔记(原创)
最近在搞ADC,网上还是很多资源的,以下为参考链接:1.对STM32 ADC单次转换模式 连续转换模式 扫描模式的理解:https://www.cnblogs.com/zhanghankui/p/51 ...
- 第30章 ADC—电压采集—零死角玩转STM32-F429系列
第30章 ADC—电压采集 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fireg ...
- STM32L0开发——ADC多通道采集,IDE和IAR开发注意事项
keil开发L0系列是免费的,官方提供许可的.因此建议Keil开发,L011F3由于flash只有8K,因此不建议HAL库,建议使用cubemx+LL(或snippets库).0.起初,可以参考官方库 ...
- STM32基础分析——USART的DMA模式
有关USART的DMA传输模式,其基本的概念和配置,网上有很多博客和教程都有,这里不再赘述,只是记录一下比较容易忽视而造成调试不通的问题. 1. 串口发送和接收分属两个DMA通道 一般方式操作串口时, ...
随机推荐
- reactNative环境搭建+打包+部分报错总结
个人搭建记录+个人收集: 多些真诚,少些坑. 排版书写过程可能不够详细,还望见谅. 详细见:http://files.cnblogs.com/files/chunlei36/reactNative%E ...
- python-线程的暂停, 恢复, 退出
我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦s ...
- 更新 是 可用的 针对 安卓 软件开发包和工具 Updates are available for android software development packages and tools
作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com 更新 是 可用的 针对 安卓 软件开发包和工 ...
- USBWriter之后恢复磁盘大小
USBWriter之后恢复磁盘大小的方法: 1,cmd 2,diskpart 3,list disk 4,select disk *(*你的U盘代号) (e.g:U盘为磁盘 2 ,则代号为2 ,使用命 ...
- Qt打包成单独可执行的exe文件
1.将图标newIco.ico复制到工程目录下. 2.在工程目录下新建空白txt文档,添加以下内容. IDI_ICON1 ICON DISCARDABLE "newIco.ico" ...
- Oozie分布式工作流——Action节点
前篇讲述了下什么是流控制节点,本篇继续来说一下什么是 Action Nodes操作节点.Action节点有一些比较通用的特性: Action节点是远程的 所有oozie创建的计算和处理任务都是异步的, ...
- 常见爬虫/BOT 对抗技术简介(二)
上一篇文章分别从网络协议,Robots文件,JS渲染,行为分析等多方面讲了些“反爬虫”,“反-反爬虫”技术. 点击查看:<常见爬虫/BOT 对抗技术简介(一)> 本文将主要介绍各种IP地址 ...
- ConcurrentHashMap 的实现原理
概述 我们在之前的博文中了解到关于 HashMap 和 Hashtable 这两种集合.其中 HashMap 是非线程安全的,当我们只有一个线程在使用 HashMap 的时候,自然不会有问题,但如果涉 ...
- phpstorm10使用服务激活
现在官网已经更新到WebStorm 11.PhpStorm 10,找到一个很便捷的方法,不需要注册码了.安装完成,打开软件看到输入注册码界面的时候,切换到第二个选项,输入:http://idea.la ...
- MySQL查看数据库表容量大小
本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用. 1.查看所有数据库容量大小 select table_schema as '数据库', sum(table ...