打印

系统延时操作时无法响应串口中断问题

[复制链接]
918|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
jxmzzr|  楼主 | 2014-10-30 14:26 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
.程序的功能:上位机通过串口给STM32单片机发送命令并执行相应的任务。

遇到的问题是:
1.TestRun 函数有延时操作,延时期间不响应串口中断。

请问如何在延时期间响应串口中断
main.c

u8* usart_buff=NULL;
void delay_us(u32 nus)
{
         u32 temp;
         SysTick->LOAD = 9*nus;
         SysTick->VAL=0X00;//清空计数器
         SysTick->CTRL=0X01;//使能,减到零是无动作,采用外部时钟源
         do
         {
          temp=SysTick->CTRL;//读取当前倒计数值
         }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
         
         SysTick->CTRL=0x00; //关闭计数器
         SysTick->VAL =0X00; //清空计数器
}


void main(void)
{
  usart_buff=(u8*)malloc(PC_MSG_LEN);
while(1)
{
  MessageProcess();//处理串口中断接收到的数据
}
}
msg.c

extern U8* usart_buff;
u8 stop=0;
void MessageProcess()
{

unsigned char command= GetMsgInfo(usart_buff);
switch(usart_buff)
{
case 't':
   while(1)
   {
     TestRun();//调用其他中断进行工作
      if(stop)
       {
           break;
       }
   }
break;
case 's':
   stop=1;
   break;
default:
  break;
}
}


沙发
mmuuss586| | 2014-10-30 18:04 | 只看该作者
TestRun在哪没看到;
是不是期间响应了其它中断,设置中断的优先级,或缩短中断响应程序看看;

使用特权

评论回复
楼主
LOVE_ELEC| | 2014-10-30 14:29 | 只看该作者
设置串口中断的抢占优先级高于延时中断的抢占优先级即可实现!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

460

主题

2188

帖子

12

粉丝