STM8红外捕获解析 使用TIM1 16位高级控制定时器

发布者:数字航海家最新更新时间:2018-06-18 来源: eefocus关键字:STM8  红外捕获  高级控制  定时器 手机看文章 扫描二维码
随时随地手机看文章

TIM1 16位高级控制定时器


高级控制定时器具有不同的用途:
1、基本的定时。
2、测量输入信号的脉冲宽度(输入捕获)
3、产生输出波形(输出比较,PWM和单脉冲模式)
4、对应不同的事件(捕获、比较、溢出、刹车、触发)的中断。


高级控制定时器的时钟源可以是内部时钟,也可以是外部的信号,可以通过配置寄存器来进行选择。


多达4个独立通道可以配置
1、输入捕获
2、输出比较
3、PWM生成
4、单脉冲模式输出


static void TIM1_Init(void)
{
    /* Set the Prescaler value */
    TIM1->PSCRH = (u8)(Prescaler_tim1 >> 8);//f_time1 = f_sys/(Prescaler_tim1 + 1)
    TIM1->PSCRL = (u8)(Prescaler_tim1); 


    /* Set the Autoreload value */
    TIM1->ARRH = (u8)(0xffff >> 8);
    TIM1->ARRL = (u8)(0xffff);
    /* Select the Counter Mode */
    TIM1->CR1 = (u8)(((TIM1->CR1) & (u8)(~(TIM1_CR1_CMS | TIM1_CR1_DIR))) | TIM1_COUNTERMODE_UP);//控制寄存器


    /* Set the Repetition Counter value */
    TIM1->RCR = 0;
}




@far @ interrupt void TIM1_CAP_COM_IRQHandler(void)
{
    volatile u16 last, width;
    volatile static u16 cur;
    u8 ret;


    /* chn1 interrupt */ //TIM1->IER中断使能寄存器
    if ((TIM1->IER & TIM1_IER_CC1IE) && (TIM1->SR1 & TIM1_SR1_CC1IF))
    {
        TIM1->SR1 &= (u8) (~TIM1_SR1_CC1IF);// TIMA_SR1 TIM1状态寄存器
        TIM1->CCER1 ^= TIM1_CCER1_CC1P; //reverse the capture edge
        last = cur;
        cur = TIM1_GetCapture1();
        ir_eng.g_overflow_cnt = 0;


        if (ir_eng.g_ir_state == IR_START)
        {
            /* start to receive wave */
            ir_eng.g_ir_state = IR_ING;
            return;


        }
        else if (ir_eng.g_ir_state == IR_ING)
        {
            width = cur - last;
            ret = push_wave(&_irwave, width);
            if (ret == 0)
            {
                /* type ahead upper limit */
                ir_eng.g_ir_state = IR_SUCC;
                notify(EV_IR_FINISH);
                stop_capture();
            }
            return;
        }
    }


    /* chn1 interrupt */
    if ((TIM1->IER & TIM1_IER_CC2IE) && (TIM1->SR1 & TIM1_SR1_CC2IF))
    {
        TIM1->SR1 &= (u8) (~TIM1_SR1_CC2IF);


        ret = get_nth_width(&_irwave, ir_eng._cur_send_bit, &width);
        if ((0x00 == ret) || (ir_eng._cur_send_bit >= ir_eng._cur_wave_bit))
        {
            stop_compare();
            ir_eng.g_ir_state = IR_IDLE;
            return;
        }
        ir_eng._cur_send_bit++;


        if (width & 0x8000)
        {
            pwm_stop();
        }
        else
        {
            pwm_start();
        }
 next_lbl:
        cur = TIM1_GetCapture2();
        width &= 0x7FFF;
        cur += width;
        TIM1_SetCompare2(cur);
    }
}




TIM1_CR1:TIM1控制寄存器1
TIM1_CR2:TIM1控制寄存器2
TIM1_SMCR:TIM1从模式控制寄存器
TIM1_ETR:TIM1外部触发寄存器
TIM1_IER:中断使能寄存器


TIM1_SR1:状态寄存器1
TIM1_SR2:状态寄存器2
当捕获事件发生时该位由硬件置1,它由软件清0


TIM1_EGR:事件产生寄存器
TIM1_CCMR1:捕获/比较模式寄存器1
TIM1_CCMR2:捕获/比较模式寄存器2
TIM1_CCMR3:捕获/比较模式寄存器3
TIM1_CCMR4:捕获/比较模式寄存器4


TIM1_CCER1:捕获/比较使能寄存器1
TIM1_CCER2:捕获/比较使能寄存器2


TIM1_CNTRH:计数器高8位
TIM1_CNTRL:计数器低8位
TIM1_PSCRH:预分频器高8位
TIM1_PSCRL:预分频器低8位


TIM1_ARRH:自动重装载寄存器高8位
TIM1_ARRL:自动重装载寄存器低8位
当自动重装载的值为空时,计数器不工作。


TIM1_RCR:重复计数寄存器
TIM1_CCR1H:捕获/比较寄存器1高8位
TIM1_CCR1L:捕获/比较寄存器1低8位


TIM1_CCR2H:捕获/比较寄存器2高8位
TIM1_CCR2L:捕获/比较寄存器2低8位
TIM1_CCR3H:捕获/比较寄存器1高8位
TIM1_CCR3L:捕获/比较寄存器1低8位
TIM1_CCR4H:捕获/比较寄存器1高8位
TIM1_CCR4L:捕获/比较寄存器1低8位
TIM1_BKR:刹车寄存器
TIM1_DTR:死区寄存器
TIM1_OISR:输出空闲状态寄存器

关键字:STM8  红外捕获  高级控制  定时器 引用地址:STM8红外捕获解析 使用TIM1 16位高级控制定时器

上一篇:STM8 I2C的学习
下一篇:STM8中 TIME4寄存器的应用

推荐阅读最新更新时间:2024-03-16 16:05

ATmega128 定时器/计时器振荡器
对于拥有定时器/ 振荡器引脚(TOSC1 和TOSC2) 的AVR 微处理器,晶体可以直接与这 两个引脚连接,无需外部电容。此振荡器针对32.768 kHz 的钟表晶体作了优化。不建议 在TOSC1 引脚输入振荡信号。
[单片机]
基于msp430单片机定时器的使用方法解析
通过计算设置周期。 #include void main( void ) { // Stop watchdog timer to prevent TIme out reset WDTCTL = WDTPW + WDTHOLD; //WDTCTL = 0X5A80;关狗 CCTL0 = CCIE; //使能CCR0中断 CCR0 = 4095; //设置周期为0.5s TACTL = TASSEL_2 + ID_2 + MC_1; //时钟源的选择,分频,模式 P2DIR = 0XFF; // P2OUT = 0XFF; _EINT(); LPM0; } #pragma vector = TIMERA0_VECTOR __inter
[单片机]
基于msp430单片机<font color='red'>定时器</font>的使用方法解析
STM8等低端单片机打印各种格式数据
#include “stm8l15x.h” #include “delay.h” #include “stdarg.h” #include “stdio.h” //定义LED与按键接口 #define LED_GPIO_PORT GPIOC #define LED_GPIO_PINS GPIO_Pin_4 #define KEY_GPIO_PORT GPIOD #define KEY_GPIO_PINS GPIO_Pin_4 uint8_t HexTable ={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’}; void USART1_S
[单片机]
STM8调试笔记
stvp下载程序之后无法运行,需要拔掉RST才能运行 compile 和make make (常用) 编译,连接当前工程。(编译只编译有改动文件,或者设置变动的文件,工程窗口文件右边会有个*号) compile 只编译当前源文件。 (不管文件是否改动,或者设置是否变动) rebuild all 编译,连接当前工程。 (不管文件是否改动,或者设置是否变动) 一、STVP(ST Visual Programmer)下载程序其实很简单, ①打开文件,*.s19或者*.hex ②选择对应的芯片型号 ③点击Program - All tabs(on active sectors if any)即可完成下载 关于*.s19和
[单片机]
<font color='red'>STM8</font>调试笔记
定时器程序应用
  了解了定时器相关的寄存器,那么我们下面就来做一个定时器的程序,巩固一下我们学到的内容。我们这节课的程序先使用定时器0,在使用定时器的时候,需要以下几个步骤:   第一步:设置特殊功能寄存器TMOD,配置好工作模式;   第二步:设置计数寄存器TH0和TL0的初值;   第三步:设置TCON,通过打开TR0位来让定时器开始计数。   第四步:判断TCON寄存器的TF0位,监测定时器溢出情况。   写程序之前,我们要先来学会计算如何用定时器定时时间。我们的晶振是11.0592M,时钟周期就是1/11059200,机器周期就是12/11059200,我们假如要定时20ms,就是0.02秒,要经过x个机器周期得到0.02秒,我们
[单片机]
C51定时器计数器
C51定时器计数器 电路图 定时/计数器的结构和工作原理 1,定时/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器TH1,TH2组成 TH1+TL0的模是65536,可表达范围0~65535,65535+1时就会溢出产生相关中断 2,TMOD是定时/计数器的工作方式寄存器,确定工作方式和功能; 3,TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志 定时计数器相关寄存器 TCON寄存器(中断的请求与外部中断的选择) IT0和IT1是设置外部中断的触发方式 当其为0时,为低电平触发方式 当其为1时,为负跳变触发方式 IE0和IE1是外部中断标志位 下面是定时/计数器的控制 TF0和
[单片机]
C51<font color='red'>定时器</font>计数器
STM8入门以及程序编译、烧录、IAR使用方法(扫盲篇)
1、硬件环境:STM8S003F3P6、ST-LINK stlink V2 2、软件环境:Embedded Workbench 6.5(IarIdePm)、ST Visual Programmer(STVP) STM8以其超高的性价比,在低端单片机领域占领了很大的市场,市面上很多单片机产品都能够看到STM8的身影,下面对STM8和89C51来做简单的对比: 1、对“89C51”而言: 对“89C51”而言,其能满足大部分需求,但最初代的“89C51”不具有“ADC”、“PWM”等外设功能;而且单就“ADC芯片”而言,列举一下4点: i)、“价格方面”:以“STC89C52”(DIP-40)为例,工作电压为“+5.0V”,其
[单片机]
<font color='red'>STM8</font>入门以及程序编译、烧录、IAR使用方法(扫盲篇)
读入独立键,并点亮相应的LED灯
*************************************************************************** 006.asm 读入独立键盘上的按键,并把相应的LED灯点亮,若一段时间无按键,刚循环点亮LED 接线:P0口接八位LED P2口接八位独立按键 定时器T0计时,中断方式 ***************************************************************************/ ORG 0000H LJMP MAIN ORG 000BH LJMP INT_T0 ORG 0100H MAIN: ;主程序入口 MO
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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