完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
为什么我的采样老是有问题啊?求大神帮忙看看程序
用的是循环方式采样adc两个通道的值(10跟12), 通过dma来传输两个值。最后通过串口打印出来 void ADC_Configuration(void) { ADC_InitTypeDef ADC_InitStructure; RCC_ADCCLKConfig(RCC_PCLK2_Div6); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); ADC_DeInit(ADC1); ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//ADC1 工作在独立模式 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数据右对 ADC_InitStructure.ADC_NbrOfChannel=2; //the number of the channel is 2, ADC_Init(ADC1, &ADC_InitStructure);//init dac1 ADC_DMACmd(ADC1, ENABLE); ADC_RegularChannelConfig(ADC1,ADC_Channel_10,1,ADC_SampleTime_239Cycles5); ADC_RegularChannelConfig(ADC1,ADC_Channel_12,2,ADC_SampleTime_239Cycles5); ADC_Cmd(ADC1,ENABLE);//使能adc1 ADC_ResetCalibration(ADC1); // 重置adc校准寄存器 while(ADC_GetResetCalibrationStatus(ADC1)==SET);//得到重置校准寄存器状态 ADC_StartCalibration(ADC1); // 开始校准 while(ADC_GetCalibrationStatus(ADC1)); // 得到校准的寄存器的状态 ADC_SoftwareStartConvCmd(ADC1,ENABLE); //启动软件转换 } void DMA_Configuration(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);//打开DMA1的时钟 DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr=(u32)0x4001244C; DMA_InitStructure.DMA_MemoryBaseAddr=(u32)&ADC1_ConvertValue; DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//配置为外设作为数据的源头 DMA_InitStructure.DMA_BufferSize=2;//配置DMA通道的DMA缓存的值.感觉这里有问题,什么是dma缓存?如何确定大小? DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设地址寄存器不变 DMA_InitStructure.DMA_MemoryInc=DMA_PeripheralInc_Enable;//内存地址寄存器不变 DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_HalfWord; //这里跟寄存器的大小有关系,是16位,故为半字 DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode=DMA_Mode_Circular;//循环缓存模式 DMA_InitStructure.DMA_Priority=DMA_Priority_Medium;//中优先级 DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//不设置为内存到内存的传输,外设到内存 DMA_Init(DMA1_Channel1, &DMA_InitStructure); //初始化通道1 DMA_Cmd(DMA1_Channel1,ENABLE);//使能DMA1通道1 } RCC_Configuration(); GPIO_Configuration(); Usart_Configuration(); TIM4_Configuration(); DMA_Configuration(); NVIC_Configuration(); ADC_Configuration();//这部分的配置应该没有问题,问题可能出在主函数和adc和dma的配置中 printf("rn"); GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)0xff); while(1) { printf("%d %d",ADC1_ConvertValue[0],ADC1_ConvertValue[1]); printf("rn"); delay_ms(1000);//延时1s } } |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
769 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2583 浏览 1 评论
849 浏览 0 评论
1641 浏览 1 评论
2551 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 20:08 , Processed in 0.549570 second(s), Total 72, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号