
分享一个我以前在原子的论坛发的贴: 在学习和使用STM32F103系列MCU中,研究了一下CM3手册,发现调试组件中有对CPU时钟进行计数的功能(CYCCNT),如下图:. g4 F* T2 v m8 S- t ![]() U( }4 Z4 J$ D& Z/ e 因而可以利用它进行延时。代码如下: 3 v/ @: L& @- @& c6 G% O( m #define DWT_CR *(volatile u32 *)0xE0001000- E" p9 ]& d8 x! v4 `! X #define DWT_CYCCNT *(volatile u32 *)0xE0001004 W9 j& V- }& h6 W #define DEM_CR *(volatile u32 *)0xE000EDFC5 U1 i6 T1 J$ d8 D# o #define DBGMCU_CR *(volatile u32 *)0xE0042004 #define DEM_CR_TRCENA (1 |
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
回复:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
RE:【MCU实战经验】STM32F103不占用定时器(包括SysTick)实现精确延时
精确到ms,也可以用来产生1s的间隔。
#include "stm32f10x.h"
#include "usart1.h"
#include "DWT_Delay.h"/ a# F: u2 ]! c4 R' ^* h8 g
' L- R: @; o; A& O
/*
* 函数名:main
* 描述 :主函数
* 输入 :无
* 输出 :无
*/
int main(void)
{ 5 O9 X1 N3 K# A9 t# i% ]
int i=0;
int j;
/* USART1 config 115200 8-N-1 */
USART1_Config();
DelayInit(SystemCoreClock);
for(j=0;j<20;j++)
{
printf("%d",i);- Y7 M8 j3 h$ I( D
printf("\r\n");* y& x6 m3 [4 C0 \" M% W- {
Delayms(1000);
i=i+1;$ `8 d6 N$ F, S _/ L0 Z
}
https://www.stmcu.org.cn/module/ ... read&tid=598792
天天小宇---------------[原创] 【经验分享】STM32中实用的精确延时方法