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

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

[复制链接]
zww 发布时间:2014-4-19 18:19
分享一个我以前在原子的论坛发的贴:
; H1 v$ T- [+ C在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:
1 ?$ P0 {7 B5 M  
: c! ^! v2 Q( K, k* d* H" J* l " v8 E5 W( z1 S5 ~- n6 S
 $ n6 K" G! `" i0 \  Q% s/ B- b
因而可以利用它进行延时。代码如下:
! t9 p: l3 Y6 w9 Z9 R! Q8 {. \) l' Z3 N7 F* U" S8 P3 n# x
#define  DWT_CR      *(volatile u32  *)0xE0001000! X; T- \. {6 o7 T# E, T- m
#define  DWT_CYCCNT  *(volatile u32 *)0xE0001004
! f* _2 ~* Q: h" P#define   DEM_CR      *(volatile u32 *)0xE000EDFC
6 a8 l4 R( r3 T#define  DBGMCU_CR   *(volatile u32  *)0xE0042004- E- R; W; ?, h1 n2 U  Q9 R5 S4 A
#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/ j7 ]& [7 U# Z* I5 g
有没有实际使用?精度能到us还是ns?
2 C6 i- ]: p5 C* W6 B" I
精确到ms,也可以用来产生1s的间隔。
( r8 X( V! ]) r, ^4 \& {7 L#include "stm32f10x.h") @6 e2 o! J/ _" ?' o
#include "usart1.h"! {: K' M  v( M
#include "DWT_Delay.h"% u. {' E3 H/ g" ^+ h

, N$ r7 l! w, {5 L' y0 w3 e5 A( D* l# S% C! g) W' s. i
/*
1 f4 B! s( v! u' l * 函数名:main; E" x, m5 a( n# h3 h. }( ~
* 描述  :主函数
# h9 ?5 Q  s& @: v. ~2 G * 输入  :无
, J+ a+ L, ^# S: t3 z4 Q7 G& M" q * 输出  :无
$ e4 F1 e0 `( _* M4 z2 N* N *// a- ?, ]  L: M
int main(void)7 Y% G* d, w* q9 E
{        7 [. u6 s3 U" X$ P6 N4 H
        int i=0;0 ~! Y: K7 N! O+ r( r' T1 t& V; z
        int j;
! r# q1 [3 {- g+ Q% Y        /* USART1 config 115200 8-N-1 */
4 v2 ]" p4 b' k" j+ X        USART1_Config();4 k. e: l7 ~8 s4 ^" L6 _0 X
        DelayInit(SystemCoreClock);
& Z, @' t( \* J5 {+ X5 H; f% n        for(j=0;j<20;j++)6 Z3 E3 J4 S( n6 f% v) I
        {
5 V; H7 [, o  K9 L6 m5 B                printf("%d",i);
0 Q3 F; C7 _/ D# g  w3 L+ b: H+ [                printf("\r\n");
- G0 w+ h) E+ b! S1 I- S9 Q+ ^0 y9 x                Delayms(1000);5 m8 d) V/ p- i( z
                i=i+1;3 W* z# X6 K: H1 z  D
        }
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
论坛理网友的这个帖子计时方式更好一些:
( \0 I% D6 y9 z3 S" Z1 F5 ^! Y5 N6 N& @https://www.stmcu.org.cn/module/ ... read&tid=598792' u0 L: Y3 R; |+ G( S$ M
天天小宇---------------[原创] 【经验分享】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 手机版