完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
读AD时我设置了两个函数如下:
u16 Get_Adc(u8 ch) { //设置转换序列 ADC1->SQR3&=0XFFFFFFE0;//规则序列1 通道ch ADC1->SQR3|=ch; ADC1->CR2|=1<<22; //启动规则转换通道 while(!(ADC1->SR&1<<1));//等待转换结束 return ADC1->DR; //返回adc值 } u16 Get_Adc1(u8 ch) { //设置转换序列 ADC1->SQR3&=0XFFFFFC1F;//规则序列2 通道ch ADC1->SQR3|=ch<<5; ADC1->CR2|=1<<22; //启动规则转换通道 while(!(ADC1->SR&1<<1));//等待转换结束 return ADC1->DR; //返回adc值 }但是在主函数中只能读出Get_Adc(u8 ch)的结果,设置的模式为扫描模式,和连续转换模式,Get_Adc1(u8 ch) 不能读出来求解 。 |
|
相关推荐
7个回答
|
|
是不是必须设置间或模式才能读Get_Adc1(u8 ch) ?
|
|
|
|
这是初始化函数
void Adc_Init(void) { //先初始化IO口 RCC->APB2ENR|=1<<2; //使能PORTA口时钟 GPIOA->CRL&=0XFF000000;//PA0 1 2 3 4 5 anolog输入 //通道10/11设置 RCC->APB2ENR|=1<<9; //ADC1时钟使能 RCC->APB2RSTR|=1<<9; //ADC1复位 RCC->APB2RSTR&=~(1<<9);//复位结束 RCC->CFGR&=~(3<<14); //分频因子清零 //SYSCLK/DIV2=12M ADC时钟设置为12M,ADC最大时钟不能超过14M! //否则将导致ADC准确度下降! RCC->CFGR|=2<<14; ADC1->CR1&=0XF0FFFF; //工作模式清零 ADC1->CR1|=0<<16; //独立工作模式 ADC1->CR1&=1<<8; //扫描模式 ADC1->CR2&=1<<1; //连续转换模式 ADC1->CR2&=~(7<<17); ADC1->CR2|=7<<17; //软件控制转换 ADC1->CR2|=1<<20; //使用用外部触发(SWSTART)!!! 必须使用一个事件来触发 ADC1->CR2&=~(1<<11); //右对齐 ADC1->SQR1&=~(0XF<<20); ADC1->SQR1&=1<<20; //4个转换在规则序列中 也就是只转换规则序列1 //设置通道0~3的采样时间 ADC1->SMPR2&=0XFFFF8F000;//通道0,1,2,3采样时间清空 ADC1->SMPR2|=7<<15; //通道5 239.5周期,提高采样时间可以提高精确度 ADC1->SMPR2|=7<<12; //通道2 239.5周期,提高采样时间可以提高精确度 ADC1->SMPR2|=7<<9; //通道3 239.5周期,提高采样时间可以提高精确度 ADC1->SMPR2|=7<<6; //通道2 239.5周期,提高采样时间可以提高精确度 ADC1->SMPR2|=7<<3; //通道1 239.5周期,提高采样时间可以提高精确度 ADC1->SMPR2|=7<<0; //通道0 239.5周期,提高采样时间可以提高精确度 ADC1->CR2|=1<<0; //开启AD转换器 ADC1->CR2|=1<<3; //使能复位校准 while(ADC1->CR2&1<<3); //等待校准结束 //该位由软件设置并由硬件清除。在校准寄存器被初始化后该位将被清除。 ADC1->CR2|=1<<2; //开启AD校准 while(ADC1->CR2&1<<2); //等待校准结束 //该位由软件设置以开始校准,并在校准结束时由硬件清除 } 麻烦原子哥看一下 |
|
|
|
规则转换序列,不是你随便设置的.
规则通道总共有16个,如果你只有一个规则转换序列(也就是我们的例子),那么只可能转换SQ1的内容. 如果你有2个规则转换序列,那么会转换SQ1和SQ2. 如果有3个转换序列,那么回事SQ1,SQ2,SQ3. 以此类推. 而不能像你这样,憋开SQ1,单独用SQ2. |
|
|
|
主函数中我也用了SQ1,SQ2,而且转换序列设置了两个但还是读不出来SQ2里的值
|
|
|
|
我知道了,还需要设置中断,谢谢原子哥了
|
|
|
|
还是不对,下错程序了,糗了
|
|
|
|
要读2次吧.
|
|
|
|
只有小组成员才能发言,加入小组>>
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
414 浏览 1 评论
273 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
243 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
607 浏览 2 评论
631 浏览 2 评论
1356浏览 9评论
36浏览 3评论
STM32CUBEMX4.22.1在main函数里面添加一行语句就死机的原因?
40浏览 3评论
38浏览 3评论
KEIL MDK为什么无法debug library中的代码?
75浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-25 06:59 , Processed in 0.656529 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号