历史上的今天

今天是:2024年09月18日(星期三)

正在发生

2021年09月18日 | STM8 ADC转换模式-------单次模式

发布者:数据之翼 来源: eefocus关键字:STM8  ADC  转换模式  单次模式 手机看文章 扫描二维码
随时随地手机看文章

STM8单片机ADC支持5种转换模式:单次模式,连续模式,带缓存的连续模式,单次扫描模式,连续扫描模式。


单次模式

在单次转换模式中,ADC仅在由ADC_CSR寄存器的CH[3:0]选定的通道上完成一次转换。该模式是在当CONT位为0时通过置位ADC_CR1寄存器的ADON位来启动的。


一旦转换完成,转换后的数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置EOCIE 被置位将产生一个中断。


其中ADC结果的读取可以采用查询模式也可以采用中断模式。


查询模式代码如下:


#include "adc.h"

#include "main.h"

 

u16  DATAH = 0;                          //ADC转换值高8位

u16  DATAL = 0;                          //ADC转换值低8位

_Bool ADC_flag = 0;                     //ADC转换成功标志

 

//AD通道引脚初始化

void ADC_GPIO_Init( void )

{

    PD_DDR &= ~( 1 << 3 );              //PD3 设置为输入      电流

    PD_CR1 &= ~( 1 << 3 );              //PD3 设置为悬空输入

}

/*

ch 为ADC对应通道

通过置位ADC_CR1寄存器的ADN位来开启ADC。当第一次置位ADON时,ADC从低功耗模式唤醒。


为了启动转换必须第二次使用写指令来置位ADON位。


在转换结束时,ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次转换。


转换完成后,转换数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断

ADC输入通道初始化入口参数表示通道选择

*/

void ADC_CH_Init( u8 ch )

{

    char l = 0;

    ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  单次转换,禁止转换

    ADC_CSR  = ch ;                     //控制状态寄存器 选择要 AD输入通道  如:PD2(AIN3)

    ADC_CR2  = 0x00;                    //默认左对齐 读数据时先读高在读低

    ADC_TDRL = ( 1 <<  ch  );           //禁止相应通道 施密特触发功能 1左移ch+1位

    ADC_CR1 |= 0x01;                    //使能ADC并开始转换

    //ADC_CSR |= 0x20;                    //EOCIE 使能转换结束中断  EOC中断使能

    for( l = 0; l < 100; l++ );         //延时,保证ADC模块的上电完成 至少7us

    ADC_CR1 = ADC_CR1 | 0x01;           //再次将CR1寄存器的最低位置1 使能ADC 并开始转换

}

 

//采集PD2电压值

u16 ReadVol_CH3( void )

{

    u16 voltage = 0;

    while( ( ADC_CSR & 0x80 ) == 0 );      //等待转换结束

    if( ADC_CSR & 0x80 )

    {

        DATAH = ADC_DRH;                    // 读出ADC结果的高8位

        DATAL = ADC_DRL;                    // 读出ADC结果的低8位

        voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024

        ADC_CR1 = ADC_CR1 | 0x01;          //再次将CR1寄存器的最低位置1  启动下一次转换

        ADC_CSR &= 0x7F;

    };

    return voltage;

}

中断模式代码如下:


#include "adc.h"

#include "main.h"

 

u16  DATAH = 0;                          //ADC转换值高8位

u16  DATAL = 0;                          //ADC转换值低8位

_Bool ADC_flag = 0;                     //ADC转换成功标志

 

//AD通道引脚初始化

void ADC_GPIO_Init( void )

{

    PD_DDR &= ~( 1 << 3 );              //PD3 设置为输入      电流

    PD_CR1 &= ~( 1 << 3 );              //PD3 设置为悬空输入

}

/*

ch 为ADC对应通道

通过置位ADC_CR1寄存器的ADON位来开启ADC。当第一次置位ADON时,ADC从低功耗模式唤醒。

为了启动转换必须第二次使用写指令来置位ADON位。

在转换结束时,ADC会保持在上电状态,用户只需要置位ADON位一次来启动下一次转换。

转换完成后,转换数据存储在ADC_DR寄存器中,EOC(转换结束)标志被置位,如果EOCIE被置位将产生一个中断

ADC输入通道初始化入口参数表示通道选择

*/

void ADC_CH_Init( u8 ch )

{

    char l = 0;

    ADC_CR1  = 0x00;                    //fADC = fMASTER/2, 8Mhz  单次转换,禁止转换

    ADC_CSR  = ch ;                     //控制状态寄存器 选择要 AD输入通道  如:PD2(AIN3)

    ADC_CR2  = 0x00;                    //默认左对齐 读数据时先读高在读低

    ADC_TDRL = ( 1 <<  ch  );           //禁止相应通道 施密特触发功能 1左移ch+1位

    ADC_CR1 |= 0x01;                    //使能ADC并开始转换

    

    ADC_CSR |= 0x20;                    //EOCIE 使能转换结束中断  EOC中断使能

    

    for( l = 0; l < 100; l++ );         //延时,保证ADC模块的上电完成 至少7us

    ADC_CR1 = ADC_CR1 | 0x01;           //再次将CR1寄存器的最低位置1 使能ADC 并开始转换

}

//采集PD3电压值

u16 ReadVol_CH3( void )

{

   static  u16 voltage = 0;

    if( ADC_flag )

    {

        ADC_flag = 0;

        voltage = ( DATAH << 2 ) + DATAL ; //得到十位精度的数据  0--1024

        ADC_CR1 = ADC_CR1 | 0x01;          //再次将CR1寄存器的最低位置1  启动下一次转换

    };

    return voltage;

}

//AD中断服务函数 中断号22

#pragma vector = 24                     // IAR中的中断号,要在STVD中的中断号上加2

__interrupt void ADC_Handle( void )

{

    ADC_CSR &= ~0x80;                   // 转换结束标志位清零  EOC

    //默认左对齐 读数据时先读高高8位 再读低8位

    DATAH = ADC_DRH;                    // 读出ADC结果的高8位

    DATAL = ADC_DRL;                    // 读出ADC结果的低8位

    ADC_flag = 1;                       // ADC中断标志 置1

}

关键字:STM8  ADC  转换模式  单次模式 引用地址:STM8 ADC转换模式-------单次模式

上一篇:STM8 ADC转换模式-------连续模式
下一篇:STM8学习笔记---ADC平均值采样和有效值采样算法分析

推荐阅读

   9月18日晚间消息,周末中科闻歌召开成立以来第一次发布会,面向泛媒体大数据与认知计算领域,发布“闻海”大数据平台、“天湖”智算平台,提供多语言、跨模态和深度自然语言理解的大数据智能计算引擎,为政府、媒体、企业提供大数据系统、服务与解决方案。中科闻歌是中科院旗下企业,由中科院自动化所互联网大数据研究中心科研团队创立,已完成A轮近...
一、写在前面STM32CubeMX主界面菜单包含:File文件、Window窗口、Help帮助这三个菜单。STM32CubeMX V5和V4版本菜单有差异,V4版本有5个菜单:File文件、Project工程、Pinout引脚输出、Window窗口、Help帮助。大家可以看一下我16年在公众号写过的一篇讲解关于STM32CubeMX V4版本菜单的文章:STM32CubeMX使用方法及功能介绍相信使用过V4版本的朋友都知道,...
2020年不知不觉就已经过去一半多,在过去的大半年中,手机圈发布了不少黑科技,其中已经量产的黑科技也不少。我们一起来盘点下已经量产的黑科技,看看这些黑科技的量产能带来什么样的改变。微云台:全新的防抖方式在今年二月份,vivo曾公布了一款vivo APEX 2020概念机,这款概念机集成了一身黑科技,其中就包括有微云台这项技术。到六月份,vivo X50系...
其实,这种情况下并不存在响应快慢的问题,这是ZDS2022示波器的一种处理机制。因为为了保证数据的完整性,ZDS2022示波器在运行状态下,按下【Run/Stop】,并非立即停止,而是在一屏数据采集完毕之后才停止,也就是说停止的速度与一屏数据的采集时间有关。因此,在存储时间较长的情况下,按下【Run/Stop】可能需要等待一会儿才能停止。

史海拾趣

问答坊 | AI 解惑

谁有TICE66的仿真调试软件???

谁有TICE66的仿真调试软件?急需啊,哪位大侠提供一个。。jhz2@21cn.com …

查看全部问答∨

【请高手指点】C语言程序参数传递与函数值返回的问题

本人最近在用TI的6711DSP写算法程序,使用C语言,今天突然出现浮点参数传递出错和浮点函数返回值出错的情况,始终未能查找到原因,请大虾赐教!!!拜谢!!! 首先我怀疑是stack溢出或其它越界,但我把其它代码全部屏蔽掉,仅留下两个简单的调用 ...…

查看全部问答∨

三极管中文资料大全

三极管中文资料大全,但愿能帮到大家。…

查看全部问答∨

NVR将替代DVR

高清网络摄像机的一体化接入必然依赖NVR,在高清时代,DVR将不复存在     在数字监控时代,前端是模拟摄像机,对模拟摄像机的集中接入、处理、录像存储、本地浏览和图像回放由DVR来完成。而在网络监控时代,前端变为网络摄像机,谁能够 ...…

查看全部问答∨

WinCE同步SQL2000,数据导入。分不够再送!!

用WinCE开发Symbol的MC1000,现在有一个30万条的数据,要导入到MC1000上。 开始把文本放到MC1000上,再一条一条读到SQL CE里。由于MC1000内存不够, 想把文本或基础数据放在PC端,通过与SQL 2000同步的办法,把数据导入到SQL CE上。 不知道怎么同 ...…

查看全部问答∨

请教运行EVC时的一个错误,麻烦大家帮帮忙

我在运行一个简单的HELLO程序,该程序无错误,我选的是EMULATOR模式,就是在XP上模拟,编译无错,运行是出现如下错误 "one or more files from the emulator for windows CE installation is missing",我电脑上没装platform bu ...…

查看全部问答∨

HID驱动的USBDieviceAttach

我对CE的USB HID驱动有点疑问. 就是USBHID.cpp已经有USBDieviceAttach了. 在kbdhid.cpp中也有USBDieviceAttach 也就是说当我插入一个usb键盘后. 首先会调用USBHID.cpp中的USBDieviceAttach. 然后再调用kbdhid.cpp中的USBDieviceAttach. 请问CE系 ...…

查看全部问答∨

能分享一下你的PROTEL99SE封装库吗?

对于EDA软件我一直都挺没当一回事,好像挺烦什么仿真的东西。包括最常用的PROTEL99SE,说来惭愧,我还是今天看视频才渐渐懂了基本的SCH画法。之前的PCB更是画的乱七八糟,幸亏坛子里一些朋友指导才渐渐学会基本画法,这次SCH还是因为找工作给逼的自 ...…

查看全部问答∨

转换器仿真——超越评估板 (ADI公司中文在线研讨会)

http://www.analog.com/zh/content/seminar_webcast/fca.html…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved