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

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

[复制链接]
zww 发布时间:2014-4-19 18:19
分享一个我以前在原子的论坛发的贴:1 Q+ Y) ], G- u3 @, z
在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:
# u  o5 e: a+ F2 n8 T/ X1 V  * i3 {+ v& e& D8 v  J
 6 D8 _5 N  m* G# d9 M
 9 Z" a5 R+ [9 F9 g7 F5 }
因而可以利用它进行延时。代码如下:
3 I5 M' s4 }" X% U; W6 t5 G9 q3 C5 G
#define  DWT_CR      *(volatile u32  *)0xE00010008 s( _# Z7 h; z& i  d9 D& ]
#define  DWT_CYCCNT  *(volatile u32 *)0xE00010042 J* {" S! `/ U4 `7 {
#define   DEM_CR      *(volatile u32 *)0xE000EDFC
. |5 H$ O/ b, Z2 {% P#define  DBGMCU_CR   *(volatile u32  *)0xE0042004- T, M7 j* c6 ^: K& ~) O
#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
  Z7 |6 @+ W6 c2 J; ?1 x: O+ C有没有实际使用?精度能到us还是ns?
; q1 A. s% L8 f
精确到ms,也可以用来产生1s的间隔。
. x" U6 C5 L# y' V# a# Y7 ^  b#include "stm32f10x.h"
- s' a4 l" m2 w4 _#include "usart1.h"' x) o  a9 M9 t7 W1 h, U
#include "DWT_Delay.h"
* |; f/ Y# l6 a" h6 H! p# R' n% v. ?( v! o" _

: \1 l6 `* s3 R" z6 i8 F' v, z/*
0 H- p# P) a: q* j * 函数名:main
. P( E. N- |& A. X; C * 描述  :主函数
% Y- {3 k# S! s5 M% L * 输入  :无2 @$ T) t1 I$ N, ]* L
* 输出  :无
1 C/ s. F) r5 Y6 J */" `$ J) C2 `1 w$ [' M5 s
int main(void). G; h3 `; U* J5 D2 W
{       
( _6 }4 c/ P6 }, A        int i=0;& j/ A2 c: k5 F; v7 w' T! P: T; G
        int j;
, ~- o/ S4 s3 l8 r* B3 m! b        /* USART1 config 115200 8-N-1 */
0 U( ~% p- w* ?; y/ x  D        USART1_Config();
. F# j+ F" L7 v. ]) E        DelayInit(SystemCoreClock);# O% u' V* o1 v! z# m1 d
        for(j=0;j<20;j++)
# q+ a/ K, c/ D+ F% x* Q        {  q: d* H& E2 v$ S& y! X+ R2 m
                printf("%d",i);% e! o# ~3 w' w1 }/ ~
                printf("\r\n");. ^% [8 a/ k- h8 K8 `
                Delayms(1000);
1 B3 o7 N" F) K& X, l                i=i+1;( p/ h+ K6 h8 Q5 ]2 v6 J
        }
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
论坛理网友的这个帖子计时方式更好一些:* C8 J+ B# Z. u3 L0 o# }
https://www.stmcu.org.cn/module/ ... read&tid=598792# J2 x! H" y+ K7 E
天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法
AndyYau-268557 回答时间:2015-1-19 15:07:54
用tick就行了
seasky001 回答时间:2018-12-25 15:58:22
了解一下

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版