切换到宽版
  • 2378阅读
  • 15回复

[STM]STM8学习之——timer1周期测量 [复制链接]

上一主题 下一主题
离线zeze10000
 

发帖
2858
M币
8559
专家
35
粉丝
112
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2018-06-25
最近学习到timer1输入捕获功能,挺强大的定时计数器,结构也比较复杂。
首先还是先讲讲timer1的结构框图吧。

概括图
主要有时钟/触发控制单元,基本定时计数模块
输入输出模块
输入捕获输出比较模块。

接下来是输入捕获和输出比较模块框图

这个框图很好的表达了输入捕获需要满足的前提条件

下面是输入部分结构

四个输入通道,带有独立的滤波和边沿检测器

以通道1为例的结构图

信号经过滤波、边沿检测,再到预分频才能进入输入捕获单元

结构大体就是这样
那如何测量一个方波信号的周期呢?
其实也简单,就是在出现测定边沿的时候记录下timer1里的数值,再次出现相同边沿时再记录一次。
两次数据之差就是输入信号的周期。

进行周期测量时,timer1的计数器使用内部时钟计数,当出现捕获时计数器内的数值存入捕获寄存器
两次捕获就能测出信号周期。

看着挺简单的,实际上也应当是很简单的。但是我在使用捕获中断来测量时总是得不到正确的结果。
使用while循环检测捕获标志位就能得到正确结果。
原因还没找到,这里就先用while循环检测吧。

CPU时钟分频作为输入频率源

8M 64分频 得到125KHZ时钟

在线仿真


计算的频率正确无误


最后贴上测试代码
  1. /*周期测量*/
  2. #include<iostm8s105k4.h>
  3. unsigned int T,T1,T2;
  4. unsigned int result;
  5. void init()
  6. {
  7.   
  8.   CLK_SWCR|=0x02;       //时钟切换
  9.   CLK_SWR=0xB4;         //外部8M晶体
  10.   CLK_CKDIVR=0x00;      //不分频
  11.   CLK_CCOR=0x15;        //Fcpu/64输出 125K
  12.   
  13.   PD_DDR_DDR0=1;        //PD0配置 时钟输出
  14.   PD_CR1_C10=1;
  15.   PD_CR2_C20=1;
  16.   
  17.   PC_DDR_DDR1=0;        //PC1配置 捕获
  18.   PC_CR1_C11=1;
  19.   PC_CR2_C21=0;
  20.   
  21.   TIM1_ARRH=0xff;       //初始化重装载寄存器
  22.   TIM1_ARRL=0xff;
  23.   TIM1_CCR1H=0;         //初始化捕获寄存器
  24.   TIM1_CCR1L=0;
  25.   TIM1_CCMR1=0x01;      //配置捕获通道
  26.   TIM1_CR1=0x01;        //开计数器
  27.   TIM1_CCER1=0x01;      //开捕获
  28.   
  29.   
  30. }
  31. int main( void )
  32. {
  33.   init();
  34.   while(1)
  35.   {
  36.     while(!(TIM1_SR1&0x02)); //等待捕获标志 首次捕获
  37.     
  38.       T1=TIM1_CCR1H<<8;
  39.       T1|=TIM1_CCR1L;
  40.     
  41.     while(!(TIM1_SR1&0x02)); //等待捕获标志 二次捕获
  42.     
  43.       T2=TIM1_CCR1H<<8;
  44.       T2|=TIM1_CCR1L;
  45.     
  46.       if(T2>T1) T=8000/(T2-T1); //计算频率 单位K 判断T1、T2大小,避免计数器溢出影响
  47.     
  48.   }
  49. }


使用捕获中断测量周期频率的代码还是没弄出来。
有哪位朋友做过捕获中断测量周期频率的还请指点一二!

THE END!


本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共5条打赏M币+43专家+1
66ok66 M币 +8 優秀文章 2018-06-27
2545889167 专家 +1 以資鼓勵 2018-06-25
2545889167 M币 +20 以資鼓勵 2018-06-25
夕阳飞雪 M币 +5 兄弟,有没有小白入门级的笔记分享点,教程我看的一头雾水,看不下去。 2018-06-25
junyee M币 +10 原創內容 2018-06-25
离线触景情伤

发帖
3862
M币
28
专家
4
粉丝
70
只看该作者 1楼 发表于: 2018-06-25
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 2楼 发表于: 2018-06-25
回 触景情伤 的帖子
请登录后查看
离线junyee

发帖
4100
M币
1036
专家
12
粉丝
165
只看该作者 3楼 发表于: 2018-06-25
请登录后查看
离线夕阳飞雪

发帖
1085
M币
1599
专家
8
粉丝
44
只看该作者 4楼 发表于: 2018-06-25
请登录后查看
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 5楼 发表于: 2018-06-25
回 junyee 的帖子
请登录后查看
离线zeze10000

发帖
2858
M币
8559
专家
35
粉丝
112
只看该作者 6楼 发表于: 2018-06-25
回 夕阳飞雪 的帖子
请登录后查看
离线junyee

发帖
4100
M币
1036
专家
12
粉丝
165
只看该作者 7楼 发表于: 2018-06-25
回 夕阳飞雪 的帖子
请登录后查看
离线junyee

发帖
4100
M币
1036
专家
12
粉丝
165
只看该作者 8楼 发表于: 2018-06-25
回 zeze10000 的帖子
请登录后查看
离线夕阳飞雪

发帖
1085
M币
1599
专家
8
粉丝
44
只看该作者 9楼 发表于: 2018-06-25
回 zeze10000 的帖子
请登录后查看
快速回复
限80 字节
温馨提示:欢迎交流讨论,请勿发布纯表情、纯引用等灌水帖子;以免被删除
 
上一个 下一个