STM8 ADC转换模式-------连续模式

发布者:Susan苏最新更新时间:2021-09-18 来源: eefocus关键字:STM8  ADC  转换模式  连续模式 手机看文章 扫描二维码
随时随地手机看文章

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


连续和带缓存的连在连 换模式中,将ADC设为连续模式,该模式是通过置位 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寄存器的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_CR1 |= ( 1 << 1 );              //开启连续转换模式

    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 )

    {

        ADC_CSR &= 0x7F;

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

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

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

    }

 

    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_CR1 |= ( 1 << 1 );              //开启连续转换模式

    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 )

{

    static  u16 voltage = 0;

    if( ADC_flag )

    {

        ADC_flag = 0;

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

        DATAH = ADC_DRH;

        DATAL = ADC_DRL;

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

 

    };

    return voltage;

}

 

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

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

__interrupt void ADC_Handle( void )

{

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

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

}

关键字:STM8  ADC  转换模式  连续模式 引用地址:STM8 ADC转换模式-------连续模式

上一篇:STM8 ADC转换模式-------带缓存的连续模式
下一篇:STM8 ADC转换模式-------单次模式

推荐阅读最新更新时间:2024-11-12 18:28

stm8 sttoolset不能编译问题
1、STVD- Tools- Options- Toolset- Root path中添加 编译器路径问题 1)可能会报错为 -clDebug -coDebug main.c has failed, the returned value is: 1 exit code=1. 2) can't open file libm0.sm8 3)生成hex文件修改方法 project settings post-Build 添加 chex -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8
[单片机]
<font color='red'>stm8</font> sttoolset不能编译问题
STM8 GPIO模式
GPIO_Mode_In_FL_No_IT 浮空输入无中断 GPIO_Mode_In_PU_No_IT 上拉输入无中断 GPIO_Mode_In_FL_IT 浮空输入有中断 GPIO_Mode_In_PU_IT 上拉输入有中断 GPIO_Mode_Out_OD_Low_Fast 开漏-输出低-高速 Output open-drain, low level, 10MHz GPIO_Mode_Out_PP_Low_Fast 推挽-输出低-高速 Output push-pull, low level, 10MHz GPIO_Mode_Out_OD_Low_Slow 开漏-输出低-低速 Output open-drain, lo
[单片机]
STM8 8位基本定时器(TIM4,TIM6)
介绍 该定时器由的8可位自动重载的向上计数器所组成,它可以用来作为时基发生器,具有溢出中断功能。 TIM6同时钟信号控制器用于定时器同步和级联。 STM8通用定时器TIM4的主要功能 TIM4功能包括: 8位向上计数的自动重载计数器; 3位可编程的预分配器(可在运行中修改),提供1,2,4,8,16,32,64和128这8种分频比例。 中断产生 –在计数器更新时:计数器溢出 STM8通用定时器TIM6主要功能 TIM6的功能包括: 8位向上计数的自动重载计数器; 3位可编程的预分配器(可在运行中修改),提供1,2,4,8,16,32,64和128这8种分频比例。 用于和外部信号相连和定时器
[单片机]
<font color='red'>STM8</font> 8位基本定时器(TIM4,TIM6)
STM8系统讲解应用经验
简介:stm8s外设资源丰富,性能优越,性价比高,这里分享下自己的开发经验,给有兴趣的朋友。 先看下配置。 不错吧,而它的价格只有3元,0系列的产品则仅有1元多点。很诱人吧。更诱人的是,学好了这个,再学STM32将变的顺手起来。外设的控制大致是一样的。切入正题,下边的说明将针对直接寄存的控制,不用库开发。(8实在没必要) GPIO的控制: 每组IO都有5个寄存器负责分别是 PX_ODR :输出状态控制寄存器 PX_DDR :数据方向控制寄存器 PX_CR1 :上拉电阻控制寄存器 PX_CR2 :外部中断控制寄存器 PX_IDR: 读端口状态寄存器 下边列出几种常用的端口配置: 推 挽输出低电平 PX_DDR=0XFF;PX
[单片机]
<font color='red'>STM8</font>系统讲解应用经验
stm8 time1精准延时
//初始化位毫秒单位 void Timer_Init() { TIM1_PSCRH = (unsigned char) ( ( (F_CPU / 1000) - 1) 8); /* 16M系统时钟经预分频f=fck/(PSCR+1) */ TIM1_PSCRL = (unsigned char) ( (F_CPU / 1000) - 1); /* PSCR=0x3E7F,f=16M/(0x3E7F+1)=1000Hz,每个计数周期1ms */ TIM1_ARRH = 0; /* 这三行不知道为什么要先初始化,如果不定时第一次用时将不正常 */ TIM1_ARRL = 1;
[单片机]
ADC的架构与触发源原理
1.引言 在 STM32 MCU 中,ADC 有多种启动触发方式,本文对各种触发源的原理进行介绍,方便大家以后如何选择合适的触发源。 2. ADC 的架构与触发源 以 STM32G474 为例,ADC 模块的架构框图如下,基于逐次逼近原理(SAR)完成模拟量到数字量的转换。前端通过多通道选择开关(input selection)来对转换通道进行切换,从而实现对多个输入通道的信号进行采样。 ADC 模块的信道可以工作在规则模式或是注入模式下,对应的触发源分别为规则触发源与注入触发源。所有规则通道共享一个 ADC 结果寄存器,一个通道转换完成后需要及时读取转换结果,否则转换结果可能会被覆盖,具体取决于 overrun 的相关设置。
[单片机]
<font color='red'>ADC</font>的架构与触发源原理
stm8 时钟输出引脚
CLK_CCO引脚是STM8的时钟输出引脚,若设置该脚输出主时钟Fmaster,时钟输出寄存器可以进行如下操作 CLK- CCOR=0X19;
[单片机]
瑞萨推出包括先进可编程14位SAR ADC在内的 全新AnalogPAK可编程混合信号IC系列
全新产品几乎适用于任何应用,大幅减少元件数量、BOM成本和占板空间 2024 年 11 月 12 日,中国北京讯 - 全球半导体解决方案供应商瑞萨电子今日宣布推出全新AnalogPAK™ IC系列,其中包括低功耗——SLG47001/3和车规级产品——SLG47004-A,以及业界先进的可编程14位SAR ADC(逐次逼近寄存器模数转换器)——SLG47011。 AnalogPAK作为瑞萨GreenPAK™可编程混合信号矩阵产品家族的一员,是极具成本效益的非易失性存储器(NVM)可编程器件。 它使创新者能够整合多种系统功能,同时最大限度地减少元件数量、占板空间和功耗。GreenPAK和AnalogPAK IC可实现混
[嵌入式]
瑞萨推出包括先进可编程14位SAR <font color='red'>ADC</font>在内的  全新AnalogPAK可编程混合信号IC系列
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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