【GD32笔记】:P01 GD32F103C8T6 DWT的使用
kernel_dwt.c#includestdint.h#includegd32f10x.h/** *********************************************************** * brief DWT初始化配置 * param * return *********************************************************** */voidDelayInit(void){/* 关闭 TRC */CoreDebug-DEMCR~CoreDebug_DEMCR_TRCENA_Msk;/* 打开 TRC */CoreDebug-DEMCR|CoreDebug_DEMCR_TRCENA_Msk;/* 关闭计数功能 */DWT-CTRL~DWT_CTRL_CYCCNTENA_Msk;/* 打开计数功能 */DWT-CTRL|DWT_CTRL_CYCCNTENA_Msk;/* 计数清零 */DWT-CYCCNT0;}/** *********************************************************** * brief 微秒级延时函数 * param nUs最大延时时间( 2^32 / 内核主频 ) * 10^6 us * return *********************************************************** */voidDelayNus(uint32_t nUs){uint32_t tickStartDWT-CYCCNT;/* 转换为nUs对应的时钟跳动次数*/nUs*(rcu_clock_freq_get(CK_AHB)/1000000);/* 延时等待 */while((DWT-CYCCNT-tickStart)nUs);}/** *********************************************************** * brief 毫秒级延时函数 * param nMs延时时间n毫秒 * return *********************************************************** */voidDelayNms(uint32_t nMs){for(uint32_t i0;inMs;i){DelayNus(1000);}}kernel_dwt.h#ifndef __KERNEL_DWT_H_ #define __KERNEL_DWT_H_ #includestdint.h/** *********************************************************** * brief DWT初始化配置 * param * return *********************************************************** */voidDelayInit(void);/** *********************************************************** * brief 微秒级延时函数 * param nUs最大延时时间( 2^32 / 内核主频 ) * 10^6 us * return *********************************************************** */voidDelayNus(uint32_t nUs);/** *********************************************************** * brief 毫秒级延时函数 * param nMs延时时间n毫秒 * return *********************************************************** */voidDelayNms(uint32_t nMs);#endif应用#includebsp_led.h#includekernel_dwt.h#includegd32f10x.h#includegd32f10x_libopt.hvoidHardware_Init(void){LED_Init();DelayInit();}intmain(void){Hardware_Init();while(1){LED_ON;DelayNms(500);LED_OFF;DelayNms(500);}}