你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时

[复制链接]
zww 发布时间:2014-4-19 18:19
分享一个我以前在原子的论坛发的贴:
. C: W+ N# R+ _# K: E5 B在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:. g4 F* T2 v  m8 S- t
  
: O6 }2 m% ^- f7 r   U( }4 Z4 J$ D& Z/ e
 
! u6 r- v6 ~* M, Q因而可以利用它进行延时。代码如下:
3 S( _- J! \9 `! k' \2 H5 a* ^: C* s2 c3 v/ @: L& @- @& c6 G% O( m
#define  DWT_CR      *(volatile u32  *)0xE0001000- E" p9 ]& d8 x! v4 `! X
#define  DWT_CYCCNT  *(volatile u32 *)0xE0001004  W9 j& V- }& h6 W
#define   DEM_CR      *(volatile u32 *)0xE000EDFC5 U1 i6 T1 J$ d8 D# o
#define  DBGMCU_CR   *(volatile u32  *)0xE0042004
: _9 t9 e4 n6 O, e! L#define  DEM_CR_TRCENA                   (1
收藏 1 评论13 发布时间:2014-4-19 18:19

举报

13个回答
dsdsadsa 回答时间:2014-4-19 18:29:34

RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时

谢谢楼主分享,以后多交流
一灯一登 回答时间:2014-4-21 22:38:37

回复:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时

佩服 楼主的观察力和执行力
putiandiao 回答时间:2014-4-30 08:27:08

RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时

在延时里面,不还是在无限循环判断吗?也是比较消耗CPU的吧?
6874577 回答时间:2015-1-6 09:46:34
说的真好
流浪的方丈2015 回答时间:2015-1-6 13:39:22
感觉不靠谱
ataudio 回答时间:2015-1-6 14:09:52
有没有实际使用?精度能到us还是ns?
steven陈 回答时间:2015-1-17 22:31:56
ataudio 发表于 2015-1-6 14:09
) a" F8 ^8 m6 k有没有实际使用?精度能到us还是ns?

4 Q2 K: B* N) H; N. P+ c& W精确到ms,也可以用来产生1s的间隔。
3 M% }) X8 s" v+ [4 }- y/ W#include "stm32f10x.h"
& u& r5 H' Z; a* Q#include "usart1.h"
: x- K( U* A# I+ T/ F#include "DWT_Delay.h"/ a# F: u2 ]! c4 R' ^* h8 g

) Y' X3 l0 b7 t- U+ q' L- R: @; o; A& O
/*
  q9 ^; v& C- ]0 S * 函数名:main
9 \7 }2 e) A" {! L( y7 b- d * 描述  :主函数
4 G* K# d0 {* P( Y$ K/ m$ Z* m6 r7 I * 输入  :无
+ `: j" Q. G  M& m1 s: Q * 输出  :无
/ y9 k' m: V, X. l */
5 O8 p7 s& c2 u4 [7 Bint main(void)
) P% L  ^. `! n7 ?7 A/ ~4 g{        5 O9 X1 N3 K# A9 t# i% ]
        int i=0;
- C' m' |: S3 e/ I9 u, M6 V) G        int j;
2 \# P& N$ L: }% e        /* USART1 config 115200 8-N-1 */
# W+ p( l2 m* n. `$ [" f" p/ o        USART1_Config();
8 H* O7 M& B3 B        DelayInit(SystemCoreClock);
9 N9 m- F: U$ a6 ^( ^        for(j=0;j<20;j++)
0 _& Q+ z% n  F% w, N+ R        {
; Q' E3 ^/ I" K0 B; }                printf("%d",i);- Y7 M8 j3 h$ I( D
                printf("\r\n");* y& x6 m3 [4 C0 \" M% W- {
                Delayms(1000);
0 f$ H% X: ~9 z: U                i=i+1;$ `8 d6 N$ F, S  _/ L0 Z
        }
wyxy163@126.com 回答时间:2015-1-18 21:57:19
提示: 作者被禁止或删除 内容自动屏蔽
埃斯提爱慕 回答时间:2015-1-18 22:12:30
提示: 作者被禁止或删除 内容自动屏蔽
hanmcustm 回答时间:2015-1-18 22:54:47
阻塞CPU吧
ataudio 回答时间:2015-1-19 09:05:10
论坛理网友的这个帖子计时方式更好一些:% z; s2 Z3 D: M2 A6 j0 T
https://www.stmcu.org.cn/module/ ... read&tid=598792
7 O$ ?) y8 P' J( |/ B) I; [4 G天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法
AndyYau-268557 回答时间:2015-1-19 15:07:54
用tick就行了
seasky001 回答时间:2018-12-25 15:58:22
了解一下

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版