
分享一个我以前在原子的论坛发的贴:" F! k8 `9 M" \6 `6 Q 在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图: ![]() 因而可以利用它进行延时。代码如下:# {0 ]. k- W) J+ [2 |# v3 Q; d # J) d- Y0 \- z* {1 F #define DWT_CR *(volatile u32 *)0xE0001000 #define DWT_CYCCNT *(volatile u32 *)0xE0001004 #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的间隔。1 h, @ ^- Q! p! R6 _2 Q) X0 C8 L( ]
#include "stm32f10x.h" \, N' `; S9 S/ |+ q0 K
#include "usart1.h"6 S/ t ?' L5 D5 ]" F2 q, H
#include "DWT_Delay.h"2 h) P0 U$ F# X5 x2 \
/*
* 函数名:main
* 描述 :主函数8 a3 k1 H; Z- N* X8 A1 }
* 输入 :无) r W' ^' w( p8 W
* 输出 :无" I5 ]9 s- H7 w7 g: j
*/6 _' h; Q _; g, x
int main(void)
{
int i=0;5 O. u. ^; Z H% {
int j;: s7 G( o( b+ `1 j; O% o
/* USART1 config 115200 8-N-1 */. ^3 z, D; K) M" _. a- j. k
USART1_Config();5 D6 Z" F8 v: {
DelayInit(SystemCoreClock);7 ~; f! ~. G/ |4 w7 C
for(j=0;j<20;j++)0 W5 H% h1 k, \) g4 y. s
{
printf("%d",i);
printf("\r\n");
Delayms(1000);
i=i+1;4 P& y7 ?1 h/ ?2 @( Z! s# x' h
}
https://www.stmcu.org.cn/module/ ... read&tid=598792
天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法