STM32_ADC多通道转换实例(6页).doc
《STM32_ADC多通道转换实例(6页).doc》由会员分享,可在线阅读,更多相关《STM32_ADC多通道转换实例(6页).doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-STM32_ADC多通道转换实例-第 6 页STM32 ADC多通道转换描述:用ADC连续采集11路模拟信号,并由DMA传输到内存。ADC配置为扫描并且连续转换模式,ADC的时钟配置为12MHZ。在每次转换结束后,由DMA循环将转换的数据传输到内存中。ADC可以连续采集N次求平均值。最后通过串口传输出最后转换的结果。程序如下:#include stm32f10x.h /这个头文件包括STM32F10x所有外围寄存器、位、内存映射的定义#include eval.h /头文件(包括串口、按键、LED的函数声明)#include SysTickDelay.h #include UART_INTE
2、RFACE.h#include #define N 50 /每通道采50次#define M 12 /为12个通道vu16 AD_ValueNM; /用来存放ADC转换结果,也是DMA的目标地址vu16 After_filterM; /用来存放求平均值之后的结果int i;/*GPIO管脚的配置选用ADC的通道0 1 2 8 9 10 11 12 13 14 15,分别对应的管脚为PA0 PA1 PA2 PB0 PB1 PC0 PC1 PC2 PC3 PC4 PC5串口使用USART1其中TX为PA9,RX为PA10 */void GPIO_Configuration(void)GPIO_In
3、itTypeDef GPIO_InitStructure;/* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; /因为USART1管脚是以复用的形式接到GPIO口上的,所以使用复用推挽式输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitSt
4、ructure);/* Configure USART1 Rx (PA.10) as input floating */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOA, &GPIO_InitStructure);/PA0/1/2 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0| GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;GPIO_InitStr
5、ucture.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚GPIO_Init(GPIOA, &GPIO_InitStructure);/PB0/1 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚GPIO_Init(GPIOB, &GPIO_InitStructure);/PC0/1/2/3/4/5 作为模拟通道输入引脚 GPIO_InitStructure.GPIO_Pin = GPIO_P
6、in_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;/模拟输入引脚GPIO_Init(GPIOC, &GPIO_InitStructure);/*配置系统时钟,使能各外设时钟*/void RCC_Configuration(void) ErrorStatus HSEStartUpStatus; RCC_DeInit(); /RCC 系统复位 RCC_HSEConfig(RCC_HSE_ON); /开启HSE HSEStartUpStatu
7、s = RCC_WaitForHSEStartUp(); /等待HSE准备好 if(HSEStartUpStatus = SUCCESS) FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /Enable Prefetch Buffer FLASH_SetLatency(FLASH_Latency_2); /Set 2 Latency cycles RCC_HCLKConfig(RCC_SYSCLK_Div1); /AHB clock = SYSCLK RCC_PCLK2Config(RCC_HCLK_Div1); /APB2 cloc
8、k = HCLK RCC_PCLK1Config(RCC_HCLK_Div2); /APB1 clock = HCLK/2 RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_6); /PLLCLK = 12MHz * 6 = 72 MHz RCC_PLLCmd(ENABLE); /Enable PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /Wait till PLL is ready RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /Selec
9、t PLL as system clock source while(RCC_GetSYSCLKSource() != 0x08); /Wait till PLL is used as system clock source /*使能各个外设时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC |RCC_APB2Periph_ADC1 | RCC_APB2Periph_AFIO |RCC_APB2Periph_USART1, ENABLE ); /使能ADC1通道时
10、钟,各个管脚时钟/* Configure ADCCLK such as ADCCLK = PCLK2/6 */ RCC_ADCCLKConfig(RCC_PCLK2_Div6); /72M/6=12,ADC最大时间不能超过14MRCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);/使能DMA传输/*配置ADC1*/void ADC1_Configuration(void) ADC_InitTypeDef ADC_InitStructure;ADC_DeInit(ADC1); /将外设 ADC1 的全部寄存器重设为缺省值/* ADC1 config
11、uration -*/ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;/ADC工作模式:ADC1和ADC2工作在独立模式ADC_InitStructure.ADC_ScanConvMode =ENABLE;/模数转换工作在扫描模式ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;/模数转换工作在连续转换模式ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;/外部触发转换关闭ADC_InitStructure.A
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- STM32_ADC 通道 转换 实例
限制150内