STM32F1库函数初始化系列:DMA—ADC采集

摘要:
1voidADC_Configure(void)2{3ADC_InitTypeDefADC_InitStructure;4 GPIO_InitTypeDefGPIO_InitStructure;5RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);6  RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA,ENABL
1 void ADC_Configure(void)
2 {
3 ADC_InitTypeDef ADC_InitStructure;  
4   GPIO_InitTypeDef GPIO_InitStructure;
5 RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
6   RCC_AHBPeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);
7 
8    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
9    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN;
10    GPIO_Init(GPIOA, &GPIO_InitStructure);
11     
12     RCC_ADCCLKConfig(RCC_PCLK2_Div4);                                         //配置ADC时钟分频  2,4,6,8
13     ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;                          //独立工作模式        
14     ADC_InitStructure.ADC_ScanConvMode=ENABLE;                                //工作在扫描模式
15     ADC_InitStructure.ADC_ContinuousConvMode=ENABLE;                          //连续模式
16     ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;         //转换由软件触发启动
17     //ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T1_CC1;     //定时器1的捕获比较通道1作为外部触发转换源(T1_2,T1_3,T2_2,T4_4)  
18     //ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_Ext_1T11;   //外部中断通道11的事件作为外部触发转换源
19     ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;                      //ADC数据右对齐
20     ADC_InitStructure.ADC_NbrOfChannel =5;                                    //进行规则转换的ADC通道的数目为2
21     ADC_Init(ADC1,&ADC_InitStructure);
22     ADC_RegularChannelConfig(ADC1,ADC_Channel_2,1,ADC_SampleTime_55Cycles5);   //选择通道2,转换顺序1,采样时间为1.5周期
23      ADC_RegularChannelConfig(ADC1,ADC_Channel_3,2,ADC_SampleTime_55Cycles5);  //选择通道3,转换顺序2,采样时间为1.5周期
24     ADC_RegularChannelConfig(ADC1,ADC_Channel_4,3,ADC_SampleTime_55Cycles5);  //选择通道4,转换顺序3,采样时间为1.5周期
25     ADC_RegularChannelConfig(ADC1,ADC_Channel_5,4,ADC_SampleTime_55Cycles5);  //选择通道5,转换顺序4,采样时间为1.5周期
26     ADC_RegularChannelConfig(ADC1,ADC_Channel_6,5,ADC_SampleTime_55Cycles5);  //选择通道6,转换顺序5,采样时间为1.5周期
27 ADC_DMACmd(ADC1, ENABLE);
28     ADC_Cmd(ADC1,ENABLE);                                                     //使能AD1
29     ADC_ResetCalibration(ADC1);                                               //复位ADC1的校准寄存器
30     ADC_StartCalibration(ADC1);                                                                                                //开始ADC1的校准
31     while(ADC_GetCalibrationStatus(ADC1));                                                                        //等待ADC1校准完成
32     ADC_SoftwareStartConvCmd(ADC1,ENABLE);                                                                        //启动ADC1转换
33 }
34 void DMA_Configure(void)
35 {
36 DMA_InitTypeDef DMA_InitStructure;
37 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);
38     DMA_DeInit(DMA1_Channel1);                                                                                                //复位DMA1通道
39     DMA_InitStructure.DMA_PeripheralBaseAddr=DR_ADDRESS;                                      
40     DMA_InitStructure.DMA_MemoryBaseAddr =(uint32_t)ad_value;                                
41     DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;                                                //外设作为数据传输的来源
42     DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;   
43    DMA_InitStructure.DMA_BufferSize = 5;                                                                        //
44   DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;                    //外设地址不变
45   DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                                        //内存地址递增
46   DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;    //外设数据宽度为16位
47   DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;                //内存数据宽度为16位
48   DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                                                        //循环缓存模式
49   DMA_InitStructure.DMA_Priority = DMA_Priority_High;                                                //高优先级
50   DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;                                                            //没有设置内存到内存的传输
51   DMA_Init(DMA1_Channel1, &DMA_InitStructure);
52 DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);    
53     DMA_Cmd(DMA1_Channel1,ENABLE);                                                                                        //开启DMA1通道传输
54 }

免责声明:文章转载自《STM32F1库函数初始化系列:DMA—ADC采集》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇gulp打包C# 操作系统防火墙下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Qt5.9.1结合REF开发基于chorm的浏览器(二)

将libcef_dll_wrapper编译方式设置为MD 因为使用的Qt是动态链接的,而cef模式使用的是静态链接的方式,所以在使用前需要将cef编译方式改成Multi-thread DLL(/MD),修改路径在在C/C++->Code Generation下的Runtime Library。重新编译后的libcef_dll_wrapper.lib库...

kernel 目录 解析

核心源码的顶层是/usr/src/linux目录,在此目录下你可以看到大量子目录: arch 这个子目录包含了所有体系结构相关的核心代码。它还包含每种支持的体系结构的子目录,如i386。 include  这个目录包括了用来重构核心的大多数include文件。对于每种支持的体系结构分别有一个子目录。此目录中的asm子目录中是对应某种处理器的符号连接,如i...

srand函数

srand函数是随机数发生器的初始化函数。  原型:void srand(unsigned seed);  用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数。如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,...

STM32 OLED屏显示详解

不多废话,先看效果         全家福 观看演示效果: https://www.bilibili.com/video/BV13V411b78V 一、基础认识及引脚介绍 屏幕参数: 尺寸:0.96英寸 分辨率:128*64 驱动芯片:SSD1306 驱动接口协议:SPI 引脚说明: 二、 SSD1306芯片介绍 SSD1306是一款带控制器的用于OL...

9-FreeRTOS API获取任务使用CPU时间

获取CPU时间的API: vTaskGetRunTimeStats() 获取任务运行时间信息,此函数会统计任务的运行时间,并且将统计到的运行时间信息按照表格的形式组织在一起并存放在用户设置的缓冲区里面,缓冲区的首地址通过参数传递给函数 vTaskGetRunTimeStats()。   获取前期准备: (1)开启宏configGENERATE_RUN_TI...

C++11大括号的使用

1、前言 最开始是看到别人的代码,在声明拉姆达函数的时候,将函数体用大括号包裹,返回值作为auto接收,觉得新奇【其实我内心是痛恨这种方式的,让没见过这种写法的人会恍惚一下,真就为了装逼,真就你厉害呗,咱用了多少年的等号,现在又得花时间去学习你的牛逼之处呗】 在C++11中这种方式被称为初始化列表【构造函数里也有个初始化列表。。】【initializer...