恕我太菜看不出什么问题来,但是从你程序的大括号上看,我发现你的程序一直在初始化硬件,然后再发送,我建议你把硬件的初始化配置只执行一次,发送部分放在一个while(1)循环里,最好加一个按键条件判断发送,方便调试。最后,我把一个确定没有问题的函数给你,你应该也是标准库写的,你看看试一试。
/***************** 发送一个字节 **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)//选择哪一个串口,选择发送哪一个数据
{
/* 发送一个字节数据到USART */
USART_SendData(pUSARTx,ch);
/* 等待发送数据寄存器为空 */
while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
}
/****************** 发送指定长度的数组 ************************/
void Usart_SendArray( USART_TypeDef * pUSARTx, uint8_t *array, uint16_t num)//选择哪一个串口,数组名或者指针,数据长度即有几个发送的数据
{
uint8_t i;
for(i=0; i<num; i++)
{
/* 发送一个字节数据到USART */
Usart_SendByte(pUSARTx,array[i]);
}
/* 等待发送完成 */
while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET);
}
modbus通信的部分,
|