完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
小弟最近再写STM32的ADC,看了很多网的例程都是用DMA接数据,但是我想直接用AD读到寄存器,再拿出来处理。 在写程序的时候发现个问题,while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); 这个while循环总是过不去,真心很郁闷……有哪位大神遇到过类似的问题吗? 求帮忙解决下 。 下面附上我的初始化以及读ADC程序 /************************ADC初始化***************************/ void ADC_Config(void) { ADC_InitTypeDef ADC_InitStruct; GPIO_InitTypeDef GPIO_InitStruct; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOC, ENABLE); //使能ADC1时钟 GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN; //配置对应的ADC通道IO口 GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3; GPIO_Init(GPIOC,&GPIO_InitStruct); ADC_DeInit(ADC1); //将ADC所有寄存器值恢复默认 ADC_InitStruct.ADC_Mode = ADC_Mode_Independent; //ADC1与ADC2工作在独立工作模式 ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right; //ADC数据右对齐 ADC_InitStruct.ADC_ContinuousConvMode = ENABLE; //DISABLE工作在单次模式;ENABLE工作在连续模式 ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; //定义触发方式,此处为软件触发 ADC_InitStruct.ADC_NbrOfChannel = 1; //ADC通道数目 ADC_InitStruct.ADC_ScanConvMode = ENABLE; //ADC工作在单通道还是多通道模式 ADC_ITConfig(ADC1,ADC_IT_EOC,DISABLE); ADC_ClearFlag(ADC1,ADC_FLAG_EOC); ADC_Init(ADC1,&ADC_InitStruct); /***************设置指定ADC的规则组通道,设置它们的转化顺序和采样时间****************/ /***************使能ADC的通道13,采样序列号为1,采样周期为71.5周期*******************/ ADC_RegularChannelConfig(ADC1,ADC_Channel_11,1,ADC_SampleTime_71Cycles5); ADC_Cmd(ADC1,ENABLE); ADC_ResetCalibration(ADC1); //重置ADC的校准寄存器 while(ADC_GetResetCalibrationStatus(ADC1)); //获取ADC重置校准寄存器状态,直到校准寄存器重设完成 ADC_StartCalibration(ADC1); //开始指定ADC的校准 while(ADC_GetCalibrationStatus(ADC1)); //获取指定ADC的校准程序,直到校准完成 ADC_SoftwareStartConvCmd(ADC1, ENABLE); //使能ADC1的软件转换启动功能 } /***********读ADC程序*********************/ void Read_ADC(void) { unsigned short result = 0; unsigned short id; unsigned char a,b,c,d,i; for(i=0;i<1;i++) { ADC_SoftwareStartConvCmd(ADC1,ENABLE); //启动ADC1转换 /* do{ id = ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC); //读取转换标志 }while(!id);*/ while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); ADC_SoftwareStartConvCmd(ADC1,DISABLE); result += ADC_GetConversionValue(ADC1); Delay_ARMJISHU(8000000); } result = result>>3; //取8次平均值 result = (unsigned int)(((unsigned long)result)*3300>>12); //把采集到的数值转换成电压数据 a = result / 1000; b = (result - a*1000)/100; c = (result - a*1000 - b*100)/10; d = result - a*1000 - b*100 - c*10; while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, 0x56); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, 0x3d); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, a+48); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1,0x2e); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, b+48); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, c+48); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, d+48); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1,0x56); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1, 0x0d); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); USART_SendData(USART1,0x0a); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); } |
|
相关推荐
3个回答
|
|
|
|
|
|
|
|
|
|
没看楼上的内容,不好意思哈
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1185 浏览 3 评论
876 浏览 0 评论
嵌入式开发 Win11安装ST-Link 提示 设备描述符请求失败 怎么处理?
1000 浏览 0 评论
1289 浏览 1 评论
求助:STM32F407串口控制外设无效,用电脑串口助手有效
2173 浏览 3 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-8-7 18:12 , Processed in 0.772322 second(s), Total 48, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号