Hi, Meng Cui
Please find such sample code for your reference. You can also use DMA function for your UART transfer.
/********************************************************************/
void main (void)
{
counter = 0;
enable_irq(51);
while(1)
{
if(counter > 7)
{
out_char(data[0]); //slave address
out_char(data[1]); //read data
if((data[4]==0x00)&&(data[5]==0x02))
{
out_char(0x04); //Data number
}
else
{
out_char(0x00); //If number of register is incorrect
}
if((data[2]==0x00)&&(data[3]==0x6B))
{
out_char(0xCC); //Data1
out_char(0xCD); //Data2
out_char(0x42); //Data3
out_char(0x8D); //Data4
}
else //If the data is not 0x00,0x6B
{
out_char(0x00); //Data1
out_char(0x00); //Data2
out_char(0x00); //Data3
out_char(0x00); //Data4
}
out_char(data[6]); //CRCL
out_char(data[7]); //CRCH
counter = 0;
}
}
}
/********************************************************************/
void uart3_isr(void)
{
if (UART3_S1 & 0x20)
{
/* Read data register to clear the flag */
data[counter] = UART3_D;
counter++;
}
}