我现在用俩无线串口模块进行传数,发过去数据传回来的数和我之前设的不一样,不知道哪里的问题,好像是串口中断中收取那块写的有问题,跪求大哥帮我看下。
void USART2_IRQHandler(void)
{
if(USART_GetITStatus(USART2, USART_IT_TXE) != RESET)
{
/* Write one byte to the transmit data register */
if(TxCounter==16)
{ /* Disable the USART2 Transmit interrupt */
TxCounter= 0;
USART_SendData(USART2, Tx_TxBuffer[TxCounter++]);
USART_ITConfig(USART2, USART_IT_TXE, DISABLE);
SendOver = 0; //发送完毕标志位清0
TxCounter= 0;
}
else{USART_ITConfig(USART2, USART_IT_TXE, DISABLE);}
}
if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
{ /* Read one byte from the receive data register */
Tx_RxBuffer[RxCounter++] = USART_ReceiveData(USART2);
if(RxCounter == 16)
{
/* Disable the USART2 Receive interrupt */
USART_ITConfig(USART2, USART_IT_RXNE, DISABLE);
RecvOver = 0; //接收完毕标志位置0
RxCounter= 0;
//Zigbee_RecvHandler(RxCounter); //返回值RxCounter
}
}
}
主程序
void OnBtnTerIDGetClicked(WM_MESSAGE * pMsg)
{
WM_HWIN hWin;
int i;
int j;
int a=100;
u8 TxBuf1[] = {0x7E,0x00,0x00,0x00,0x00,0x11,0x00,0x04,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0x11,0x8E};
u8 TxBuf2[17];
tongxun_init();
for( i=0;i<16;i++)
{ TxCounter=i;
Tx_TxBuffer[TxCounter]= TxBuf1;
}
//GUI_Init();
//while(RecvOver !=0);
//GUI_Init();
while(RecvOver ==0)
{ //GUI_Init();
for( RxCounter=0;RxCounter<16;RxCounter++)
j=RxCounter;
TxBuf2[j]=Tx_RxBuffer[RxCounter] ;
}
EDIT_SetHexMode(WM_GetDialogItem(hWin,GUI_ID_EDIT0),0x0,0x0,0xFFFFF);//设置编辑框的十六进制模式
EDIT_SetValue(WM_GetDialogItem(hWin,GUI_ID_EDIT0),TxBuf2[15]);//设置编辑区当前的数值
}
我要发的数据事先放在了TxBuf1里,一次发8位,由它发给Tx_RxBuffer;无线模块收到另一个模块返回来的数,然后会自动发给mcu吧?那我mcu收到数据存在Tx_RxBuffer里,我中断里不知道写的对不对,我想的是等到Tx_RxBuffer收到全部的17个0xXX形式的数据后,再将这些数据传给TxBuf2,我最后再从TxBuf2中读取某一位,显示在页面的edit里,但是收到的数据不对。
|