业余玩家 闲得无聊 买了一块STM8103F3P6的最小板 接了一个SR04的超声波测距模块 搞了几天都搞不懂 试了输入捕获 结果 捕获的两个值 一样。。。 看网上的 计数器来算 但是 好像又是错的 抄了别实现成功的代码 感觉出来还是有问题 我很疑惑 纳闷 虽然不是学这个的 但是看了那一部分东西 感觉也没那么难呀 反转就是 搞不出了 。没事干想一步一步分开验证 结果 越看越疑惑 都快怀疑人生的 有人能帮我解答下吗 看下我附的图片。。。 上传不了图片。。。。
static uint16_t tic=0;
uint16_t ticp=0;
int main( void )
{
//init_sr04();//初始化超声波测距设备
uartOne();//初始化语音播报模块
enableInterrupts();//开启系统中断
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_8, 65535);//fmaster 16MHz
TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
while(1)
{
//get_cap_value();
TIM2_SetCounter(0x0000);
TIM2_Cmd(ENABLE);
delay_ms(30);
ticp=TIM2_GetCounter();
TIM2_Cmd(DISABLE);
delay_ms(100);
printf("tic:%d\n",tic);
printf("ticp:%d\n",ticp);
TIM2_ClearFlag(TIM2_FLAG_UPDATE);
tic=0;
delay_ms(1000);
}
}
INTERRUPT_HANDLER(TIM2_UPD_OVF_BRK_IRQHandler, 13)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if(TIM2_GetITStatus(TIM2_IT_UPDATE) == SET)
{
tic++;
TIM2_ClearITPendingBit(TIM2_IT_UPDATE);
}
}
输出结果为
tic:0
ticp:-4239
输出一直是这两个值 按照理解 应该计数器会超时啊 这里输出计数器溢出 而且 为什么会有负数值输出。。。。
|