初级会员
- 积分
- 155
- 金钱
- 155
- 注册时间
- 2023-2-14
- 在线时间
- 51 小时
|
10金钱
最近做了一个外部脉冲计数的程序,但是精度不是很准确,600HZ的时候就会有1-2个的误差,然后900HZ的时候就有3个的误差,希望有大神帮忙解惑
void TIM4_CH1_Init(void)
{
// TIM_IC_InitTypeDef TIM4_CH1Config;
TIM_ClockConfigTypeDef sClockSoureConfig;
sClockSoureConfig.ClockSource=TIM_CLOCKSOURCE_TI1;
sClockSoureConfig.ClockPolarity=TIM_CLOCKPOLARITY_RISING;
sClockSoureConfig.ClockFilter=0;
TIM4_Handler.Instance=TIM4; //通用定时器5
TIM4_Handler.Init.Prescaler=0; //分频系数
TIM4_Handler.Init.CounterMode=TIM_COUNTERMODE_UP; //向上计数器
TIM4_Handler.Init.Period=0xFFFF; //自动装载值
TIM4_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;//时钟分频银子
HAL_TIM_Base_Init(&TIM4_Handler); //初始化输入捕获时基参数
HAL_TIM_ConfigClockSource(&TIM4_Handler,&sClockSoureConfig);
__HAL_TIM_CLEAR_FLAG(&TIM4_Handler,TIM_FLAG_UPDATE);
__HAL_TIM_SET_COUNTER(&TIM4_Handler,0);
__HAL_TIM_ENABLE_IT(&TIM4_Handler,TIM_IT_UPDATE); //使能更新中断
//TIM_ITRx_SetConfig(&TIM4_Handler,TIM_TS_TI1FP1);
__HAL_TIM_ENABLE(&TIM4_Handler);//使能定时器5
HAL_NVIC_SetPriority(TIM4_IRQn,1,0); //设置中断优先级,抢占优先级2,子优先级0
HAL_NVIC_EnableIRQ(TIM4_IRQn); //开启ITM5中断通道
}
__HAL_RCC_TIM4_CLK_ENABLE(); //使能TIM5时钟
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOA时钟
GPIO_Initure.Pin=GPIO_PIN_6; //PA0
GPIO_Initure.Mode=GPIO_MODE_INPUT; //复用推挽输入
GPIO_Initure.Pull=GPIO_PULLDOWN; //下拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
|
|