This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

协议栈中定时器如何设置成微秒级计时

//实现HalMicroSecTimerStart和HalMicroSecTimerStop函数用于外部调用读取计时。

void HalMicroSecTimerStart( void )
{
static uint8 once = 0;
if( once == 0)
{
HalTimerInit();
once = 1;
}
HalTimerConfig(HAL_TIMER_0,
HAL_TIMER_MODE_NORMAL,
HAL_TIMER_CHANNEL_SINGLE,
HAL_TIMER_CH_MODE_OVERFLOW ,
TRUE,
halMicroSecTimerTickCB);
MicroSecCounter = 0;
HalTimerStart(HAL_TIMER_0, 1);
}

void halMicroSecTimerTickCB(uint8 timerId, uint8 channel, uint8 channelMode)
{
if( timerId == HAL_TIMER_0 && channel == HAL_TIMER_CHANNEL_SINGLE
&& channelMode == HAL_TIMER_CH_MODE_OVERFLOW )
{
MicroSecCounter += 8;
}
}

uint16 HalMicroSecTimerStop( void )
{
HalTimerStop(HAL_TIMER_0);
return MicroSecCounter;
}

//初始化部分
halTimerRecord[HW_TIMER_3].prescale = HAL_TIMER3_8_PRESCALE;
halTimerRecord[HW_TIMER_3].clock = HAL_TIMER_32MHZ;
halTimerRecord[HW_TIMER_3].prescaleVal = HAL_TIMER3_8_PRESCALE_VAL;

//预分频设置为1

#define HAL_TIMER3_8_PRESCALE HAL_TIMER34_8_TC_DIV1
#define HAL_TIMER3_8_PRESCALE_VAL 1

32MHz的晶振1分频 + 8位定时器

(1/32) / 1 * 2^8 = 8

应该是8us溢出一次,每次溢出回调我计数增加8,但是实际取出来的时间却跟预期对不上,请教一下这个T3计时器设置有什么错误?