.程序的功能:上位机通过串口给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;
}
}
|