IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> Jetson nano和STM32通信 -> 正文阅读

[嵌入式]Jetson nano和STM32通信

Jetson nano系列之串口使用



前言

据上次博主写OpenMV与STM32通信的博客已经过去两个月了,今天在写下Jetson nano 与 STM32 的通信问题。

我先把上次文章的地址贴过来:
Openmv与STM32通信
还有相关的程序,我也已经打包好上传到了CSDN上,我在把它贴出来:
基于STM32C8T6的OLED+USART+OpenMV

之所以要提到OpenMV的通信问题,是因为Jetson nano的串口通信过程和OpenMV相差不大,二者可以做一个对比。


一、Jetson nano串口配置

??这里的串口配置,CSDN上许多博主都有说到,而且也都挺详细的,所以我就不大做文章,我就一笔带过就好了。 ? ? 配置串口的时,记得给予Jetson nano串口权限,在终端控制区输入
`sudo chmod 777 /dev/ttyTHS1` 

这个指令,打开串口权限,这个权限每次重新开机后都需要重新设置。

import serial

com = serial.Serial("/dev/ttyTHS1",115200)

??这就是打开串口所需要的代码,由于和OpenMv一样,也是基于python,所以也是一样的简洁和实用。 ??主要操作就是,调用serial库,然后使用其中的函数,打开和配置串口,像我在代码中所写的,打开串口,配置其波特率为115200。

二、通信过程

??在我之前的OpenMV与STM32通信的博客中,我提及到的OpenMV和STM32数据传输通信中所使用的方法,而现在改用Jetson nano来实现与STM32数据传输通信,基本上在OpenMV与STM32上传输数据能成功的方法也可以适用于Jetson nano上。 ??Jetson nano写串口的函数和OpenMV写串口的函数一样,都是 .write( ) 的函数来写入,这就对写入的数据有所要求。

1.使用数据包的形式发送数据

代码如下:

impor struct

def pack_Data(a,b):
    temp = struct.pack("<BBbb",0x2C,0x12,int(a),int(b))
    print(temp)

    com.write(temp)

??首先这里需要引入struct库,然后调用struct中的 .pack 函数,使用该函数来对所需要发送的数据进行打包。 ??对于struct.pack() 的函数分析, 可以参考博主之前写的OpenMV的数据传输通信部分,也可以CSDN上搜索 struct.pack() 这个噶不是这里不在重复介绍解释,这里的主要操作是,我声明我所发送的几个数据的格式,并将其打包完成后,再一并发送。 ??对于0x2C、0x12这两个所对应的是**BB**,而B所对应的是有符号的char类型,但在这影响不大,0x2C、0x12都位于[-128,127]的区间中,毫无疑问,这里出现的这两个数据,便是起到数据帧头的作用。本来按理说,应该在数据串的末端再增加一个校验和来作为数据是否完全传输的判断来确保数据的准确性的,但在这就先不重复说明,大家应该都知道怎么操作。 ??而后面的两个数据——数据a、数据b,对应的是bb这两个类型格式,而b所对应的是无符号的char类型,区间位于[0,255],这个后面数据传输时候是需要稍加注意的。于此之外,还有在这个数据接收的过程应该格外注意下,不同的数据类型所占的数组大小不同,很多情况下数据为0,可能是因为你读取数组存放位置出现了问题,而不是数据没有送达到位。 ??最后再通过com. write( temp)将数据发送出去。

2.另外一种数据包形式发送数据

代码如下:

BUF = bytearray(5)

def packData( a , b, ):
    print(BUF)
    struct.pack_into('<2B2b', BUF, 0, 0x2C, 0x12,  a, b, )
    checksum = 0
    for i in BUF[:-1]:
        checksum += i
        checksum = (checksum & 0xff)
    struct.pack_into('<B', BUF, 4, checksum)

    com.write(BUF)

??这个方法是使用 struct 库中另外的函数, struct.pack_into() 函数 ??struct.pack_into(fmt, buffer, offset, v1, v2, ...)该函数的用法: ??按照指定的格式fmt,将v1,v2...打包到buffer中,其中偏移位置为offset。 也就说在这个函数中的作用就是将0x2C、0x12、数据a、数据b 都加入到数组BUF中,并在最后为这个数组添加一个校验位。而数据格式类型的选择与之前的 .pack( )函数中的相同,只是此处BBbb变成了2B2b而已。

3.使用list直接发送数据

代码如下:

def Data(a,b):
    data = [0x2C,0x12,int(a),int(b),0xAA]
    data = bytearray(data)

    print(data)
    com.write(data)
??相较于以数据包的形式发送数据,本人比较喜欢这样发送数据的方法,比较简单,但是数据区间是[0,255]。此方法减少了数据处理的工作量。 ??该方法最重要的一点就是对数据进行 bytearray() 的处理,只用这样处理后的数据才可以发送打印到串口上。需要注意。 ??最后的0xAA便是校验位。

三、STM32数据处理

??STM32数据接收部分其实和OpenMv的那篇文章相同,同样也是打开串口1,改变波特率为115200。 ??开启接收中断,然后在中断进行数据处理。首先需要前两个帧头正确了,最后是最后一位的校验位正确了,这段数据才算有效。

我大概的代码如下(偷懒了一下,我并没有检查最后一位的校验位):

void USART1_IRQHandler(void)
{

		static u8 Rebuf[20]={0};
		static u8 i = 0;

		if( USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET )
	{
		Rebuf[i++] = USART_ReceiveData(USART1);
		if(Rebuf[0] != 0x2c)
				i = 0;
		if((i==2)&&Rebuf[1] != 0x12)
			  i = 0;

			if(i>=10)
			{
				memcpy(OpenMV_Rx_BUF,Rebuf,i);
				i = 0;
			}
			USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标志

	}
}

总结

??因为之前有配置OpenMV和STM32数据传输通信的问题频出,所谓吃一堑长一智,这次Jetson nano的数据传输串口通信上,并没有那么多的问题。所以我在本文开头才说先看完我的OpenMV串口通信的博客再来看我这篇文章,这样才会比较容易读懂。
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-08-14 14:14:35  更:2021-08-14 14:15:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 2:41:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计