如果错误、请忽略、是否有人会帮助我解决使用 UART 接收数据、 通过 UART1发送命令(波特率115200)以及接收响应的问题。 命令 SEND 和来自另一个系统的响应数据是正确的(使用 com 端口分析响应),但在将数据字节接收到阵列时,第一个字节将作为零接收。 一些帮助是非常有利的。 下面是相同的代码。
谢谢
UART1_Send ((uint8_t *) Receiver_Command、5); //发送命令
///----------------------------------------------
DELAY_Milli_Sec (6);//接收接收接收器响应的延迟6ms //等待收集数据和其他器件响应的时间
____________________________________________________________________________________________________________________________________________________________
void delay_Milli_Sec (uint32_t delay_value)
{
uint32_t Timer_Count;
Timer_Count =(120000 * DELAY_VALUE);//以毫秒为单位计算值
ROM_IntEnable (INT_TIMER3A);
ROM_TimerIntEnable (TIMER3_base、TIMER_TINA_TIMEOUT);
ROM_TimerLoadSet (TIMER3_base、INT_TIMER3A、Timer_Count);
ROM_TimerEnable (TIMER3_base、TIMER_A);
while (DelaySet_Flag = 0)
{
//等待延迟
}
DelaySet_FLAG = 0;
ROM_TimerIntDisable (TIMER3_base、TIMER_A);//禁用 Timer3中断
ROM_TimerDisable (TIMER3_base、TIMER_A);//禁用 Timer3
}
____________________________________________________________________________________________________________________________________________________________
无效
UART1_IntHandler (空)
{
Interrupt_Flag =(Interrupt_Flag | uart1_interrupt);//全局变量
Receive_Wait_Flag =(Receive_Wait_Flag | uart1_interrupt);//全局变量>> uart1中断>>接收等待标志置1
静态 uint32_t ui32Status;//局部变量>>中断状态
静态 uint8_t uart1_data;
静态 uint32_t Max_Byte=34;//最初设置为34字节
静态 uint32_t CURRENT_Char = 0;//数组中的第一个数据位置
ui32Status = ROM_UARTIntStatus (UART1_base、true);//获取中断状态。
ROM_UARTIntClear (UART1_base、ui32Status);//清除已发出的中断。
while (ROM_UARTCharsAvail (UART1_base))//循环、此时接收 FIFO 中有字符。
{
uart1_data = ROM_UARTCharGetNonBlocking (UART1_base);//从 UART1读取下一个字符
if (Current_If_If <Max_byte)
{
uart1_data_packet[curry_Char++]= uart1_data;//将每个字节读取到 uart1_data_packet 数组
if ((uart1_data_packet[0]= 0xf0)&&(uart1_data_packet[1]= 0xf0)//检查 Receiver_Command 消息 ID 以设置响应数据的字节计数
{
max_Byte=34;//根据命令消息 ID 更新计数值
if (Current_Char==33)
{
CURRENT_CHAR = 0;//将数组清除为0位置
Receive_Wait_Flag &= 0xFD;
}
}
否则、如果((uart1_data_packet[0]= 0xAA)&&(uart1_data_packet[1]= 0x79))
{
max_Byte=4;//根据命令消息 ID 更新计数值
if (Current_Char==3)
{
CURRENT_CHAR = 0;//将数组清除为0位置
Receive_Wait_Flag &= 0xFD;
}
}
其他
{
CURRENT_CHAR=0;
}
}
}
}