基于STM32单片机ADC连续采集和DMA循环转换.doc
《基于STM32单片机ADC连续采集和DMA循环转换.doc》由会员分享,可在线阅读,更多相关《基于STM32单片机ADC连续采集和DMA循环转换.doc(8页珍藏版)》请在三一文库上搜索。
1、基于STM32单片机ADC连续采集和DMA循环转换描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。在每次转换结束后,由DMA循环将转换的数据传输到内存中。ADC可以连续采集N次求平均值。最后通过串口传输出最后转换的结果。程序如下:i nclude “stm32f10x.h” /这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义i nclude “eval.h” /头文件(包括串口、按键、LED的函数声明)i nclude “SysTickDelay.h”i nclude “UART_INTERFACE.
2、h”i nclude#define N 50 /每通道采50次#define M 12 /为12个通道vu16 AD_ValueNM; /用来存放ADC转换结果,也是DMA的目标地址vu16 After_filterM; /用来存放求平均值之后的结果int i;void GPIO_ConfiguraTIon(void)GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /因为USART1管脚是以复用
3、的形式接到GPIO口上的,所以使用复用推挽式输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, /PA0/1/2 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO
4、_InitStructure.GPIO_Mode = GPIO_Mode_AIN; /模拟输入引脚GPIO_Init(GPIOA, /PB0/1 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; /模拟输入引脚GPIO_Init(GPIOB, /PC0/1/2/3/4/5 作为模拟通道输入引脚GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pi
5、n_3|GPIO_Pin_4|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; /模拟输入引脚GPIO_Init(GPIOC, void RCC_ConfiguraTIon(void)ErrorStatus HSEStartUpStatus;RCC_DeInit(); /RCC 系统复位RCC_HSEConfig(RCC_HSE_ON); /开启HSEHSEStartUpStatus = RCC_WaitForHSEStartUp(); /等待HSE准备好if(HSEStartUpStatus = SUCCESS)FLASH_Pr
6、efetchBufferCmd(FLASH_PrefetchBuffer_Enable); /Enable Prefetch BufferFLASH_SetLatency(FLASH_Latency_2); /Set 2 Latency cyclesRCC_HCLKConfig(RCC_SYSCLK_Div1); /AHB clock = SYSCLKRCC_PCLK2Config(RCC_HCLK_Div1); /APB2 clock = HCLKRCC_PCLK1Config(RCC_HCLK_Div2); /APB1 clock = HCLK/2RCC_PLLConfig(RCC_PLL
7、Source_HSE_Div1, RCC_PLLMul_6); /PLLCLK = 12MHz * 6 = 72 MHzRCC_PLLCmd(ENABLE); /Enable PLLwhile(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /Wait TIll PLL is readyRCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /Select PLL as system clock sourcewhile(RCC_GetSYSCLKSource() != 0x08); /Wait till PLL is us
8、ed as system clock sourceRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 | RCC_APB2Periph_AFIO |RCC_APB2Periph_USART1, ENABLE ); /使能ADC1通道时钟,各个管脚时钟RCC_ADCCLKConfig(RCC_PCLK2_Div6); /72M/6=12,ADC最大时间不能超过14MRCC_AHBPeriphClockCmd(RCC_AHBPeriph
9、_DMA1, ENABLE); /使能DMA传输void ADC1_Configuration(void)ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1); /将外设 ADC1 的全部寄存器重设为缺省值ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /ADC工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode =ENABLE; /模数转换工作在扫描模式ADC_InitStructure.ADC_ContinuousConvMode
10、= ENABLE; /模数转换工作在连续转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /外部触发转换关闭ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; /ADC数据右对齐ADC_InitStructure.ADC_NbrOfChannel = M; /顺序进行规则转换的ADC通道的数目ADC_Init(ADC1, /根据ADC_InitStruct中指定的参数初始化外设ADCx的寄存器/设置指定ADC的规则组通道,设置它们的转化顺序和采
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 单片机 ADC 连续 采集 DMA 循环 转换
链接地址:https://www.31doc.com/p-3412100.html