//不说那么多了,直接上程序
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转换的更多相关文章

  1. 在AD转换中的过采样和噪声形成

    1. 直接量化的过采样AD转换 此类系统的模型可以用下图表示. 图中xa(t)是输入信号,e(t)是量化引入的噪声,xd[n]是最终得到的数字信号,包含分量xda和xde. 对于M倍过采样,信号与量化 ...

  2. AD转换精度的计算

    声明原文来源于:http://wenku.baidu.com/view/1e6d8f3083c4bb4cf7ecd1c2.html 讨论AD转换分辨率的算法(zt) (1)在总长度为5米的范围里,平均 ...

  3. MSP430常见问题之AD转换类

    Q1:MSP430F149 AD 的输入阻抗有多大?A1:RC<2000欧*30PF Q2:MSP430 ADC12 模块的速度?A2: ADC12 的转换速率是转换所需的ADC12CLK 以及 ...

  4. s5pv210 AD转换

    1:ADC:Analog-to-Digital Converter,模拟信号转数字信号,自然界一般为模拟信号,而SoC需要数字信号,所以之间通信需要ADC. 2:转换原理: 以逐次逼近式AD转换为例: ...

  5. AD转换

    一.AD转换的概念  AD转换的功能是把模拟量电压转换为数字量电压.DA转换的功能正好相反,就是讲数字量转换位模拟量. 二.芯片PCF8591介绍 PCF8591是一个单片集成.单独供电.低功耗.8- ...

  6. verilog实验3:AD转换后串口输出到PC端

    一.实验任务 通过tcl549AD转换芯片将模拟电压信号转换为数字信号,并通过串口显示到电脑上.此AD转换芯片为串行转换芯片,且转换速率要和串口选择的速率匹配.等待串口发送完后,再进行下一次AD转换. ...

  7. AD转换后数字量的处理

    假设模拟输入电压的最大值为5V,A/D转换器件为8位转换. [该转换器的分辨率为1/2n=0.3906%.] [能分辨输入模拟电压变化的最小值为5*0.3906%=19.5mv.] 则模拟电压与数字输 ...

  8. 【转】AD转换中常用的十种数字滤波法

    在AD采集中经常要用到数字滤波,而不同情况下又有不同的滤波需求,下面是10种经典的软件滤波方法的程序和优缺点分析: 限幅滤波法(又称程序判断滤波法) 中位值滤波法 算术平均滤波法 递推平均滤波法(又称 ...

  9. AD转换 XPT2046

    应用电路 引脚功能描述 控制位命令 控制字节各位描述 单端模式输入配置 差分模式输入配置 掉电和内部参考电压选择 应用电路 AIN0:检测转换电位器模拟信号,控制字命令寄存器值为0x94或者0xB4 ...

随机推荐

  1. Go Web编程 第三章--接收请求

    net/http标准库 net/http标准库通常包括两个部分,客户端和服务器,我们可以通过ListenAndServe创建一个简陋的服务器 package main import ( "n ...

  2. tyvj 1031 热浪 最短路

    热浪 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://tyvj.cn/p/1031 Description 德克萨斯纯朴的民眾们这个夏天正在遭受 ...

  3. 多线程面试题-sleep()和wait()区别

    sleep(): 1 .是Thread类中的一个方法,用于线程休眠, 2 .休眠时间结束后,该线程可以自动唤醒: wait(): 1. 是Object类中的一个方法,用于线程等待, 2. 如果想要唤醒 ...

  4. 对于asp.net mvc异步查询

    如何做MVC异步查询,做列表页面. 查询是项目中必不可少的工作,而且不同的项目不同的团队,都有自己的简单方法.Asp.net mvc 有自己独特的优势,下面是结合mvc实现一个产品列表的Demo. 问 ...

  5. Disable File System Redirector For Windows x64 (Python recipe)(转)

    This disables the Windows File System Redirector.When a 32 bit program runs on a 64 bit operating sy ...

  6. Android自己定义组件系列【3】——自己定义ViewGroup实现側滑

    有关自己定义ViewGroup的文章已经非常多了,我为什么写这篇文章,对于刚開始学习的人或者对自己定义组件比較生疏的朋友尽管能够拿来主义的用了,可是要一步一步的实现和了解当中的过程和原理才干真真脱离别 ...

  7. USB PIC Programmer (Brenner8)

    http://uzzors2k.4hv.org/index.php?page=usbpicprog My Tait Serial programmer works alright, but not e ...

  8. 在Windows Server 2008 R2中使用web方式修改域用户账户密码

    在Windows的domain环境下,加域的客户端修改账户密码是一件很easy的事情:即使没有加域的客户端如果组织中,使用Exchange邮件系统,借助Exchange的owa也可以轻松修改账户密码. ...

  9. DI容器Ninject在管理接口和实现、基类和派生类并实现依赖注入方面的实例

    当一个类依赖于另一个具体类的时候,这样很容易形成两者间的"强耦合"关系.我们通常根据具体类抽象出一个接口,然后让类来依赖这个接口,这样就形成了"松耦合"关系,有 ...

  10. ndk 开发

    5.用NDK来编译程序 1.  现在我们用安装好的NDK来编译一个简单的程序吧,我们选择ndk自带的例子hello-jni,我的位于E:/android-ndk-r5/samples/hello-jn ...