一、板间通信

板间通信是底盘与上下云台之间的通信

A型板和两个C型板

主要可以分成两个方面,一是哨兵的模式选择和遥控器数据的解码;二是对于CAN发送和接收数据的处理。

二、CAN的板间通信相关函数

can_util.c封装了有关can协议的一些底层函数

1.Can_InitFilterAndStart(Can2.hcan);     //初始化can过滤器并启用can总线收发

2.CAN_WriteTxdata(&Can2,&CAN_Buffchassis_judge);     //写入环形队列并发送

三、数据发送的相关函数

1.初始化 DataConnect_Init

2. 更新板间通信数据包 DataConnect_Update

3. 发送板间通信数据 SendChassisData(Chassis_Data_t *chassisdata)

4.任务函数

void Chassis_SendTask()
{
for(;;)
{
DataConnect_Update();
SendChassisData(&ChassisData);
osDelay(1);
}
}

5.解码函数

GimbalUpper_Decode(uint8_t rxdata[])

GimbalLower_Decode(uint8_t rxdata[])

6.解码回调函数

void Connect_EncoderDecodeCallback(CAN_HandleTypeDef* phcan, uint16_t stdid, uint8_t rxdata[])
{
switch (stdid)

{
case GIMBAL_UPPER:
GimbalUpper_Decode(rxdata);
break;
case GIMBAL_LOWER:
GimbalLower_Decode(rxdata);
break;

default:
break;

}

}

2022-04-29 21:55:19

四、数据接收的相关函数

void DataConnect_Init(void) //初始化

void SendGimbalData(Gimbal_Data_t *gimbaldata)

void SendLowerPCData()   //发送上云台小电脑数据给下云台

void ChassisJudge_Decode(uint8_t rxdata[])  //底盘数据解码(除遥控器)

void Remote_Decode(uint8_t rxdata[])   //遥控器数据解码

void miniPC1_Decode(uint8_t rxdata[])  //云台电脑数据解码1

void miniPC2_Decode(uint8_t rxdata[])//云台电脑数据解码2

void Connect_EncoderDecodeCallback(CAN_HandleTypeDef* phcan, uint16_t stdid, uint8_t rxdata[])
{
switch (stdid)

{
case CHASSIS_JUDGE:
ChassisJudge_Decode(rxdata) ;
break;

case REMOTE:
Remote_Decode(rxdata) ;
break;

case MINIPC_LOWER1:
miniPC1_Decode(rxdata) ;
break;

case MINIPC_LOWER2:
miniPC2_Decode(rxdata) ;
break;


default:
break;

}

}

2022-04-30 10:07:37

can板间通信代码学习的更多相关文章

  1. 【原】iOS多线程之线程间通信和线程互斥

    线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后 ...

  2. react系列(三)组件间通信

    组件间通信 React的基本组件元素是一个个组件,组件之间可能存在关联.组合等关系.不同的组件之间,经常会发生数据传递或者交换,我们称之为组件间通信. 根据传递的复杂程度,可以分为三种情况: 父子间通 ...

  3. 0038 Java学习笔记-多线程-传统线程间通信、Condition、阻塞队列、《疯狂Java讲义 第三版》进程间通信示例代码存在的一个问题

    调用同步锁的wait().notify().notifyAll()进行线程通信 看这个经典的存取款问题,要求两个线程存款,两个线程取款,账户里有余额的时候只能取款,没余额的时候只能存款,存取款金额相同 ...

  4. ucos实时操作系统学习笔记——任务间通信(消息)

    ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...

  5. ucos实时操作系统学习笔记——任务间通信(信号量)

    ucos实时操作系统的任务间通信有好多种,本人主要学习了sem, mutex, queue, messagebox这四种.系统内核代码中,这几种任务间通信机制的实现机制相似,接下来记录一下本人对核心代 ...

  6. Java多线程学习(五)线程间通信知识点补充

    系列文章传送门: Java多线程学习(二)synchronized关键字(1) Java多线程学习(二)synchronized关键字(2) Java多线程学习(三)volatile关键字 Java多 ...

  7. Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道

    Linux 系统编程 学习:02-进程间通信1:Unix IPC(1)管道 背景 上一讲我们介绍了创建子进程的方式.我们都知道,创建子进程是为了与父进程协作(或者是为了执行新的程序,参考 Linux ...

  8. Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号

    Linux 系统编程 学习:03-进程间通信1:Unix IPC(2)信号 背景 上一讲我们介绍了Unix IPC中的2种管道. 回顾一下上一讲的介绍,IPC的方式通常有: Unix IPC包括:管道 ...

  9. Linux 系统编程 学习:05-进程间通信2:System V IPC(2)

    Linux 系统编程 学习:05-进程间通信2:System V IPC(2) 背景 上一讲 进程间通信:System V IPC(1)中,我们介绍了System IPC中有关消息队列.共享内存的概念 ...

随机推荐

  1. ucore lab4 内核线程管理 学习笔记

    越学越简单,真是越学越简单啊 看视频的时候着实被那复杂的函数调用图吓到了.看代码的时候发现条理还是很清晰的,远没有没想象的那么复杂. 这节创建了俩内核线程,然后运行第一个线程,再由第一个切换到第二个. ...

  2. Linux磁盘分区-mount挂载

    Linux磁盘分区类型 磁盘存储术语CHS head:磁头  磁头数=盘面数 track:磁道  磁道=柱面数 sector:扇区,512bytes cylinder:柱面 1柱面=512*secto ...

  3. Go 语言快速开发入门

    目录 需求 开发的步骤 linux下如何开发Go程序 MAC下如何开发Go程序 Golang执行流程分析 编译和运行说明 Go程序开发的注意事项 Go语言的转义字符(escapechar) Golan ...

  4. jQuery前端第三方框架

    计时器 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  5. python入门基础知识二(字符串的常用操作方法)

    下标/索引: a = "I'm interested in Python." print(a[4]) i # 英文的字符串每一个下标/索引对应一个字母(含标点) a = '我喜欢p ...

  6. unity---2d游戏杂记

    2d游戏制作的笔记 save Layout 增加配置 Packges文件夹 插件 调整视野 鼠标中键 拉近拉远 鼠标右键 平移 Alt+鼠标左键 移动视角 Pivot/Center 当前物体中心和多个 ...

  7. 每天一个 HTTP 状态码 205

    205 Reset Content 205 Reset Content 表示服务器成功地处理了客户端的请求,要求客户端重置它发送请求时的文档视图.这个响应码跟 204 No Content 类似,也不 ...

  8. 搭建自己的个人web项目指南 ---(一)服务器购买与基础配置 | windows连接到自己的云服务器

    (一)服务器购买与基础配置 | windows连接到自己的云服务器 一.服务器选购指南 厂商选择 目前市面上提供服务器租用的厂商很多,比较知名的还是阿里云和腾讯云,两家的稳定性都非常不错,小伙伴们可以 ...

  9. sqlmap自动检测漏洞并进行渗透

    使用案例靶场为上篇文章介绍的封神台---靶场 https://hack.zkaq.cn/   提示:采用开源靶场里面的猫舍进行渗透注入,仅用于安全防范无安全侵犯 1.首先检测是否已经安装成功sqlma ...

  10. JavaScript之parseInt()方法

    parseInt(string, radix):用于解析一个字符串并返回指定基数的十进制整数或者NaN string参数为被解析的值,如果该值不是一个字符串,则会隐式的使用toString()方法转化 ...