89 lines
2.1 KiB
C
89 lines
2.1 KiB
C
/**
|
|
******************************************************************************
|
|
* @file bsp_dwt.h
|
|
* @author Wang Hongxi
|
|
* @version V1.1.0
|
|
* @date 2022/3/8
|
|
* @brief
|
|
******************************************************************************
|
|
* @attention
|
|
*
|
|
******************************************************************************
|
|
*/
|
|
#ifndef _BSP_DWT_H
|
|
#define _BSP_DWT_H
|
|
|
|
#include "main.h"
|
|
#include "stdint.h"
|
|
|
|
typedef struct
|
|
{
|
|
uint32_t s;
|
|
uint16_t ms;
|
|
uint16_t us;
|
|
} DWT_Time_t;
|
|
|
|
|
|
/**
|
|
* @brief 初始化DWT,传入参数为CPU频率,单位MHz
|
|
*
|
|
* @param CPU_Freq_mHz c板为168MHz,A板为180MHz
|
|
*/
|
|
void DWT_Init(uint32_t CPU_Freq_mHz);
|
|
|
|
/**
|
|
* @brief 获取两次调用之间的时间间隔,单位为秒/s
|
|
*
|
|
* @param cnt_last 上一次调用的时间戳
|
|
* @return float 时间间隔,单位为秒/s
|
|
*/
|
|
float DWT_GetDeltaT(uint32_t *cnt_last);
|
|
|
|
/**
|
|
* @brief 获取两次调用之间的时间间隔,单位为秒/s,高精度
|
|
*
|
|
* @param cnt_last 上一次调用的时间戳
|
|
* @return double 时间间隔,单位为秒/s
|
|
*/
|
|
double DWT_GetDeltaT64(uint32_t *cnt_last);
|
|
|
|
/**
|
|
* @brief 获取当前时间,单位为秒/s,即初始化后的时间
|
|
*
|
|
* @return float 时间轴
|
|
*/
|
|
float DWT_GetTimeline_s(void);
|
|
|
|
/**
|
|
* @brief 获取当前时间,单位为毫秒/ms,即初始化后的时间
|
|
*
|
|
* @return float
|
|
*/
|
|
float DWT_GetTimeline_ms(void);
|
|
|
|
/**
|
|
* @brief 获取当前时间,单位为微秒/us,即初始化后的时间
|
|
*
|
|
* @return uint64_t
|
|
*/
|
|
uint64_t DWT_GetTimeline_us(void);
|
|
|
|
/**
|
|
* @brief DWT延时函数,单位为秒/s
|
|
* @attention 该函数不受中断是否开启的影响,可以在临界区和关闭中断时使用
|
|
* @note 禁止在__disable_irq()和__enable_irq()之间使用HAL_Delay()函数,应使用本函数
|
|
*
|
|
* @param Delay 延时时间,单位为秒/s
|
|
*/
|
|
void DWT_Delay(float Delay);
|
|
|
|
/**
|
|
* @brief DWT更新时间轴函数,会被三个timeline函数调用
|
|
* @attention 如果长时间不调用timeline函数,则需要手动调用该函数更新时间轴,否则CYCCNT溢出后定时和时间轴不准确
|
|
*/
|
|
void DWT_SysTimeUpdate(void);
|
|
|
|
|
|
|
|
#endif /* BSP_DWT_H_ */
|