STM8L ADC功能
来源:互联网 发布:所有腾讯软件下载 编辑:程序博客网 时间:2024/06/14 17:45
STM8L系列单片机集成了AD功能,有一个ADC模块,但是有最多可达28个AD通道,可以配置为单次采样或者连续采样。
ADC的精度最多可配置为12位精度,另外可以选择6位、8位、10位的精度。
下面举例初始化一个ADC的配置函数:
void ADC21Conver_Init(){ ADC_ChannelCmd(ADC1, ADC_Channel_0, //关闭其他的采样通道 DISABLE);
ADC_Cmd(ADC1 , DISABLE); //关闭ADC CLK_PeripheralClockConfig(CLK_Peripheral_ADC1 , ENABLE); //使能ADC1时钟 GPIO_Init(GPIOD , GPIO_Pin_1 , GPIO_Mode_In_FL_No_IT); //配置AD引脚 ADC_Init(ADC1, ADC_ConversionMode_Single, //单次转换模式 ADC_Resolution_12Bit, //12位精度转换精度 ADC_Prescaler_1 //时钟设置为1分频 ); ADC_ChannelCmd(ADC1, ADC_Channel_21, //设置为通道21进行采样 ENABLE); ADC_Cmd(ADC1 , ENABLE); //使能ADC }
因为只有一个ADC,所以在配置之前需要先之前使用的其他的AD通道,这里如果不关闭之前使用的AD通道的话,无法打开新的AD采集通道。
ADC可以选择时钟为1分频或者2分频,可以选择采样精度和采样方式。
下面列举一个读取ADC采样结果的函数:
void ADC_Data_Read(unsigned int *AD_Value){ ADC_SoftwareStartConv(ADC1); //启动ADC while(ADC_GetFlagStatus(ADC1 , ADC_FLAG_EOC) == 0); //等待转换结束 ADC_ClearFlag(ADC1 , ADC_FLAG_EOC); //清除中断标志 *AD_Value = ADC_GetConversionValue(ADC1); //读取ADC1,通道1的转换结果 }
使用上面两个函数即可实现ADC采样功能,但是有个地方很奇怪,每次采集ADC值的时候第一次采集到的数据都是不准确的,所以第一次采集到的值是不能使用的。
另外STM8L内部还提供了1.2V的参考电压,但是在使用这个参考电压的时候有一些不稳定的现象。
比如在采集这个参考电压时,如果在读取函数前面加延时,延时的时间不一样得到的采样结果是不一样的,另外,这个参考我根据外面提供的VCC作为参考电压来计算的话,得到的值也不是1.2V,这个地方不知道是我的配置出了问题还是这个参考电压本身有问题。
阅读全文
1 0
- STM8L ADC功能
- STM8L相关功能配置
- STM8L使用ADC内部参考电压通道测量VDD电压
- STM8L
- STM8L 芯片 DA 功能初始化注意
- STM8L参考手册
- STM8L学习
- ADC
- ADC
- ADC
- ADC
- ADC
- ADC
- ADC
- 【STM8L】STM8L之按键中断
- 【STM8L】STM8L之按键中断
- 【STM8L】STM8L之自定义长短按键
- 【STM8L】STM8L之timer2定时中断
- 矩阵系列
- [SMOJ2217]摩天楼
- CSDN博客初体验123456
- 多行 多元素 同时 滚动
- 上色的纱雾
- STM8L ADC功能
- 【c++】函数的重载
- MVC分部视图的使用:Html.Partial/RenderPartial,Html.Action/RenderAction,RenderPage
- oracle 学习笔记
- java dom4j解析xml
- HBASE+PHOENIX性能优化注解
- android-接口回调(精简)笔记总结
- Windows 建立、运行批处理文件
- sql语句使用case when实现列排序