关于v1.04版本的逐飞助手,基于STC32G12K128,直接调参改变示波器波形实践经验

  • 其他版本的逐飞逐手或芯片,佬们可根据此文章旋转起你们的大脑

资料:Gitee上的逐飞开源:逐飞助手: 逐飞助手是一款多功能的上位机软件,集成了串口助手、虚拟示波器以及摄像头图像显示等多种实用功能。我们将对其进行持续的更新迭代,不局限于对现有的功能进行完善和优化,还包括增加新的功能。因此,如果小伙伴们发现软件不完善的地方,希望你们能及时反馈给逐飞科技,也可以直接联系群管理JAY(QQ:2677611713)。有什么好的建议可以反馈给我们,感谢大家的支持。icon-default.png?t=N7T8https://gitee.com/seekfree/seekfree_assistant

建议先看完其内说明书,了解基本页面。

其中有例程,有应用,也有说明书(只能说他在要应用上是一部 ( 史 ) 诗);

一、为什么要使用逐飞软件示波器

我开始使用它,是因为我参加智能车竞赛,想在软件上更简便的能调PID,观察波形变化寻找最优方案。

我在写此文之前,也粗浅的了解了MATLAB的simulink仿真,也只学了两天,所以只搭了一个简单的PID单环。也经过学长建议,还是要搞逐飞助手。毕竟仿真不能准确的反应现实,但能预测,并且能减少出错率或试错数,减少消耗精力与时间。

为啥选逐飞助手,明明更新换代的这么快?

因为我车用的逐飞开源底层代码库,哈哈哈额,哈哈,额。

二、了解基本函数与变量的基本作用
1.seekfree_assistant_init()与
fifo_init(&temp_uart_fifo, FIFO_DATA_8BIT, temp_uart_buffer, TEMP_BUFFER_SIZE);

这个基本上不用说,用于初始化逐飞助手,初始化fifo,即数据缓冲器,启用存储。

 函数简介     FIFO 初始化 挂载对应缓冲区
 参数说明     *fifo               FIFO 对象指针
 参数说明     type                FIFO 数据位数
 参数说明     *buffer_addr        要挂载的缓冲区
 参数说明     size                缓冲区大小
 返回参数     fifo_state_enum     操作状态

2.seekfree_assistant_oscilloscope_struct结构体
(seekfree_assistant_parameter_struct同下类似)

包含了示波器的各项参数:

  • head帧头:帧头在结构体中主要用于数据的定界和同步,确保数据正确传输和处理。详细作用不多讲了。

  • channel_num(高四位为功能字 低四位为通道数量):执行特定的操作指令或设置测量参数。设置表明使用通道数。

  • check_sum和校检:用于确保数据的准确性和完整性。

  • length包长度:确定波形数据的存储时间和显示范围。

  • dat[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]通道数据:用于存储各通道数据,可用于发送到示波器。

//seekfree_assistant_parameter_struct基本成员功能也同上。

3.(*seekfree_assistant_transfer)(const uint8 *buff, uint32 length)

发送回掉函数,用于从中发送数据,传输存储的函数。

 参数说明     *buff           需要发送的数据地址
 参数说明     length          需要发送的长度
 返回参数     uint32          剩余未发送数据长度


 

4.(*seekfree_assistant_receive) (uint8 *buff, uint32 length)

接收回掉函数,用于接收数据,从接收回调中读取数据,可用于接收在逐飞助手上改变的值。

 参数说明     *buff           需要接收的数据地址
 参数说明     length          要接收的数据最大长度
 返回参数     uint32          接收到的数据长度

5.uart_isr_call_back(uint8 dat)

该函数在isr.c的UART1_Isr() 中断服务函数中进行回调。

将读取到的数据写入FIFO中,进行存储。

6.seekfree_assistant_data_analysis(void)

对接收的数据进行分析,其中包括,读取数据,写入fifo,找帧头,筛选等操作。

7.seekfree_assistant_oscilloscope_send(seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);

发送数据到示波器上,进行显示的函数。

参数为要发送的seekfree_assistant_oscilloscope_struct结构体成员dat数组。

8.seekfree_assistant_parameter_update_flag[];

当某一通道接收到数据时其对应下标的flag会开通。

9.seekfree_assistant_parameter[];

存储了对应下标通道的改变后的值,在seekfree_assistant_data_analysis(void)使用了。

  • 到这里基本的东西已经讲完(其实是能力有限,嘿嘿),接下来是发送接收要用什么了。

三、示波器调参的代码部分

要接收和发送,可根据实例进行结合。

step1:

三个回调函数要先立在主函数外。这样才能对fifo存储内容进行操作。

#define TEMP_BUFFER_SIZE  	64
static  fifo_struct     	temp_uart_fifo;
static  uint8           	temp_uart_buffer[TEMP_BUFFER_SIZE];  // 数据存放数组

uint8 i;
float b;

uint32 seekfree_assistant_receive_callback   (const uint8 *buff, uint32 length)
{
	fifo_read_buffer(&temp_uart_fifo, buff, &length, FIFO_READ_AND_CLEAN);
	return length;
}

uint8 i = 0;

uint32 seekfree_assistant_transfer_callback   (const uint8 *buff, uint32 length)
{
	uart_putbuff(DEBUG_UART, buff, length);
	return 0;
}

// 该函数在isr.c的UART1_Isr() 中断服务函数中进行回调。
void uart_isr_call_back(uint8 dat)
{
	fifo_write_buffer(&temp_uart_fifo, &dat, 1);
}

千万记住要在UART1_Isr() 中断服务函数中进行回调。

step2:

在主函数循环外进行函数指针设置与各种初始化。

// 设置函数指针
seekfree_assistant_transfer = seekfree_assistant_transfer_callback;
// 设置函数指针
seekfree_assistant_receive = seekfree_assistant_receive_callback;
	
seekfree_assistant_init();
	
// 创建fifo
fifo_init(&temp_uart_fifo, FIFO_DATA_8BIT, temp_uart_buffer, TEMP_BUFFER_SIZE);
	

step3:

在主函数循环中的代码实例:

//分析接收数据
seekfree_assistant_data_analysis();
​
//遍历寻找改变了值的通道,SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT可替换成你所设的通道数
for(i = 0; i < SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT; i++)
{
    if(seekfree_assistant_parameter_update_flag[i])
    {
        //标志清0
        seekfree_assistant_parameter_update_flag[i] = 0;
        //接收赋值
        b = seekfree_assistant_parameter[i];
        seekfree_assistant_oscilloscope_data[i] = b;
    }
}
​
// 通过串口发送虚拟示波器数据
seekfree_assistant_oscilloscope_send(&seekfree_assistant_oscilloscope_data);

具体的其它功能实现,大家加油。

总结:为啥不这些代码写一起发出来,因为我要水篇幅(bushi

因为分开写好讲解,并且也不会让人望而却步,基本安步骤来操作应该没啥问题吧、吧,吧?

本人现为大一学生,且是第一次发文,菜基一个。看没人讲这个,我也因此饱受折磨,才作此文。

希望各位佬能指出错误,我也能多学点东西。

  • 31
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值