
分享一个我以前在原子的论坛发的贴: 在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图: ![]() " v8 E5 W( z1 S5 ~- n6 S $ n6 K" G! `" i0 \ Q% s/ B- b 因而可以利用它进行延时。代码如下: ) 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 #define DEM_CR *(volatile u32 *)0xE000EDFC #define DBGMCU_CR *(volatile u32 *)0xE0042004- E- R; W; ?, h1 n2 U Q9 R5 S4 A #define DEM_CR_TRCENA (1 |
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
回复:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
精确到ms,也可以用来产生1s的间隔。
#include "stm32f10x.h") @6 e2 o! J/ _" ?' o
#include "usart1.h"! {: K' M v( M
#include "DWT_Delay.h"% u. {' E3 H/ g" ^+ h
3 e5 A( D* l# S% C! g) W' s. i
/*
* 函数名:main; E" x, m5 a( n# h3 h. }( ~
* 描述 :主函数
* 输入 :无
* 输出 :无
*// 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;
/* USART1 config 115200 8-N-1 */
USART1_Config();4 k. e: l7 ~8 s4 ^" L6 _0 X
DelayInit(SystemCoreClock);
for(j=0;j<20;j++)6 Z3 E3 J4 S( n6 f% v) I
{
printf("%d",i);
printf("\r\n");
Delayms(1000);5 m8 d) V/ p- i( z
i=i+1;3 W* z# X6 K: H1 z D
}
https://www.stmcu.org.cn/module/ ... read&tid=598792' u0 L: Y3 R; |+ G( S$ M
天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法