资源预览内容
第1页 / 共9页
第2页 / 共9页
第3页 / 共9页
第4页 / 共9页
第5页 / 共9页
第6页 / 共9页
第7页 / 共9页
第8页 / 共9页
第9页 / 共9页
亲,该文档总共9页全部预览完了,如果喜欢就下载吧!
资源描述
stm32stm32 ADCADC 双通道双通道+DMA+DMA+定时器定时器 1sDMA1sDMA 串口输出串口输出1.void ADC_Configuration()ADC_InitTypeDef ADC_InitStructure;ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; /独立模式 ADC_InitStructure.ADC_ScanConvMode =ENABLE; /扫描转换模式ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; /连续转换 ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; /转换不受外界决定 ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right; /右对齐 ADC_InitStructure.ADC_NbrOfChannel =2; /2 个通道ADC_Init(ADC1, ADC_RegularChannelConfig(ADC1,ADC_Channel_15, 1,ADC_SampleTime_239Cycles5); /通道 15,因为模拟输入在 PC5上,采样时间为 71.5 周期,1 代表规则通道第 1 个这个 1 是啥意思我不太清楚只有是 1 的时候我的 ADC 才正常。 ADC_RegularChannelConfig(ADC1,ADC_Channel_16, 2,ADC_SampleTime_239Cycles5);/内部温度传感器,接 16 通道,两个采样周期要相同,不然不对称ADC_TempSensorVrefintCmd(ENABLE);/*使能内部温度传感器和参考电压*ADC_DMACmd(ADC1,ENABLE); /*将 ADC1 与 DMA关联*ADC_Cmd (ADC1,ENABLE); /使能或者失能指定的ADC ADC_ResetCalibration(ADC1);/* Enable ADC1 reset calibaration register */ while(ADC_GetResetCalibrationStatus(ADC1);/* Check the end of ADC1 reset calibration register */ADC_StartCalibration(ADC1); /* Start ADC1 calibaration */while(ADC_GetCalibrationStatus(ADC1); /* Check the end of ADC1 calibration */ ADC_SoftwareStartConvCmd(ADC1,ENABLE);/*启动ADC 转换 移到 DMA_Configuration 中*2.RCC_ADCCLKConfig(RCC_PCLK2_Div6);/配置 ADC 时钟=PCLK2/6=12MHzRCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);3.GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;GPIO_Init(GPIOC, 4.void DMA_Configuration()DMA_InitTypeDef DMA_InitStructure;DMA_DeInit(DMA1_Channel1);DMA_InitStructure.DMA_PeripheralBaseAddr = 0x4001244C; /ADC1 的 DR 地址DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) 不加/外设向内存传数据DMA_InitStructure.DMA_BufferSize = N; /DMA 缓存大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /目标内存地址自动后移DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; /外设地址 ADC 不用后移DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;/DMA 传送数据尺寸 16 位DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;/常用循环缓存模式DMA_InitStructure.DMA_Priority = DMA_Priority_High;DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;/禁止内存到内存模式DMA_Init(DMA1_Channel1, /* Enable DMA1 channel 1 */DMA_Cmd(DMA1_Channel1, ENABLE);ADC_SoftwareStartConvCmd(ADC1,ENABLE);/*启动ADC 转换 移到这里了*5.全局变量:#define N 20unsigned short ADC_ConvertedValueN;6.main 中 DMA 要在 ADC 配置之后u8 i=0;u32 AD_sum=0;float SOR_sum=0;while(1)for(i=0;iN;+i)AD_sum+=ADC_ConvertedValuei;+i;SOR_sum+=ADC_ConvertedValuei;printf(“AD Value = 0x%04Xn“,AD_sum/10);printf(“SOR_Value = %0.2fn“,( 1.43-(SOR_sum/10)*3.3/4095)*1000/4.3+25 );printf(“=n“);Delay(0xFFFFFF);AD_sum=0;SOR_sum=0;2.void TIMER_Configuration()TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_DeInit(TIM2); /重新将 Timer 设置为缺省值TIM_InternalClockConfig(TIM2);/采用内部时钟给 TIM2 提供时钟源TIM_TimeBaseStructure.TIM_Prescaler = 36000 - 1; /预分频系数为 36000-1,这样计数器时钟为 72MHz/36000 = 2kHzTIM_TimeBaseStructure.TIM_ClockDivision = 0; /设置时钟分割TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;/设置计数器模式为向上计数模式TIM_TimeBaseStructure.TIM_Period = 2000 - 1; /设置计数溢出大小,每计 2000 个数就产生一个更新事件TIM_TimeBaseInit(TIM2, /将配置应用到 TIM2 中TIM_ClearFlag(TIM2, TIM_FLAG_Update); /清除溢出中断标志TIM_ARRPreloadConfig(TIM2, DISABLE); /禁止 ARR 预装载缓冲器TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);/开启 TIM2 的中断TIM_Cmd(TIM2,ENABLE); /开启定时器 23.void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;/* Configure the NVIC Preemption Priority Bits */ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);#ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endifNVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn ; /选择TIM2 的中断通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /响应式中断优先级设置为 0NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; /使能中断NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(4.void TIM2_IRQHandler()DMA_InitTypeDef DMA_InitStructure;DMA_DeInit(DMA1_Channel4);DMA_InitStructure.DMA_PeripheralBaseAddr = 0x40013804; /USART1 的 DR 地址DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;/外设向内存传数据DMA_InitStructure.DMA_BufferSize = 8; /DMA 缓存大小DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; /目标内存地址自动后移DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;/DMA 传送数据尺寸 16 位DMA_InitStructur
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号