搜索
bottom↓
回复: 3

利用STM32定时器的One Pulse Mode实现简单准确的延时功能

[复制链接]

出0入0汤圆

发表于 2020-5-10 17:30:29 | 显示全部楼层 |阅读模式
本帖最后由 JackFrost 于 2020-5-10 17:36 编辑

     这几天在玩STM32H750,注意到TIM里面有个One Pulse Mode,TIMx_CR1的OPM位
位 3 OPM:单脉冲模式 (One-pulse mode)
0:计数器在发生更新事件时不会停止计数
1:计数器在发生下一更新事件时停止计数(将 CEN 位清零)
     OPM置位后当CEN置1启动CNT计数达到ARP的值后触发更新事件会自动讲CEN位清零,利用这个特性可以实现很准确的延时函数,其中TIM2/TIM5是32位的寄存器,TIM的时钟是240MHZ,可以设置预分频为24-1,这样一个CNT计数就是0.1微秒,如此32为CNT就能实现429秒的长时间精准延时了,非常好用,设置如下,利用CUBEMX先设置

这样简单设置下就OK了,延时函数的实现非常简单

//采用TIM5 One-Pulse模式的准确延时函数,总延时的时间为Delay01uS/10微秒,最长429秒
void Delay01uS(uint32_t Delay01uS) {
        TIM5->ARR = Delay01uS-1;        //设置要延时的时间Delay01uS*0.1uS
        TIM5->CR1 |= TIM_CR1_CEN; //启动TIM6计数,计数更新事件后CNT自动清零
        while( TIM5->CR1 & TIM_CR1_CEN); // ARP更新事件后CEN位自动清零
}
函数的使用
  while (1)
  {
                //HAL_Delay(1000);
                Delay01uS(5000000*10); //延时5秒               
                printf("HelloWrold!\n");
                Delay01uS(2000000*10); //延时2秒               
                printf("HelloWrold!\n");
  }
      这个方法非常简单且精准,大家不妨一试

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入24汤圆

发表于 2020-5-10 17:43:19 来自手机 | 显示全部楼层
有点浪费了啊,一个四通道的32位定时器,我连systick都舍不用,用内核赠送的DWT定时器

出0入24汤圆

发表于 2020-5-10 17:44:55 来自手机 | 显示全部楼层
还能顺带实现计时功能,用来测量代码执行时间

出0入0汤圆

 楼主| 发表于 2020-5-10 17:46:09 | 显示全部楼层
20061002838 发表于 2020-5-10 17:43
有点浪费了啊,一个四通道的32位定时器,我连systick都舍不用,用内核赠送的DWT定时器 ...

就你抠门啊  ,H7里面的资源太丰富了,一大堆定时器好用
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 06:45

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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