
分享一个我以前在原子的论坛发的贴:2 v' I/ Z. ?9 V4 D4 M8 z 在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:" Y5 q$ K4 N# G1 _# H ![]() $ x* s# n" _! Y: _' \6 ~ 因而可以利用它进行延时。代码如下:$ c* i( V% l' ] % v1 n! k4 @/ [) J; q" h. R #define DWT_CR *(volatile u32 *)0xE0001000 #define DWT_CYCCNT *(volatile u32 *)0xE0001004 #define DEM_CR *(volatile u32 *)0xE000EDFC; V' k3 K6 E# [: ?2 ^0 X# l6 h #define DBGMCU_CR *(volatile u32 *)0xE0042004" z6 x' @* c; x* R/ N& i* C1 o #define DEM_CR_TRCENA (1 |
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
回复:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
精确到ms,也可以用来产生1s的间隔。: g+ H0 M8 @% |5 K
#include "stm32f10x.h"2 F( M! i# _, H* I3 b) M, |8 i9 }
#include "usart1.h"! \) U) V( q4 ~
#include "DWT_Delay.h"
7 ]& I% ?$ D l0 G/ [7 \$ `
/** e4 i0 W5 J8 j* v% y! X2 J
* 函数名:main
* 描述 :主函数
* 输入 :无
* 输出 :无
*/2 x3 {6 B+ E( g F# n
int main(void)8 K0 O1 M: I, z6 Q! ^ z$ d: z
{ 8 h& f5 b6 {9 K; u4 J2 s) @4 j
int i=0;
int j;
/* USART1 config 115200 8-N-1 */1 B! _) w$ T1 G9 F( W: T6 L
USART1_Config();
DelayInit(SystemCoreClock);9 o2 ^' n+ X4 {' i, }
for(j=0;j<20;j++)1 q7 p5 a5 W8 A' v' z2 F
{
printf("%d",i);5 }: E W: j# n |9 W+ N% M
printf("\r\n");1 X3 O$ \. u! b1 _3 N8 W
Delayms(1000);
i=i+1;
}
https://www.stmcu.org.cn/module/ ... read&tid=5987921 U' Z( B& i) S' K
天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法