MCU:STM8S105
初始化:
1:I/O设置外部上下沿中断
测试:外部接 1K方波,在中断里反转IO,示波器观察正常。
2:定时器 设置 128分频,计数到250 ,2MS溢出
测试:定时器服务程序中将IO反转,测试波形正常。
测频流程:
1:在定时器服务程序中记溢出次数ISRCounter,在外部中断程序中计算时间us,
计算方法为:
T = ISRCounter*250*8+ 当前计数器Counter*8-开始计数时的Counter*8;
2:
外部IO接1K的方波;
if(T> 800)
{
IO翻转;
}
问题来了:示波器看波形:100MS 里面会出现 1~2个翻转的波形;
源代码如下:
uint32_t LastPulseUS = 0;
uint32_t LastTim4Cnt = 0;
void SysExtiPortA_ISR(void)
{
uint32_t CurPulseUS = 0;
uint32_t CurTim4Cnt = 0;
uint8_t HallStep = 0;
CurTim4Cnt = TIM4_GetCounter();
CurPulseUS = g_Time4_HALL.Tim4_ISRCounter * 250 *8 + CurTim4Cnt*8 -LastTim4Cnt*8 ;
dispCurPulseUS = CurPulseUS;
g_Time4_HALL.Tim4_ISRCounter = 0;
LastTim4Cnt = CurTim4Cnt;
LastPulseUS = CurPulseUS;
// if((CurPulseUS >(LastPulseUS<<1))||(CurPulseUS >(LastPulseUS>>1)))
// if(CurPulseUS > 1000000) //大于1000ms认为停转,重新启动
// {
// LastPulseUS = 0;
//}
if((CurPulseUS >(450))&&(CurPulseUS <(550)))
{
//bsp_LedToggle(); /* 翻转LED灯IO */
}
if(LastPulseUS > 800)
{
bsp_LedToggle(); /* 翻转LED灯IO */
}
|