2937|0

1291

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

【R7F0C809】实现定时器的外部计数功能 [复制链接]

   昨天使用定时器做了一个PWM功能,现在用定时器做个计数功能,就是计数方波的个数。这个功能在叫外部事件计数器。就是对外部的方波进行计数。一下就是这个功能的一些说明:
    计数器可以用16位或者8位定时器进行计数,实际只有8位定时器可以计数,在计数是就是读取TCR0n寄存器的高八位和第八位的值,在我的实际测试中,无论配置16位还是8位定时器也是只有TCR0nL的在计数,而实际TCR0nH是不计数,我也想不通。

接下来我可以看看计数器的框图:
我要用计数器的功能时,首先要对管脚进行配置,手册上也有详细的说明:
如上图就是管脚的配置要求:
例如下面的例子就是把P14配置成TI03
       /* Set IO */
    PMC1 &= 0xEFU;
    P1 |= 0x10U;

    PM1|=0x10U;
接下来就是对定时器进行配置,我可以参考一下两个图进行配置:
我的配置代码如下:
void TAU0_Counter_Init(void)
{
       /*Set IO */
    PMC1 &= 0xEFU;
    P1 |= 0x10U;
    PM1 |= 0x10U;
    /*Basic configuration */
    TAU0EN =1;                 /* Enables input clock supply for TAU */
    TPS0 =0x70;                /* CK00 = 20MHz, CK01 = 156kHz */
    /*Configure TAU00, TAU01(PWM) */
    TMR03H =0x10;              /* Selection of operation clock (fMCK) ofchannel 0 - operation clock CK00(20MHz) */
    TMR03L =0x06;              /* Master channel */
    TDR03H = 0xFFU;
    TDR03L = 0xFFU;
    TO0 = 0x00;
    TOL0 |= 0x00;
    TOM0 |=0x00;               /* Slave channel output mode for TO01 */
    TOE0 |=0x00;               /* Enables output of TO01 */
    TMMK03 = 1;
    //TE0|= 0x02;
    NFEN1 = 0x08;
   
    TS0 =0x00;                 /* Disables TAU0 */
   
}
计数的最大范围通过TDR0n进行设置,假如你设置了TDR0n1999,假如你设置了上升沿触发,每当方波的上升沿进行计数,而且是从2000递减,也就是最大计数到2000,当计数到0后然后会产生INTTM0n中断,然后继续从2000递减,如此反复下去。
我可以在程序中自由改变TDR0n的值进行最大计数值的设定,但在实际测试中,我即使改变了TDR0n的值,TCR0n也不会从按我设定的TDR0n值进行递减。
我的主函数很简单,就是不断的获取TCR0n的值,然后通过OLED显示计数值,虽然高位用不了,但我也进行了读取,由于手上没有信号源,我只能用stm32f103产生1s的方波,看到的现象就是计数值在递减,每一秒递减1,递减到0后,再从255递减,如此反复下去,我没有配置中断:
void main(void)
{
    /*Start user code. Do not edit comment generated here */
    MD_STATUS result;                   /* communication result */
    hdwinit();
    R_CSI00_Start();                    /* start serial module */
    GPIO_Init();
    R_PORT_Create();
    LCD_Init();
    LCD_CLS();
    //Clk_Out_Init();
    R_TAU0_Create();
    R_TAU0_Channel0_Start();
    TAU0_Counter_Init();
    TAU0_Start();
    LCD_show();
    while (1U)
    {
         
      
        count =(TCR03H >> 8 | TCR03L);
        OLED_Refresh();

    }
    /*End user code. Do not edit comment generated here */

}

小git图显示,对1s的方波进行计数:
源代码分享:
Counter.zip (237.09 KB, 下载次数: 6)

Counter.zip (237.09 KB, 下载次数: 6)


查看本帖全部内容,请登录或者注册

赞赏

2

查看全部赞赏

点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
艾睿电子& Silicon Labs 有奖直播 | 全新蓝牙信道探测:从技术创新到实际应用
直播时间:3月12日(周三)上午10:00
直播奖励:多功能榨汁机、蓝牙音箱、手机支架

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

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