香主,我在使用STM32103CB 串口智能卡接口时,发现一个问题,在对SAM 卡发送指令后,串口在接收SAM卡返回的数据时,在正常返回的数据前多一个字节。现在我处理是在接收的时候丢掉第一个字节。但现在又出现新的问题,在对SAM 卡发送指令后,串口会在正常数据前多收2个字节,并且我打印了这2个字节,是我发给SAM卡的指令后2字节。
下面是我的接收跟发送代码:
/*发送一个字节数据*/
void SendByte(int socket,uint8 SendData)
{
unsigned long timeout = 0;
if(socket==0){
USART_SendData(SMART_COM2,SendData);
Delayus(5);
while(USART_GetFlagStatus(SMART_COM2, USART_FLAG_TXE) == RESET)
{
Delayus(1);
if(timeout++>60000) return ;
}
}
else
{
USART_SendData(SMART_COM3,SendData);
//Delayus(2);
while(USART_GetFlagStatus(SMART_COM3, USART_FLAG_TXE) == RESET)
{
Delayus(1);
if(timeout++>60000) return ;
}
}
}
/*接收一个字节数据*/
uint8 GetByte(int socket,uint8* GetData)
{
unsigned long timeout = 0;
if(socket==0){
while(USART_GetFlagStatus(SMART_COM2, USART_FLAG_RXNE) == RESET)
{
Delayus(1);
if(timeout++>300000) return 0x01;//超时时间要长去接收第一个字节。
}
*GetData = USART_ReceiveData(SMART_COM2);
//sprintf(msg,"%02x",*GetData);
//debug_printf(msg);
return 0;//收到数据
}
else
{
while(USART_GetFlagStatus(SMART_COM3, USART_FLAG_RXNE) == RESET)
{
Delayus(1);
if(timeout++>300000) return 0x01;//超时时间要长去接收第一个字节。
}
*GetData = USART_ReceiveData(SMART_COM3);
//sprintf(msg,"%02x",*GetData);
//debug_printf(msg);
return 0;//收到数据
}
}
char UsartSendNbyte(int socket,unsigned int len,unsigned char *buff)
{
unsigned int i;
//printk("usart_sendNbyte:\n");
for(i=0;i<len;i++){
SendByte(socket,buff[i]);
///printk("%02x",buff[i]);
}
//printk("\n");
//usart_send('0');
return 0;
}
char UsartRecvNbyte(int socket,unsigned long len,unsigned char *byte)
{
unsigned long i;
for(i=0;i<len;i++){
if(GetByte(socket,&byte[i])) return 0x01;
}
return 0x00;
}
帮看看为什么会出现这个问题。
另:我的SAM 卡跟何SMT32之间没有加SAM 卡专用芯片8024.
|