初级会员

- 积分
- 78
- 金钱
- 78
- 注册时间
- 2014-7-25
- 在线时间
- 29 小时
|
5金钱
请教各位大牛:
最近向自己的工程中移植了ucosIII的内核代码,其它功能目前表现正常,但在串口接收上位机命令时出现问题:我的串口波特率比较高,有8M,串口中断函数中只做接收一个字节打印一个,其它代码都屏蔽了。上位机发送13个字节,但打印出来的数据丢了好多。如果我改为裸机程序,表现正常;将串口波特率降到115200,表现正常;或者我把OSIntEnter()和OSIntExit()这两个函数在中断中屏蔽,也正常;以上是调试现象。
中断服务函数代码:
/**
* @brief: USART1 IRQ
* @param£ovoid
* @return: void
*/
void USART1_IRQHandler(void)
{
uint8_t oneByte = 0x00;
#if USE_UCOSIII
OSIntEnter();
#endif
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
USART_ClearITPendingBit( USART1 , USART_IT_RXNE );
oneByte = USART_ReceiveData(USART1);
USART1_SendOneByte( oneByte );
// if( oneByte == 0xAA )
// {
// USART1_Rx_Buffer[0] = 0xAA;
// DMA2->LIFCR = 0x003D0000;
// DMA2_Stream2->M0AR = (uint32_t)&USART1_Rx_Buffer[1];
// DMA2_Stream2->NDTR = UPPER_COMMAND_LENGTH-1;
// DMA2_Stream2->CR |= (uint32_t)DMA_SxCR_EN;
// }
}
if( USART_GetITStatus(USART1, USART_IT_ORE_RX) != RESET )
{
USART_ClearITPendingBit( USART1 , USART_IT_ORE_RX );
oneByte = USART_ReceiveData(USART1);
}
#if USE_UCOSIII
OSIntExit();
#endif
}
我在想会不会是串口的速率太快,而OSIntExit()中有关闭中断的过程导致数据丢失呢?请教各位高人指点,谢谢!
|
|