一个关于单片机AD转换的问题
采用的是ST的单片机,H/L_PWR_DET就是AD口。这个口每次只采样一次问题1:AD转换的时候经常采到一个很大的值,值是固定的255,采到的时间不固定,比较奇怪问题2...
采用的是ST的单片机,H/L_PWR_DET就是AD口。这个口每次只采样一次
问题1:AD转换的时候经常采到一个很大的值,值是固定的255,采到的时间不固定,比较奇怪
问题2:AD转换的时候,连续采样,第一个值比较大,不管如何延时,都是如此。只有这一个端口如此
目前1的处理办法:如果采到的值是255,把它丢掉。
目前2的处理办法:采3个值,1,2丢掉,只要第3个。
转换程序如下:
uchar ADC_DirectGetAdcValue(uchar cCh){ uchar re,i; ADC_TDRL = 0xFB; ADC_CSR = (cCh)&0x0f; ADC_CR1_ADON = 1; for(i = 0;i <10;i++) { CLEAR_WATCHDOG; } ADC_CR1_ADON = 1; while(!(ADC_CSR&0x80)); re = ADC_DRH; i = ADC_DRL; return re;}
for循环里面的值越大,255出现我机率越大。奇怪!!!!
问题已经搞定。
1,与中断无关
2,电压不波动
3,其实是 255 的值出现,是正常的,去它去掉就好
4,其实端口采样到的第一个值是不能要的 展开
问题1:AD转换的时候经常采到一个很大的值,值是固定的255,采到的时间不固定,比较奇怪
问题2:AD转换的时候,连续采样,第一个值比较大,不管如何延时,都是如此。只有这一个端口如此
目前1的处理办法:如果采到的值是255,把它丢掉。
目前2的处理办法:采3个值,1,2丢掉,只要第3个。
转换程序如下:
uchar ADC_DirectGetAdcValue(uchar cCh){ uchar re,i; ADC_TDRL = 0xFB; ADC_CSR = (cCh)&0x0f; ADC_CR1_ADON = 1; for(i = 0;i <10;i++) { CLEAR_WATCHDOG; } ADC_CR1_ADON = 1; while(!(ADC_CSR&0x80)); re = ADC_DRH; i = ADC_DRL; return re;}
for循环里面的值越大,255出现我机率越大。奇怪!!!!
问题已经搞定。
1,与中断无关
2,电压不波动
3,其实是 255 的值出现,是正常的,去它去掉就好
4,其实端口采样到的第一个值是不能要的 展开
1个回答
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一种32位的微控制器,由意法半导体(STMicroelectronics)公司设计和生产。STM32是一种非常常见的嵌入式系统芯片,广泛应用于物联网、汽车、工业控制、医疗设备等领域。STM32具有以下特点:1. 体积小巧:STM...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询