谢谢!
一开始我是把串口发送放在中断中做的,后来我将其放在主循环中做,不过问题依旧!
程序如下:
void Usart2SendProc(void)
{
if (GetUserTime(TMR_USART2_SEND_INTV) >= USART2_SEND_INTV)
{
if (Usart2.TxStart != Usart2.TxEnd)
{
// USART2_TX_EN();
// USART_ITConfig(USART2, USART_IT_TXE, ENABLE);
if (USART_GetFlagStatus(USART2, USART_FLAG_TXE) != RESET)
{
if (Usart2.TxBuff[Usart2.TxEnd] == 0x8a)
{
// USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
// USART_ITConfig(USART2, USART_IT_TC, ENABLE);
SetUserTime(TMR_USART2_SEND_INTV, 0);
}
USART2->DR = Usart2.TxBuff[Usart2.TxEnd];
Usart2.TxEnd++;
Usart2.TxEnd %= USART2_TX_BUFF_SIZE;
// SetUserTime(TMR_USART2_SEND_INTV, 0);
}
}
}
}
定时器TMR_USART2_SEND_INTV是用来把相邻两条消息间隔开的,在systick中做的。我把Usart2.TxStart,Usart2.TxEnd,定时器值通过usart1读出,发现这些值是正常变化的,可是数据没有真正发出。
请您分析一下,另外,有什么情况CAN会影响USART2的发送!
|