本帖最后由 losin 于 2018-1-27 14:11 编辑
/*****************中断服务函数***************************/
vu16 USART3_RX_STA=0;
vu16 USART3_TX_STA=0;
void USART3_IRQHandler(void)
{
u8 res;
OSIntEnter();
if(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) != RESET)//接收到数据
{
res=USART_ReceiveData(USART3);
if((USART3_RX_STA&(1<<15))==0)//接收完的一批数据,还没有被处理,则不再接收其他数据
{
if(USART3_RX_STA<USART3_MAX_RECV_LEN) //还可以接收数据
{
TIM_SetCounter(TIM7,0); //计数器清空
if(USART3_RX_STA==0) //使能定时器7的中断
{
TIM_Cmd(TIM7, ENABLE); //使能定时器7
}
USART3_RX_BUF[USART3_RX_STA++]=res; //记录接收到的值
}else
{
USART3_RX_STA|=1<<15; //强制标记接收完成
}
}
}
OSIntExit();
}
//中断优先级已经设置最高
NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0 ;//抢占优先级0
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //子优先级0
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器
//串口3 跟sim900 通信时 出现 接收丢字节现象 本该是 +CMGR: "REC UNREAD","+8613560491039","@ZF","13/05/01,16:06:53+32"
ALIENTEK ATK-SIM900A Module 实际 是 +CMR: "REC UEAD","+8613560491039","@ZF","13/05/01,16:06:53+32"
ALIENTEK ATK-SIM900A Module ,少几个字节数据
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>