OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4190|回复: 0

<新手向>第二期 裸机开发 EPIT 定时器的定时 时间不是预期值的求助

[复制链接]

5

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
254
金钱
254
注册时间
2020-3-22
在线时间
35 小时
发表于 2020-5-24 23:16:18 | 显示全部楼层 |阅读模式
6金钱
本帖最后由 YOKI 于 2020-5-24 23:20 编辑

在学习了EPIT 和 GPT定时器后我想写一个自己的 精确延时程序,
视频里用的是GPT1定时器实现的,GPT定时器有输入捕获功能,用来做长期运行的定时器太浪费
因为考虑到EPIT定时器是向下计数的定时器,功能更纯粹,所以选择使用 EPIT2 定时器来实现,
另外也想检验一下自己的学习效果。
/**********************************************
函数功能:延时1ms 使用 EPIT2定时器,但不采取中断模式
采取 查询中断标志位 EPIT2->SR 的  方式
查询   EPIT2定时器是否计时结束

**********************************************/
void delay_epit_1mS(void)
{ unsigned int time_count;
  EPIT2->CR = 0; /* 先清零CR寄存器 */
  EPIT2->CR |=  (1 << 1) |                   //写 1    EPIT2从装载值开始计数
                        (1 << 2) |                   //写 1    比较中断使能
                        (1 << 3) |                  //写 1    set and forget模式
                       (65 << 4)|                  //写分频值  66 分频 1Mhz
                       (01 << 24);                //写 01   时钟选择 IPG_CLK
  EPIT2->LR = (1000000/10000);         //写重装载值 100uS
  EPIT2->CMPR = 0x00000000;           //比较值为0 即倒计数到 0 发生中断
  EPIT2->CR |= (1 << 0);                   // EPIT2 使能
  for(time_count = 10; (EPIT2->SR & (1<<0)) && (time_count > 0);time_count--)
      {
        EPIT2->SR |= (1<<0);                // 写EPIT2_SR 写1清零 清除中断标志位
      }
  while(!(time_count>0))                     //
      {
      EPIT2->CR &= ~(1<<0);               // EPIT1 关闭
      EPIT2->CR |= (00 << 24);            // EPIT1 时钟关闭  
      }
}
但是将以上函数在延时函数中调用时虽然可以执行但计时时间却远远小于定时器设定的时间。求大神解答

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 12:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表