有谁有关于stm8的ADC 的程序,给我发个

有谁有关于stm8的ADC 的程序,给我发个,第1张

ADC1的基本的单次转换

void InitADC()

{

ADC1->CR1 = 0x20 //漏告分频系数为4 单次转换模式 先不启动ADC转换

ADC1->CR2 = 0x08 //非外部触发 数据右对齐 禁止扫描模式

ADC1->CSR = 0x03 //禁止转换结束中断 设置转换通道为AIN3

ADC1->TDRL|= 0x08 //禁止AIN3施密特触发器功能

ADC1->CR1 |= 0x01 //第一返虚明次写1是从低功耗模式唤醒

}

unsigned int GET_AD()

{

unsigned int temph=0

unsigned char templ=0

ADC1->CR1 |= 0x01 //启誉咐动AD转换

while(!(ADC1->CSR&0x80)) //等待转换结束

ADC1->CSR &= ~0x80 //清除转换结束标志

templ = ADC1->DRL

temph = ADC1->DRH //读出AD转换结果

temph = ConTOINT(temph,templ)

return(temph)

}

程序中使用ADC1采样一个外部输入,一个内部参考电压的

电压,其中出现了两通道的数搭陪伏据错位问题,即有时数组

一个数与该数组第二个数据交换了,在网上找了很久=都

没神知携马结果,最乱升后只能将ADC的连续转换模式设置成单次转换

即ADC_Init(ADC1, ADC_ConversionMode_Continuous, ADC_Resolution_12Bit, ADC_Prescaler_1)改成

ADC_Init(ADC1, ADC_ConversionMode_Single, ADC_Resolution_12Bit, ADC_Prescaler_1)

在每次一组数据传 输完成产生一次DMA中断的时候再启动下

一次adc转换。这样数据才不至于错位。

***最后,如果读者有一些在adc连续转换模式解决数据错位的办法,请指教***


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12459866.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存