使用STM32F103VC控制器,使用串口2,9600波特率,使用2.03库,程序很简单,用串口把一个数组顺序发出去,
//和上位机通信
void uart2_send_byte(u8 ch)
{
USART_SendData(USART2, ch);
/* Loop until the end of transmission */
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET)
{
}
}
但是碰到一个怪现象,第一个字符实“:”(0x24)际上控制器没有发出去,因为上位机接收软件没有收到,这是程序代码:
uart2_send_buf[0] = ':'; //组织缓冲区
uart2_send_buf[1] = slave_addr[0]; //下位机地址
uart2_send_buf[2] = slave_addr[1];
uart2_send_buf[3] = uart2_receive_buf[3]; //功能码
uart2_send_buf[4] = uart2_receive_buf[4];
uart2_send_buf[5] = uart2_receive_buf[9]; //数据长度
uart2_send_buf[6] = uart2_receive_buf[10];
uart2_send_buf[7] = uart2_receive_buf[11];
uart2_send_buf[8] = uart2_receive_buf[12];
省略一些赋值代码
for(ii=0;ii<len;ii++)
uart2_send_byte(uart2_send_buf[ii]);
但是,为解决这个问题,首先让串口发送一个无关数据,如发一个0x00,则后续数组能完整地发送出去,上位机软件显示并没有收到第一个0x00,如下代码:
uart2_send_byte(0x00);
uart2_send_buf[0] = ':'; //组织缓冲区
uart2_send_buf[1] = slave_addr[0]; //下位机地址
uart2_send_buf[2] = slave_addr[1];
uart2_send_buf[3] = uart2_receive_buf[3]; //功能码
uart2_send_buf[4] = uart2_receive_buf[4];
uart2_send_buf[5] = uart2_receive_buf[9]; //数据长度
uart2_send_buf[6] = uart2_receive_buf[10];
uart2_send_buf[7] = uart2_receive_buf[11];
uart2_send_buf[8] = uart2_receive_buf[12];
省略一些赋值代码
for(ii=0;ii<len;ii++)
uart2_send_byte(uart2_send_buf[ii]);
不知道这是什么原因,以前碰见过这个问题,后来现象没有出现,今天这个结果必然出现,请高手指教,这是什么原因导致的,解决方法如何?谢谢! |