使用串口转I2C实现数据的收发总是出现丢数据的现象
谁可以帮我看看下面的代码,使用串口转I2C实现数据的收发总是出现丢数据的现象,里面的函数调用基本上是使用库函数,我是使用神舟王STM32F207ZGT的开发板,根据里面的例程65EEPROM读写程序来改写的。
通过串口1中断来读写数据。
static void Delay(volatile uint32_t nCount);
u16 gu16WriteAddr = 0;
u16 gu16ReadAddr = 0;
int main(void)
{
u16 u16I2CSendLen = 0;
u16 u16UartSendLen = 0;
u16 temp = 0;
CPU_Init(); /* Initialize uC/CPU services. */
BSP_Init();
sEE_Init(); /* Initialize the I2C EEPROM driver. */
//I2C test
while(1) //大循环
{
u8 u8I2CSendBuf[BufLen];
u8 u8Uart1SendBuf[BufLen];
u16I2CSendLen = 0;
u16UartSendLen = 0;
u16I2CSendLen = HW_UartReadData(UART_1, BufLen, u8I2CSendBuf); //是我自己写的,
// HW_UartWriteData(UART_1, u16I2CSendLen, u8I2CSendBuf);//是我自己写的,这里我注释掉了,注释前通过串口可以看到数据收发正确。
// Delay(6000000);//这里我加了个延时的函数,数据能收发正确,但是会出现第一次发送不正确,并且多次发送后也有丢数据的现象发生。无语了
if (u16I2CSendLen > 0)
{
sEE_WriteBuffer(u8I2CSendBuf, gu16WriteAddr + u16I2CSendLen, u16I2CSendLen);
u16UartSendLen = u16I2CSendLen;
sEE_ReadBuffer(u8Uart1SendBuf, gu16ReadAddr + u16I2CSendLen, (uint16_t *)(&u16UartSendLen));
HW_UartWriteData(UART_1, u16I2CSendLen, u8Uart1SendBuf);
}
}
//end test
}
/*
*********************************************************************************************************
* 中断处理函数
*********************************************************************************************************
*/
void USART1_IRQHandler()
{
HW_UartISP(UART_1);
}
void USART3_IRQHandler()
{
HW_UartISP(UART_2);
}
static void Delay(volatile uint32_t nCount)
{
for (; nCount != 0; nCount--)
{
}
}
input:
123456789
output:
11356789
input:
aacxyz
output:
abcdxyz