void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM4) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_1) { ccr_cur = __HAL_TIM_GET_COMPARE(&htim4, TIM_CHANNEL_1); __HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, 0); //dbug 不能清零捕获计算器 dbug_data = __HAL_TIM_GET_COMPARE(&htim4, TIM_CHANNEL_1); //dbug 读取仍然为ccr_cur的值 。。。。。。。。。。。。。。。。。。。。 。。。。。。。。。。。。。。。。。。。。 |
__HAL_TIM_SET_COMPARE()是设置CCRx,一般是用在PWM输出的,控制PWM占空比。
而__HAL_TIM_GET_COMPARE()是用来读取CCRx的,一般用于捕获处理。
你可能对捕获的过程不是很清楚。
捕获是当设定的事件(如上升沿)发生时,CNT的值被复制到CCRx中。
在使用捕获功能时,清零CCRx并没有什么意义,此时对CCRx的写入是无效的。
所以你调用__HAL_TIM_SET_COMPARE()就没有效果。
评分
查看全部评分
评分
查看全部评分
电平跳变的时候 自动把定时器计数器time_cnt读取,并且放入捕获寄存器time_ccr。理论上应该是应该直接清零定时器计数器,调用__HAL_TIM_SET_COUNTER(&htim4, 0); 那么__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_1, 0); 这个函数不知道起什么作用,看意思好像是清除捕获寄存器的值。
我的本意是让计数器从0重新计数。 应该是直接清除定时器的计数寄存器。 不知道__HAL_TIM_SET_COMPARE这个函数有什么用
进去看下原函数就知道了,是不是强制比较啊,就是直接设置电平,强制产生一次中断,很多单片机的捕获都有这个功能,另外,清零就是直接给计数器清零
至于函数功能,点进去往下看就知道了。