
分享一个我以前在原子的论坛发的贴: 在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:, x2 X2 b' s u! A8 n: f2 L2 c ![]() 9 a* v4 u! p- O4 }5 F' q7 I: Q! L Q 因而可以利用它进行延时。代码如下:0 B' O7 v2 _( f7 _- u #define DWT_CR *(volatile u32 *)0xE0001000 #define DWT_CYCCNT *(volatile u32 *)0xE0001004! d- s. p0 q4 |5 F& k$ M) | #define DEM_CR *(volatile u32 *)0xE000EDFC #define DBGMCU_CR *(volatile u32 *)0xE0042004 #define DEM_CR_TRCENA (1 |
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
回复:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
精确到ms,也可以用来产生1s的间隔。* J/ D2 D. Z" J% d9 c* x
#include "stm32f10x.h"9 o. a* D# Q* N2 u0 Z, | y
#include "usart1.h"
#include "DWT_Delay.h"
& v9 M b6 C' S+ P
8 B9 t- Q, y0 r0 ?. H# u
/*
* 函数名:main9 w( P, a: k& S/ m) O) Z4 _
* 描述 :主函数
* 输入 :无
* 输出 :无
*/
int main(void)
{ + x6 u; C4 ` z0 v
int i=0;
int j;
/* USART1 config 115200 8-N-1 */
USART1_Config();
DelayInit(SystemCoreClock);
for(j=0;j<20;j++)
{/ Z. @. R' D- {9 z0 d4 W
printf("%d",i);, `% e/ N5 D% N: ?' d/ r
printf("\r\n");, R- Y7 E A9 j2 K0 A) |* a, D
Delayms(1000);
i=i+1; c) C( G$ `' q. S3 c* w. u
}
https://www.stmcu.org.cn/module/ ... read&tid=598792
天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法