不使用os的话红外中断可用吗?delay_us的原型是什么?看起来你的程序问题多多。
估计是你在中断里面使用延时函数的原因, 在中断里面切换导致程序崩溃?或者是systick中断导致错误?
...所以,在此我要厚颜无耻的推荐我的红外中断程序(在我的小车程序里),虽然只做过初步的测试ok,但是我觉得我的程序写得挺不错滴!!!
如果不想改动太多的话,先替换一下delay_us试一下。我的hw_delay_us函数只是通过查询systick的值来延时。只需启动systick,无需启动中断,也不会影响systick作为他用:
void hw_delay_us(unsigned int us)
{
unsigned int start ,target,cur;
while(us > 500) // 保险起见,延时时间不能超过systick中断周期的一般,这里设置为500us,则系统中断频率可以高达1ms,也即1000/s。
{
hw_delay_us(500);
us -= 500;
}
start = SysTick->VAL;
target = (start-us*9);
if(start<target)
{
target += (9000000 / RT_TICK_PER_SECOND);//RT_TICK_PER_SECOND是系统中断频率
do
{
cur = SysTick->VAL;
}while(cur<=start || cur>target); }
else // target <= start
{
do
{
cur = SysTick->VAL;
}while(target<cur&&cur<=start); }
}
|