我这样修改程序,在中断里写接收到了2个字节的数据 就把标志位flagTxd置1,主函数里判断flagTxd是否置1,然后把数据给发出来,这样是收发没问题的,但是 if(UART_RX_NUM==2)这个计数的条件 我换成大于等1他就是一个字节正常收发,大于等于2他就是两个字节正常收发,多了少了都发的接受错误的数据,感觉 RX_MUN没有在2个函数同步操作,我想不通原因,纠结了好久,求教各位老师了。
INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)
{
/* In order to detect unexpected events during development,
it is recommended to set a breakpoint on the following instruction.
*/
if(UART1_GetITStatus(UART1_IT_RXNE)!= RESET)
RxBuffer[ UART_RX_NUM++] = UART1_ReceiveData8();
if(UART_RX_NUM==2)
{
flagTxd=1;
}
UART1_ClearITPendingBit(UART1_IT_RXNE);
int main( void )
{
u8 i,len1;
sysInit();
while(1)
{
if(flagTxd==1)
{
flagTxd=0;
len1=UART_RX_NUM; //得到此次接收到的数据长度
UART_RX_NUM=0;
//UART1_Send_Byte(len1);
for(i=0;i<len1;i++)
{
UART1_Send_Byte(RxBuffer);
}
delay_us(50);
void UART1_Send_Byte(u8 byte)
{
UART1_SendData8(byte);//UART1发送8位数据
while(UART1_GetFlagStatus(UART1_FLAG_TXE)==RESET);//等待发送完成
}
|