
void TIM2_IRQHandler(void) { if( TIM_GetITStatus( TIM2, TIM_IT_CC3 ) != RESET ) { printf( "CH3_Val:%d\r\n",TIM_GetCapture3( TIM2 )); TIM_SetCounter( TIM2, 0 ); } TIM_ClearITPendingBit( TIM2, TIM_IT_CC3 ); } 我用的是TIM2通道3的输入捕获功能,我发下把打印放在中断里面(正常值应该是1000),数值会100左右的偏差 905 904这个样子 while(1) { if( TIM_GetITStatus( TIM2, TIM_IT_CC3 ) != RESET ) { printf( "CH3_Val:%d\r\n",TIM_GetCapture3( TIM2 )); } }; 将这个判断放在while中,获取的值就变成正常的1005-1006这样的在正常偏差范围内了; 想了解一下是为什么?我看了一下ST的例程也是把打印放在while中。 |
stm32f407无法配置定时器2为全部dma
STM32F103TBU6 封装是VFQFPN36 将PD0和PD1配置成CAN不成功是什么原因
串口DMA + 空闲中断收发 ?
F103RCT6芯片对AFIO->MAPR寄存器写入时出错
使用STM32捕获PWM时同时捕获2个通道时会出现捕获的频率值不准确的问题
WS2812B怎么显示任意字符 / 图案?
STM32F103RCT6 定位孔 镂空,会影响使用吗?
HAL库1.8.4在做破坏性测试的时候出现g_state永远为busy的情况导致串口通信发送卡死
L9663驱动开发
用rt_thread 环境编写,DAP-LINK 下载烧录,每一次空芯片下载之后就无法二次下载。求解
另外,你认为当前捕捉值发生较大误差,感觉跟Printf有关的判断没有大问题。结合你有限的几行代码来看,我认为根本原因可能
是printf影响了中断的执行,进而影响TIM2的清零时间点。
你要知道,当发生捕捉后,在发生第二次捕捉前,捕捉值是不会变化的,一直在CCR寄存器里面。