功能验证测试
UART单线半双工功能测试我们现在拿两个MM32F0133的板子一个做主机一个做从机进行单线收发测试,主机先发送一包数据给从节点,当从节点收到这包数据后再把这包数据发回给主机,然后主机和从机两个板子PA9短接到一起,外部在加一个4.7K上拉电阻。
主机函数处理:
uint8_t txbuff[10]= {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};
s32 main(void)
{
CONSOLE_Init(115200);//UART2 printf打印
UART1_NVIC_Init(115200);
printf(“UART Half Duplex TX Test rn”);
UART1_Send_Group(txbuff,sizeof(txbuff));
printf(“TX Data: ”);
for(index=0;index《10;index++)
{
printf(“ %x ”,txbuff[index]);
}
printf(“rn”);
while(1)
{
if(gUartRxSta == 1) //收到一包数据
{
gUartRxSta = 0;
printf(“RX Data: ”);
for(index=0;index《10;index++)
{
printf(“ %x ”,Rx_buff[index]);
}
printf(“rn”);
memset(Rx_buff,0x00,10);
}
}
//return 0;
}
主机UART的中断服务函数里面,将接从机发送的数据存放在Rx_buff里面,当收到一包数据后通过printf打印到串口,和原始发送的数据进行对比。
void UART1_IRQHandler(void)
{
u8 recvbyte;
// Send packet
if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)
{
UART_ClearITPendingBit(UART1, UART_IT_TXIEN);
}
// Recv packet
if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)
{
UART_ClearITPendingBit(UART1, UART_ISR_RX);
recvbyte = UART_ReceiveData(UART1);
Rx_buff[rx_cnt] = recvbyte;
rx_cnt++;
if(rx_cnt == 10)
{
gUartRxSta = 1;
rx_cnt = 0;
}
}
}
从机函数处理:
s32 main(void)
{
CONSOLE_Init(115200);//UART2 printf打印
UART1_NVIC_Init(115200);
printf(“UART Half Duplex RX Testrn”);
while(1)
{
if(gUartRxSta == 1)//收到一包数据
{
gUartRxSta = 0;
UART1_Send_Group(Rx_buff,10);
memset(Rx_buff,0x00,10);
}
}
//return 0;
}
从机UART的中断服务函数里面,将接主机发送的数据存放在Rx_buff里面,当收到一包数据后通过单线半双工这个串口发送回去。
void UART1_IRQHandler(void)
{
u8 recvbyte;
// Send packet
if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)
{
UART_ClearITPendingBit(UART1, UART_IT_TXIEN);
}
// Recv packet
if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)
{
UART_ClearITPendingBit(UART1, UART_ISR_RX);
recvbyte = UART_ReceiveData(UART1);
Rx_buff[rx_cnt] = recvbyte;
rx_cnt++;
if(rx_cnt == 10)
{
gUartRxSta = 1;
rx_cnt = 0;
}
}
}
观察测试结果:
然后我们通过主机UART2 的printf打印可以看到主机TX Data 和从机返回的RX Data数据是一样的。
再看看下图逻辑分析仪抓取的逻辑波形,可以也可以看到主机发送的波形和从机返回的波形数据是一样的。
功能验证测试
UART单线半双工功能测试我们现在拿两个MM32F0133的板子一个做主机一个做从机进行单线收发测试,主机先发送一包数据给从节点,当从节点收到这包数据后再把这包数据发回给主机,然后主机和从机两个板子PA9短接到一起,外部在加一个4.7K上拉电阻。
主机函数处理:
uint8_t txbuff[10]= {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};
s32 main(void)
{
CONSOLE_Init(115200);//UART2 printf打印
UART1_NVIC_Init(115200);
printf(“UART Half Duplex TX Test rn”);
UART1_Send_Group(txbuff,sizeof(txbuff));
printf(“TX Data: ”);
for(index=0;index《10;index++)
{
printf(“ %x ”,txbuff[index]);
}
printf(“rn”);
while(1)
{
if(gUartRxSta == 1) //收到一包数据
{
gUartRxSta = 0;
printf(“RX Data: ”);
for(index=0;index《10;index++)
{
printf(“ %x ”,Rx_buff[index]);
}
printf(“rn”);
memset(Rx_buff,0x00,10);
}
}
//return 0;
}
主机UART的中断服务函数里面,将接从机发送的数据存放在Rx_buff里面,当收到一包数据后通过printf打印到串口,和原始发送的数据进行对比。
void UART1_IRQHandler(void)
{
u8 recvbyte;
// Send packet
if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)
{
UART_ClearITPendingBit(UART1, UART_IT_TXIEN);
}
// Recv packet
if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)
{
UART_ClearITPendingBit(UART1, UART_ISR_RX);
recvbyte = UART_ReceiveData(UART1);
Rx_buff[rx_cnt] = recvbyte;
rx_cnt++;
if(rx_cnt == 10)
{
gUartRxSta = 1;
rx_cnt = 0;
}
}
}
从机函数处理:
s32 main(void)
{
CONSOLE_Init(115200);//UART2 printf打印
UART1_NVIC_Init(115200);
printf(“UART Half Duplex RX Testrn”);
while(1)
{
if(gUartRxSta == 1)//收到一包数据
{
gUartRxSta = 0;
UART1_Send_Group(Rx_buff,10);
memset(Rx_buff,0x00,10);
}
}
//return 0;
}
从机UART的中断服务函数里面,将接主机发送的数据存放在Rx_buff里面,当收到一包数据后通过单线半双工这个串口发送回去。
void UART1_IRQHandler(void)
{
u8 recvbyte;
// Send packet
if (UART_GetITStatus(UART1, UART_IT_TXIEN) != RESET)
{
UART_ClearITPendingBit(UART1, UART_IT_TXIEN);
}
// Recv packet
if (UART_GetITStatus(UART1, UART_ISR_RX) != RESET)
{
UART_ClearITPendingBit(UART1, UART_ISR_RX);
recvbyte = UART_ReceiveData(UART1);
Rx_buff[rx_cnt] = recvbyte;
rx_cnt++;
if(rx_cnt == 10)
{
gUartRxSta = 1;
rx_cnt = 0;
}
}
}
观察测试结果:
然后我们通过主机UART2 的printf打印可以看到主机TX Data 和从机返回的RX Data数据是一样的。
再看看下图逻辑分析仪抓取的逻辑波形,可以也可以看到主机发送的波形和从机返回的波形数据是一样的。
举报