如题,因为C盘快满了所以打算删点没用的文件,但不知道这个删掉会不会影响正常使用……!
下面拿一个测量电容式湿度传感器的脉冲频率为例。如下图所示,湿度传感器会在FOUT输出脚 输出 频率大概为6K-7K的脉冲,频率大小与湿度有一个一 一对应的关系,通过查表的方法就可以将统计的脉冲频率转换成湿度。可以定时1S统计输入的脉冲,这样就可以很方便的计算湿度传感器的频率,进而算出湿度。
/* TIM2 init function */
/*
TIM2用作湿度传感器定时1S,计算频率
溢出时间 = (Autoreload + 1) * (Prescaler + 1)/TCCLK72M
*/
void MX_TIM2_Init(void)
{
LL_TIM_InitTypeDef TIM_InitStruct;
/* Peripheral clock enable */
LL_APB1_GRP1_EnableClock(LL_APB1_GRP1_PERIPH_TIM2);
TIM_InitStruct.Prescaler = 9999;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 7199;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
TIM_InitStruct.RepetitionCounter = 0; //重复计数器
LL_TIM_Init(TIM2, &TIM_InitStruct);
LL_TIM_EnableARRPreload(TIM2); //使能自动重装载预装载,ARR寄存器有缓冲区
LL_TIM_SetClockSource (TIM2, LL_TIM_CLOCKSOURCE_INTERNAL);
LL_TIM_SetTriggerOutput(TIM2, LL_TIM_TRGO_RESET);
LL_TIM_DisableMasterSlaveMode(TIM2);
/* TIM2 interrupt Init */
NVIC_EnableIRQ(TIM2_IRQn);
LL_TIM_EnableIT_UPDATE (TIM2);//使能更新中断
LL_TIM_ClearFlag_UPDATE(TIM2);
LL_TIM_EnableCounter (TIM2);
}
/* TIM1-CH1 init function */
/*
TIM1-CH1用作湿度传感器外部计数
*/
void MX_TIM1_Init(void)
{
LL_TIM_InitTypeDef TIM_InitStruct = {0};
/* Peripheral clock enable */
LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_TIM1);
/**TIM1 GPIO Configuration
PA8 ------> TIM1_CH1 湿度传感器脉冲计数
*/
TIM_InitStruct.Prescaler = 0;
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
TIM_InitStruct.Autoreload = 0xffff;
TIM_InitStruct.ClockDivision = LL_TIM_CLOCKDIVISION_DIV1;
LL_TIM_Init(TIM1, &TIM_InitStruct);
LL_TIM_DisableARRPreload (TIM1);
/*从模式控制寄存器(TIMx_SMCR)*/
LL_TIM_SetTriggerInput (TIM1, LL_TIM_TS_TI1FP1);//TIMx_SMCR->TS 设置输入触发源
LL_TIM_SetClockSource (TIM1, LL_TIM_CLOCKSOURCE_EXT_MODE1);//TIMx_SMCR->SMS 选择计数器的时钟来源
/*捕获/比较模式寄存器1(TIMx_CCMR1)*/
LL_TIM_IC_SetFilter (TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_IC_FILTER_FDIV1);//设置输入滤波器,不滤波 TIMx_CCMR1->ICxF
/*捕获/比较使能寄存器(TIMx_CCER)*/
LL_TIM_IC_SetPolarity (TIM1, LL_TIM_CHANNEL_CH1, LL_TIM_IC_POLARITY_FALLING);//设置输入捕获极性,下降沿捕获 TIMx_CCER->CCxP
LL_TIM_DisableIT_TRIG (TIM1);
LL_TIM_DisableDMAReq_TRIG (TIM1);
LL_TIM_SetTriggerOutput (TIM1, LL_TIM_TRGO_RESET);
LL_TIM_DisableMasterSlaveMode(TIM1);
/* TIM1 interrupt Init */
NVIC_EnableIRQ(TIM1_UP_IRQn);
LL_TIM_SetCounter (TIM1, 0);
LL_TIM_EnableIT_UPDATE (TIM1);
LL_TIM_ClearFlag_UPDATE(TIM1);
LL_TIM_EnableCounter (TIM1);
}
/*
* @brief This function handles TIM1-CH1 update interrupt.
* 湿度传感器脉冲计数溢出中断
* 中断优先级大于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,所以在中断中不可调用FreeRTOS函数
* 湿度传感器频率大概为6K-7K,而TIM1溢出计数为65536,溢出视为错误
*/
void TIM1_UP_IRQHandler(void)
{
if(LL_TIM_IsActiveFlag_UPDATE(TIM1))
{
Humit_FreqOver_Set();
LL_TIM_ClearFlag_UPDATE(TIM1);
}
}
/*
* @brief This function handles TIM2 update interrupt.
* 湿度传感器定时1S中断
* 中断优先级大于configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,所以在中断中不可调用FreeRTOS函数
*/
void TIM2_IRQHandler(void)
{
unsigned int iFreq = 0;
if(LL_TIM_IsActiveFlag_UPDATE(TIM2))
{
iFreq = LL_TIM_GetCounter(TIM1); //获取TIM1湿度传感器脉冲计数
Humit_Freq_Set(iFreq);
LL_TIM_SetCounter(TIM1,0);
LL_TIM_SetCounter(TIM2,0); //清空计数
LL_TIM_ClearFlag_UPDATE(TIM2);
}
}