【IoT开发】UART通信高频测试

测试所使用芯片   STM32F103RCT6  UART收发的极限频率:bytes/s

 

1.发送频率

主程序循环发送一字节u8整型,记录次数。

	while(1)
	{
		
		t++;
		if(t==255)  t=0;
		printf("%d",t);
		Fre++;

	}	

设置1s的时钟中断,显示发送次数

extern u32 Fre;
extern u32 HighestFre;
u32 tempu32;

void TIM3_IRQHandler(void)   //TIM3中断
{
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
		{
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
		
		if(Fre>HighestFre) HighestFre=Fre;
		tempu32=HighestFre;	
		LCD_ShowxNum(100,120,tempu32,8,16,0); //显示highest frequency

		printf("\r\n\r\n HighestFre:%d \r\n\r\n",HighestFre);	
		
		LED0=!LED0;	   
			
		Fre=0;
		}
}

在串口和LCD屏会显示结果:

uart_init(921600);  HighestFre:32515

uart_init(3000000);    HighestFre:70430

921600波特率时发射速率为 32.5k bytes/s;3M波特率时发射速率为 70.4k bytes/s

2.接收频率

STM32从上位机接收数据,最高接收数据量/s

给上位机程序写一个循环发送:

private void button4_Click(object sender, EventArgs e) //button4按键事件
        {
            button4.Enabled = false;
            Isautosend = true;
            timer1.Enabled = true;
            while (Isautosend)
            {
                if (serialPort1.IsOpen)//判断串口是否打开,如果打开执行下一步操作
                {
                    try
                    {
                        serialPort1.WriteLine("hi22\r\n");//写数据
                    }
                    catch (Exception err)
                    {
                        MessageBox.Show("串口数据写入错误", "错误");//出错提示
                        serialPort1.Close();
                        button1.Enabled = true;//打开串口按钮可用
                        button2.Enabled = false;//关闭串口按钮不可用
                    }
                }
                HighFre++;
            }
}

在STM32程序中中断记录

	while(1)
	{
		
		if(USART_RX_STA&0x8000)
		{					   
			Fre+=6;
			//printf("\r\n\r\n Fre:%d \r\n\r\n",Fre);
			USART_RX_STA=0;
		}

	}	

1S定时清给出接收到的字节数

void TIM3_IRQHandler(void)   //TIM3中断
{	
	u32 tempu32;
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 
		{
		TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx的中断待处理位:TIM 中断源
		
		if(Fre>HighestFre) HighestFre=Fre;
		tempu32=HighestFre;	
		LCD_ShowxNum(100,120,tempu32,8,16,0); //显示highest frequency
		printf("\r\n receive bytes:%d \r\n",Fre);
		LED0=!LED0;	  
		
		Fre=0;
		}
}

结果:

uart_init(115200); -- 9.5kbytes/S

uart_init(921600); -- 65kbytes/S

uart_init(3000000); -- 70kbytes/S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值