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

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

[复制链接]
zww 发布时间:2014-4-19 18:19
分享一个我以前在原子的论坛发的贴:" F! k8 `9 M" \6 `6 Q
在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:
5 c3 G' _2 _6 Z  5 j6 |* K/ F$ n5 X- @
 
8 z, R) k" ]6 _5 r5 H! ~( Z% H 
- D9 N, D  z3 ?* ]! g因而可以利用它进行延时。代码如下:# {0 ]. k- W) J+ [2 |# v3 Q; d
# J) d- Y0 \- z* {1 F
#define  DWT_CR      *(volatile u32  *)0xE0001000
! \# u  o& A7 H. M3 \2 A$ |#define  DWT_CYCCNT  *(volatile u32 *)0xE0001004
% n2 I0 y* y! j6 \0 s- z0 ]#define   DEM_CR      *(volatile u32 *)0xE000EDFC
6 g8 l6 W' K& b  j: C#define  DBGMCU_CR   *(volatile u32  *)0xE0042004
+ s$ I6 g" Z0 c+ h0 V6 ]#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' F5 o, P) D+ P& W& k  h+ @8 D
有没有实际使用?精度能到us还是ns?

# m: f9 d9 X4 @5 e精确到ms,也可以用来产生1s的间隔。1 h, @  ^- Q! p! R6 _2 Q) X0 C8 L( ]
#include "stm32f10x.h"  \, N' `; S9 S/ |+ q0 K
#include "usart1.h"6 S/ t  ?' L5 D5 ]" F2 q, H
#include "DWT_Delay.h"2 h) P0 U$ F# X5 x2 \

- z, Y/ M7 n5 U7 J
, J4 v3 W; m. p7 k. Y) V/*
* g! b) r. V+ J7 p- z+ O * 函数名:main
' R- [# ~4 }" B2 m/ y3 j* Q * 描述  :主函数8 a3 k1 H; Z- N* X8 A1 }
* 输入  :无) r  W' ^' w( p8 W
* 输出  :无" I5 ]9 s- H7 w7 g: j
*/6 _' h; Q  _; g, x
int main(void)
8 Y: y1 @- ]' o* i) b# \{       
( A. ~$ E& g( @. N  K# _        int i=0;5 O. u. ^; Z  H% {
        int j;: s7 G( o( b+ `1 j; O% o
        /* USART1 config 115200 8-N-1 */. ^3 z, D; K) M" _. a- j. k
        USART1_Config();5 D6 Z" F8 v: {
        DelayInit(SystemCoreClock);7 ~; f! ~. G/ |4 w7 C
        for(j=0;j<20;j++)0 W5 H% h1 k, \) g4 y. s
        {
+ i! P. b' v& n- O6 y                printf("%d",i);
& L5 ^3 F( ?3 Q5 p+ Z  g. }+ S  t; c, T                printf("\r\n");
' v7 n8 k) p% {  d3 c" H                Delayms(1000);
" P) U- m$ @1 R4 }6 a" v2 a                i=i+1;4 P& y7 ?1 h/ ?2 @( Z! s# x' h
        }
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
论坛理网友的这个帖子计时方式更好一些:
- e9 D( @" G( i( O1 d* x/ o, ~8 T2 Uhttps://www.stmcu.org.cn/module/ ... read&tid=598792
! V5 Q! g  t2 [天天小宇---------------[原创] 【经验分享】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 手机版