现在在用一款条形码扫描模块和开发板做一个条码扫描器,这个扫描模块的原理是激光点右模块内的震动镜片震动将其变成激光线,就像超市收银的那种条码扫描枪,激光点从左到右然后从右回到最左边,然后循环扫描,反射光被收集起来,由模块吸收后,4号管脚会输出PWM波,我把线一分二,分别接到PA0和PA1上,用TIM5定时器的CH1和CH2分别捕获高电平和低电平的脉宽,就是高低电平的时间(对应的就是条码黑白条纹的宽度)。然后为了把数据传到PC的时候方便判断是第几帧,3号管脚的帧信号输出一比一的高低电平,高电平对应从左到右扫描的条码信息(是我想要的信号),低电平是从右到左的电平信息(不需要的数据)。所以我又用了一个TIM4定时器的CH1来捕获3号管脚的上升沿,并在中断函数里写了以下程序:
[mw_shl_code=c,true]void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4, TIM_IT_CC1) != RESET)
{
if(Flag_Rising_Falling==1)
{
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,ENABLE);
TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Falling);
Flag_Rising_Falling=0;
TIM_ClearITPendingBit(TIM4,TIM_IT_CC1);
sResult.sID++;
printf("sID:%d\r\n",sResult.sID);
}
}
if(TIM_GetITStatus(TIM4,TIM_IT_CC1) != RESET)
{
if(Flag_Rising_Falling==0)
{
TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1|TIM_IT_CC2,DISABLE);
TIM_OC1PolarityConfig(TIM4,TIM_ICPolarity_Rising);
Flag_Rising_Falling=1;
TIM_ClearITPendingBit(TIM4,TIM_IT_CC1);
}
}
} [/mw_shl_code]
|