STM32使用正点原子无线烧录器无线查看数据波形

一、所需资源

硬件:正点原子无线烧录器
软件:MiniBalance波形显示上位机

二、CUBE配置

2.1配置串口

使用CUBEMX配置串口,默认使用串口1,波特率为115200

2.1.1将串口模式配置为Asynchronous

在这里插入图片描述

2.2.2波特率设置为115200

在这里插入图片描述

2.2配置定时器

配置定时器频率为1kHz,并打开中断。
频率计算公式:
频率=主时钟频率/预分频系数(PSC)/自动重装值(ARR)

2.2.1设置时钟源

将时钟源设为Internal Clock
在这里插入图片描述

2.2.2设置频率

在这里插入图片描述

2.2.3打开定时器中断

在这里插入图片描述

三、代码实现

3.1在中断回调函数中进行计数

在这里插入图片描述

3.2调用波形显示

在这里插入图片描述

3.3将以下两份代码保存为.c和.h文件,添加到工程中

DataScope_DP.c

#include "DataScope_DP.h"
unsigned char DataScope_OutPut_Buffer[42] = {0};	   //串口发送缓冲区

/*--------------------------------------------------------------------------------------------------
    与上位机通信的数据帧长度固定为4N*1,帧数据字节之间传输延时不可超过1ms,否则将认为当前帧结束。
    UI刷新没有限制显示延时
----------------------------------------------------------------------------------------------------*/

//函数说明:将单精度浮点数据转成4字节数据并存入指定地址
//附加说明:用户无需直接操作此函数
//target:目标单精度数据
//buf:待写入数组
//beg:指定从数组第几个元素开始写入
//函数无返回值
void Float2Byte(float *target,unsigned char *buf,unsigned char beg)
{
    unsigned char *point;
    point = (unsigned char*)target;	  //得到float的地址
    buf[beg]   = point[0];
    buf[beg+1] = point[1];
    buf[beg+2] = point[2];
    buf[beg+3] = point[3];
}
 
 
//函数说明:将待发送通道的单精度浮点数据写入发送缓冲区
//Data:通道数据
//Channel:选择通道(1-10)
//函数无返回 
void DataScope_Get_Channel_Data(float Data,unsigned char Channel)
{
	if ( (Channel > 10) || (Channel == 0) ) return;  //通道个数大于10或者等于0,直接跳出函数
  else
  {
     switch (Channel)
		{
      case 1:  Float2Byte(&Data,DataScope_OutPut_Buffer,1); break;
      case 2:  Float2Byte(&Data,DataScope_OutPut_Buffer,5); break;
		  case 3:  Float2Byte(&Data,DataScope_OutPut_Buffer,9); break;
		  case 4:  Float2Byte(&Data,DataScope_OutPut_Buffer,13); break;
		  case 5:  Float2Byte(&Data,DataScope_OutPut_Buffer,17); break;
		  case 6:  Float2Byte(&Data,DataScope_OutPut_Buffer,21); break;
		  case 7:  Float2Byte(&Data,DataScope_OutPut_Buffer,25); break;
		  case 8:  Float2Byte(&Data,DataScope_OutPut_Buffer,29); break;
		  case 9:  Float2Byte(&Data,DataScope_OutPut_Buffer,33); break;
		  case 10: Float2Byte(&Data,DataScope_OutPut_Buffer,37); break;
		}
  }	 
}


//函数说明:生成DataScopeV1.0能正确识别的帧格式
//Channel_Number,需要发送的通道个数
//返回发送缓冲区数据的个数
//返回0表示帧格式生成失败
unsigned char DataScope_Data_Generate(unsigned char Channel_Number)
{
	if ( (Channel_Number > 10) || (Channel_Number == 0) ) { return 0; }  //通道个数大于10或者等于0,直接跳出函数
  else
  {	
	 DataScope_OutPut_Buffer[0] = '$';  //帧头
		
	 switch(Channel_Number)   
   { 
		 case 1:   DataScope_OutPut_Buffer[5]  =  5; return  6;  
		 case 2:   DataScope_OutPut_Buffer[9]  =  9; return 10;
		 case 3:   DataScope_OutPut_Buffer[13] = 13; return 14; 
		 case 4:   DataScope_OutPut_Buffer[17] = 17; return 18;
		 case 5:   DataScope_OutPut_Buffer[21] = 21; return 22;  
		 case 6:   DataScope_OutPut_Buffer[25] = 25; return 26;
		 case 7:   DataScope_OutPut_Buffer[29] = 29; return 30; 
		 case 8:   DataScope_OutPut_Buffer[33] = 33; return 34; 
		 case 9:   DataScope_OutPut_Buffer[37] = 37; return 38;
     case 10:  DataScope_OutPut_Buffer[41] = 41; return 42; 
   }	 
  }
	return 0;
}

/*-------------------主函数调试--------------------------*/

unsigned char i;          //计数变量
unsigned char Send_Count; //串口需要发送的数据个数
static float a;

	while(1)
		{
			a+=0.1;
			if(a>3.14)  a=-3.14; 
			DataScope_Get_Channel_Data(500*sin(a), 1 );
			DataScope_Get_Channel_Data(500* tan(a), 2 );
			DataScope_Get_Channel_Data( 500*cos(a), 3 ); 
			DataScope_Get_Channel_Data( 100*a , 4 );   
			DataScope_Get_Channel_Data(0, 5 );
			DataScope_Get_Channel_Data(0 , 6 );
			DataScope_Get_Channel_Data(0, 7 );
			DataScope_Get_Channel_Data( 0, 8 ); 
			DataScope_Get_Channel_Data(0, 9 );  
			DataScope_Get_Channel_Data( 0 , 10);
			Send_Count = DataScope_Data_Generate(10);
			for( i = 0 ; i < Send_Count; i++) 
			{
			while((USART1->SR&0X40)==0);  
			USART1->DR = DataScope_OutPut_Buffer[i]; 
			}
			delay_ms(50); //20HZ
		} 

DataScope_DP.h

#ifndef __DATA_PRTOCOL_H
#define __DATA_PRTOCOL_H
 
 
extern unsigned char DataScope_OutPut_Buffer[42];	   //待发送帧数据


void DataScope_Get_Channel_Data(float Data,unsigned char Channel);    // 写通道数据至 待发送帧数据缓存区

unsigned char DataScope_Data_Generate(unsigned char Channel_Number);  // 发送帧数据生成函数
 
 
#endif 

四、注意事项

1.软件不用安装,直接右键以管理员身份运行即可!( 如果打开失败,重启一次电脑试试)
2.与上位机通信的数据帧长度固定为 4*N+1,帧数据字节之间传输延时不可超过 1ms,否则将认为当前帧结束。UI 刷新没有限制显示延时。
3.接线时注意是接无线烧录器的串口端,不是烧录端!!!可以同时读取10个变量,有10个通道。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
开源离线STM32烧录器是一种用于将代码烧录到STM32单片机中的设备或软件工具。与在线烧录器相比,离线烧录器更为灵活,可以通过直接连接到计算机进行操作,无需网络连接。 开源离线STM32烧录器的优点有很多。首先,它具有开源的特性,意味着开发者可以自由地查看和修改代码,适应不同的需求和环境。其次,开源烧录器通常具有丰富的功能和灵活的配置选项,可以满足不同的应用场景。此外,开源烧录器通常拥有庞大的用户社区,可以获得大量的技术支持和使用经验。 开源离线STM32烧录器的工作原理是将要烧录的代码通过USB接口或串口连接到计算机,使用特定的烧录软件将代码烧录到STM32单片机的内存中。软件通常提供了图形化操作界面,用户只需简单操作即可完成烧录过程。此外,一些开源烧录器还提供了批量烧录功能,可以同时烧录多个STM32单片机。 离线烧录器使用非常便捷。用户只需将烧录器连接到计算机,并选择要烧录的代码文件和目标单片机型号,并设置一些烧录参数,然后点击开始烧录即可完成。烧录过程通常会显示烧录的进度和结果,以便用户了解烧录状态。完成烧录后,用户可以断开烧录器与计算机的连接,并将STM32单片机连接到目标设备中运行程序。 总之,开源离线STM32烧录器是一种方便、灵活、可定制的烧录工具,可以满足不同开发者的需求。它的开源特性、丰富的功能和方便的操作使得它成为许多STM32开发者的首选烧录工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值