STM8S AD转换
//不说那么多了,直接上程序
void ADC1_DeInit(void)
{
ADC1->CSR = ADC1_CSR_RESET_VALUE;
ADC1->CR1 = ADC1_CR1_RESET_VALUE;
ADC1->CR2 = ADC1_CR2_RESET_VALUE;
ADC1->CR3 = ADC1_CR3_RESET_VALUE;
ADC1->TDRH = ADC1_TDRH_RESET_VALUE;
ADC1->TDRL = ADC1_TDRL_RESET_VALUE;
ADC1->HTRH = ADC1_HTRH_RESET_VALUE;
ADC1->HTRL = ADC1_HTRL_RESET_VALUE;
ADC1->LTRH = ADC1_LTRH_RESET_VALUE;
ADC1->LTRL = ADC1_LTRL_RESET_VALUE;
ADC1->AWCRH = ADC1_AWCRH_RESET_VALUE;
ADC1->AWCRL = ADC1_AWCRL_RESET_VALUE;
} void ADC1_Init(ADC1_ConvMode_TypeDef ADC1_ConversionMode,
ADC1_Channel_TypeDef ADC1_Channel,\
ADC1_PresSel_TypeDef ADC1_PrescalerSelection,\
ADC1_ExtTrig_TypeDef ADC1_ExtTrigger,\
FunctionalState ADC1_ExtTriggerState,\
ADC1_Align_TypeDef ADC1_Align,\
ADC1_SchmittTrigg_TypeDef ADC1_SchmittTriggerChannel,\
FunctionalState ADC1_SchmittTriggerState)
{ /* Check the parameters */
assert_param(IS_ADC1_CONVERSIONMODE_OK(ADC1_ConversionMode));//单次还 是连续转换
assert_param(IS_ADC1_CHANNEL_OK(ADC1_Channel));
assert_param(IS_ADC1_PRESSEL_OK(ADC1_PrescalerSelection));
assert_param(IS_ADC1_EXTTRIG_OK(ADC1_ExtTrigger));
assert_param(IS_FUNCTIONALSTATE_OK(((ADC1_ExtTriggerState))));
assert_param(IS_ADC1_ALIGN_OK(ADC1_Align));
assert_param(IS_ADC1_SCHMITTTRIG_OK(ADC1_SchmittTriggerChannel));
assert_param(IS_FUNCTIONALSTATE_OK(ADC1_SchmittTriggerState)); /*-----------------CR1 & CSR configuration --------------------*/
/* Configure the conversion mode and the channel to convert
respectively according to ADC1_ConversionMode & ADC1_Channel values & ADC1_Align values */
ADC1_ConversionConfig(ADC1_ConversionMode, ADC1_Channel, ADC1_Align);
/* Select the prescaler division factor according to ADC1_PrescalerSelection values */
ADC1_PrescalerConfig(ADC1_PrescalerSelection); /*-----------------CR2 configuration --------------------*/
/* Configure the external trigger state and event respectively
according to NewState, ADC1_ExtTrigger */
ADC1_ExternalTriggerConfig(ADC1_ExtTrigger, ADC1_ExtTriggerState); /*------------------TDR configuration ---------------------------*/
/* Configure the schmitt trigger channel and state respectively
according to ADC1_SchmittTriggerChannel & ADC1_SchmittTriggerNewState values */
ADC1_SchmittTriggerConfig(ADC1_SchmittTriggerChannel, ADC1_SchmittTriggerState); /* Enable the ADC1 peripheral */
ADC1->CR1 |= ADC1_CR1_ADON; } void ADC1_Cmd(FunctionalState NewState)
{ /* Check the parameters */
assert_param(IS_FUNCTIONALSTATE_OK(NewState)); if (NewState != DISABLE)
{
ADC1->CR1 |= ADC1_CR1_ADON;
}
else /* NewState == DISABLE */
{
ADC1->CR1 &= (u8)(~ADC1_CR1_ADON);
} } void ADC1_StartConversion(void)
{
ADC1->CR1 |= ADC1_CR1_ADON;
} FlagStatus ADC1_GetFlagStatus(ADC1_Flag_TypeDef Flag)
{
u8 flagstatus = 0;
u8 temp = 0; /* Check the parameters */
assert_param(IS_ADC1_FLAG_OK(Flag)); if ((Flag & 0x0F) == 0x01)
{
/* Get OVR flag status */
flagstatus = (u8)(ADC1->CR3 & ADC1_CR3_OVR);
}
else if ((Flag & 0xF0) == 0x10)
{
/* Get analog watchdog channel status */
temp = (u8)(Flag & 0x0F);
if (temp < 8)
{
flagstatus = (u8)(ADC1->AWSRL & (1 << temp));
}
else
{
flagstatus = (u8)(ADC1->AWSRH & (1 << (temp - 8)));
}
}
else /* Get EOC | AWD flag status */
{
flagstatus = (u8)(ADC1->CSR & Flag);
}
return ((FlagStatus)flagstatus); } u16 ADC1_GetConversionValue(void)
{ u16 temph = 0;
u8 templ = 0; if (ADC1->CR2 & ADC1_CR2_ALIGN) /* Right alignment */
{
/* Read LSB first */
templ = ADC1->DRL;
/* Then read MSB */
temph = ADC1->DRH; temph = (u16)(templ | (u16)(temph << (u8)8));
}
else /* Left alignment */
{
/* Read MSB firts*/
temph = ADC1->DRH;
/* Then read LSB */
templ = ADC1->DRL; temph = (u16)((u16)(templ << (u8)6) | (u16)(temph << (u8)8));
} return ((u16)temph); } //下面程序是用AN3即PB3进行AD转换,并将AD值放在 u16 ADVal //初始化时调用:
GPIO_DeInit(GPIOB);
GPIO_Init(GPIOB, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//设置IO为悬浮输入 ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE,ADC1_CHANNEL_3,\
ADC1_PRESSEL_FCPU_D6,ADC1_EXTTRIG_TIM,DISABLE,\
ADC1_ALIGN_RIGHT,ADC1_SCHMITTTRIG_CHANNEL3,DISABLE);
/*单次转换*/ /*PB3/AN3*/ /*6分频*/ /*内部定时器1 TRG事件*/
/*禁止外部触发转换*/ /*数据右对齐 (低8字节在ADC_DRL寄存器,其余高字节 位在ADC_DRH寄存器)读顺序
应先读低位,再读高位字节*/
ADC1_Cmd(ENABLE);//同意进行AD转换 //进行AD取值时调用: ADC1_StartConversion();//開始AD转换
while(0==ADC1_GetFlagStatus(ADC1_FLAG_EOC));//等待转换完毕
ADC1_ClearFlag(ADC1_FLAG_EOC); //清除AD完毕标志位
ADVal = ADC1_GetConversionValue();//读AD值
STM8S AD转换的更多相关文章
- 在AD转换中的过采样和噪声形成
1. 直接量化的过采样AD转换 此类系统的模型可以用下图表示. 图中xa(t)是输入信号,e(t)是量化引入的噪声,xd[n]是最终得到的数字信号,包含分量xda和xde. 对于M倍过采样,信号与量化 ...
- AD转换精度的计算
声明原文来源于:http://wenku.baidu.com/view/1e6d8f3083c4bb4cf7ecd1c2.html 讨论AD转换分辨率的算法(zt) (1)在总长度为5米的范围里,平均 ...
- MSP430常见问题之AD转换类
Q1:MSP430F149 AD 的输入阻抗有多大?A1:RC<2000欧*30PF Q2:MSP430 ADC12 模块的速度?A2: ADC12 的转换速率是转换所需的ADC12CLK 以及 ...
- s5pv210 AD转换
1:ADC:Analog-to-Digital Converter,模拟信号转数字信号,自然界一般为模拟信号,而SoC需要数字信号,所以之间通信需要ADC. 2:转换原理: 以逐次逼近式AD转换为例: ...
- AD转换
一.AD转换的概念 AD转换的功能是把模拟量电压转换为数字量电压.DA转换的功能正好相反,就是讲数字量转换位模拟量. 二.芯片PCF8591介绍 PCF8591是一个单片集成.单独供电.低功耗.8- ...
- verilog实验3:AD转换后串口输出到PC端
一.实验任务 通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上.此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配.等待串口发送完后,再进行下一次AD转换. ...
- AD转换后数字量的处理
假设模拟输入电压的最大值为5V,A/D转换器件为8位转换. [该转换器的分辨率为1/2n=0.3906%.] [能分辨输入模拟电压变化的最小值为5*0.3906%=19.5mv.] 则模拟电压与数字输 ...
- 【转】AD转换中常用的十种数字滤波法
在AD采集中经常要用到数字滤波,而不同情况下又有不同的滤波需求,下面是10种经典的软件滤波方法的程序和优缺点分析: 限幅滤波法(又称程序判断滤波法) 中位值滤波法 算术平均滤波法 递推平均滤波法(又称 ...
- AD转换 XPT2046
应用电路 引脚功能描述 控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 掉电和内部参考电压选择 应用电路 AIN0:检测转换电位器模拟信号,控制字命令寄存器值为0x94或者0xB4 ...
随机推荐
- Android优化之软引用和弱引用
Java从JDK1.2版本开始,就把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用.软引用.弱引用和虚引用.这里重点介绍一下软引用和弱引用. 如果一 ...
- [POI2017]Sabotaż
[POI2017]Sabotaż 题目大意: 一棵\(n(n\le5\times10^5)\)个结点的树,初始时有一个未知的黑点,其余全为白点.对于一个点,如果其子树中黑点所占比例超过\(x\),则这 ...
- Codeforces Round #287 (Div. 2) C. Guess Your Way Out! 水题
C. Guess Your Way Out! time limit per test 1 second memory limit per test 256 megabytes input standa ...
- Python学习笔记(七)—字典的学习
总结内容: 1.字典的定义 2.字典的好处 3.字典的增删改查 4.字典常用方法及内置函数 5.字典的多层嵌套 6.字典的循环 7.字典小练习 1.字典的定义 字典是另一种可变容器模型,且可存储任意类 ...
- .Net 中DataTable和 DataRow的 区别与联系
1.简要说明二者关系 DataRow 和 DataColumn 对象是 DataTable 的主要组件.使用 DataRow 对象及其属性和方法检索.评估.插入.删除和更新 DataTable 中的值 ...
- discuz功能列表
导航旁边的+就可以把其加入到常用操作 上 首页 管理中心首页 文件校验,在线成员,管理团队留言.系统信息.开发 团队介绍. 常用操作管理 名称和URL 全局 站点信息 站点名称.网站名称,网站URL. ...
- CareerCup之1.3字符串去重
[题目] 原文: 1.3 Design an algorithm and write code to remove the duplicate characters in a string witho ...
- 浅析OpenGL光照
浅析OpenGL光照 之前从来都没有涉及光照的内容,心想只要能通过常规的方法渲染出几何体甚至是模型就可以了,然而没有光照的日子注定是苦涩的,因为仅凭几何体和模型的颜色无法达到真是渲染的效果,在实际中有 ...
- CAShapeLayer的path动画
CAShapeLayer的path动画 效果 源码 https://github.com/YouXianMing/Animations // // CAShapeLayerPathController ...
- 《Windows核心编程》第十一章——线程池
隐式使用工作项 #include <iostream> #include <windows.h> ; VOID NTAPI SimpleCallback(PTP_CALLBAC ...