我这样修改了下,在中断里写接收到了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. */ //u8 Res,i; 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; //u8 ad[4],i; //fp32 cc=3.14; sysInit(); while(1) { if(flagTxd==1) { // len1=UART_RX_NUM; //得到此次接收到的数据长度 //UART1_Send_Byte(len1); for(i=0;i<UART_RX_NUM;i++) { UART1_Send_Byte(RxBuffer[i]); } delay_us(50); UART_RX_NUM=0; flagTxd=0; } |
UART_RX_NUM在发送的地方设置为0,但是接收的地方++了,这样会有冲突(还没发完又有数据),除非flagTxd == 1的时候不接收新数据,或则自己想一下解决方案吧。 |