树莓派与STM32(rt1064)串口通信

news2025/6/19 14:48:20

目录

一、树莓派通信

1、硬件连线准备

2、安装Serial和打开树莓派串口

2.1安装Serial

2.2打开树莓派串口

2.3修改串口映射关系

3、树莓派代码

4、上位机

5、运行uart.py代码进行测试

5.1 树莓派发送,上位机接收

5.2上位机发送,树莓派接收

 二、STM32通信

6、配置串口

7、测试STM32通信

7.1 STM32发送数据,上位机接收数据

7.2 上位机发送数据,STM32接收数据

三、树莓派与STM32通信

8、树莓派与STM32通信测试


一、树莓派通信

1、硬件连线准备

树莓派4B、杜邦线、TTL转USB(只是验证树莓派功能,与STM32通信只需要杜邦线)

树莓派 RX 与TTL-USB TX相连接   树莓派TX与TTL-USB RX相连接 

 

 

2、安装Serial和打开树莓派串口

2.1安装Serial

输入 sudo apt-get install serial

2.2打开树莓派串口

终端输入sudo raspi-config打开界面设置

sudo raspi-config

 Interfacing Options→serial→否→是

输入ls -l /dev查看设备

ls -l /dev

 

 

2.3修改串口映射关系

输入sudo nano /boot/config.txt

sudo nano /boot/config.txt

末行添加 dtoverlay=pi3-miniuart-bit

 输入ls -l /dev查看设备

 

3、树莓派代码

 Xshell7和MobaXterm

uart.py代码如下

 

# -*- coding: utf-8 -*-
import serial
import time
ser = serial.Serial('/dev/ttyAMA0', 115200) #打开串口设备
if ser.isOpen == False:
    ser.open()          # 打开串口    
a=ser.write(b"x09")     
print(a)
try:
    while True:
        size = ser.inWaiting()  	# 获得缓冲区字符
        if size != 0:
            res = ser.read(size)   	# 读取内容并显示
            print(res)
            print(ser.bytesize) #字节大小 
            if res == b'\x01\r\n':
                ser.write(b'\x05')
                print(ser.baudrate) #波特率    
            elif res == b'\x02':
                ser.write(b'\x06')
                print(ser.baudrate) #波特率 
            elif res == b'\x03':
                ser.write(b'\x07')
                print(ser.baudrate) #波特率                 
            elif res == b'\x04':
                ser.write(b'\x08')
                print(ser.baudrate) #波特率                                                     
            ser.flushInput()		# 情况接收缓存区
            time.sleep(0.5)			# 软件延时
except KeyboardInterrupt:
    ser.close()

 

4、上位机

我用的是正点原子的XCOM2.1 (这个官网都有免费的自己去下一下)

5、运行uart.py代码进行测试

5.1 树莓派发送,上位机接收

运行代码

 测试结果

树莓派发送 a=ser.write(b'x09')

 上位机接收:x09   (16进制不显示)

 5.2上位机发送,树莓派接收

上位机发送0x01

树莓派接收数据并反馈数据

 if res == b'\x01\r\n':   #如果接受到 \x01\r\n (注意:树莓派接受数据和发送数据格式请严格要求)
     ser.write(b'\x05')   #树莓派发送 \x05   上位机接受(16进制显示)

 

 二、STM32通信

芯片是RT1064  板子是学习版,都是在智能车比赛 逐飞科技 买的(实验室拿学弟的)。

6、配置串口

配置好后,发送是 uart_putchar(USART_1,0x01);    //串口发送函数

接受是 uart_data这个变量,不要用库函数的接收函数,用了,程序会卡住,因为等待接收当然会卡住。


//整套推荐IO查看Projecct文件夹下的TXT文
//打开新的工程或者工程移动了位置务必执行以下操作
//第一步 关闭上面所有打开的文件
//第二步 project  clean  等待下方进度条走完



#include "headfile.h"

uint8 example_rx_buffer;
lpuart_transfer_t   example_receivexfer;
lpuart_handle_t     example_g_lpuartHandle;

uint8 uart_data;
uint8 uart_send;
uint8 dat;

void example_uart_callback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData)
{
    if(kStatus_LPUART_RxIdle == status)
    {
        //数据已经被写入到了 之前设置的BUFF中
        //本例程使用的BUFF为 example_rx_buffer
        uart_data = example_rx_buffer;//将数据取出
    }
    
    handle->rxDataSize = example_receivexfer.dataSize;  //还原缓冲区长度
    handle->rxData = example_receivexfer.data;          //还原缓冲区地址
}

int main(void)
{
	DisableGlobalIRQ();
    board_init();//务必保留,本函数用于初始化MPU 时钟 调试串口
    	
    uart_init (USART_1, 115200,UART1_TX_B12,UART1_RX_B13);	
    NVIC_SetPriority(LPUART1_IRQn,15);         //设置串口中断优先级 范围0-15 越小优先级越高
    uart_rx_irq(USART_1,1);
	
    //配置串口接收的缓冲区及缓冲区长度
    example_receivexfer.dataSize = 1;
    example_receivexfer.data = &example_rx_buffer;
    
    //设置中断函数及其参数
    uart_set_handle(USART_1, &example_g_lpuartHandle, example_uart_callback, NULL, 0, example_receivexfer.data, 1);
	
	NVIC_SetPriority(PIT_IRQn,10);  //设置中断优先级 范围0-15 越小优先级越高 四路PIT共用一个PIT中断函数
    
    EnableGlobalIRQ(0);
    
    while (1)
    {			
		uart_putchar(USART_1,0x01);	//串口发送函数		
    }
}

7、测试STM32通信

7.1 STM32发送数据,上位机接收数据

STM32发送0x01 ,上位机一直接收。

7.2 上位机发送数据,STM32接收数据

上位机发送0x09,STM32接收到并发送0x15.

三、树莓派与STM32通信

 最后其实就把STM32与树莓派用杜邦线连接就行,不用TTL-USB接口。

8、树莓派与STM32通信测试

按键模拟发送信号,STM32向树莓派发送数据,树莓派接收到数据后,向STM32发送命令控制小车电机转动。

按键按下(STM32发送‘0x01')→树莓派接收’\x01',发送‘\x05'→STM32接收到’0x05' 控制小车电机转动。(注意:树莓派与STM32的收发数据格式与上位机不同,最好自己动手实验)四个按键模拟4种信号(前后左右)每个信号控制一个轮子转动。

       

beauty_202304172231556866

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/426435.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HopeHomi脚手架(四)redis、redisson模块

项目结构 Redis RedisSpiModuleImport 基于SPI。在项目启动的时候返回待加载类名 public class RedisSpiModuleImport implements SpiEnvironmentModuleImport {Overridepublic String[] readyImportClassName() {return new String[]{RedisConfiguration.class.getName()};…

裸机配置Java环境,解决 -bash: jps: command not found

目录 配置JDK 1、第一步:使用yum命令查找JDK 2、第二步:执行安装命令 3、第三步:验证是否安装成功 4、第四步:验证是否可用 5、第五步:安装开发环境 6、第六步:配置环境变量 今天申请了公司的开发机器&…

【openGauss实战10】备份与恢复

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

视觉SLAM ch12 建图(RGB-D)

一、RGB-D稠密建图 RGB-D相机通结构光和飞行时间获取深度。 稠密重建方法:根据估计的相机位姿,将RGB-D数据转化为点云,然后进行拼接,最终得到由离散的点组成的点云地图。 在此基础上,如果希望估计物体的表面&#x…

Python 实验二 Python语言基础

1.运用输入输出函数编写程序,将华氏温度转换成摄氏温度。换算公式:C(F-32)*5/9,其中 C为摄氏温度,F为华氏温度。 Ffloat(input("请输入你要转换的华氏温度:")) C(F-32)*5/9 print("转换为摄氏温度为:&…

opencv:介绍 SIFT(尺度不变特征变换)及其使用(一)

在本章中 我们将了解 SIFT 算法的概念 我们将学习如何找到 SIFT 关键点和描述符。 理论 在过去的几章中,我们了解了一些角点检测器,如 Harris 等。它们具有旋转不变性,这意味着即使图像旋转,我们也可以找到相同的角点。这是显而易见的,因为旋转后的图像中的角点仍然是角点…

Cairo 1 实战入门:编写测试部署ERC-20代币智能合约

概述 读者可以前往 我的博客 获得更好的阅读体验。 Cairo 是 ZK Rollup 的领域专用语言,目前仅用于 StarkNet 项目。随着 Rollup 叙事的发展,我们认为 cairo 在未来一定会成为智能合约开发的核心语言。 本文类似我之前编写的 Foundry教程:…

BART模型简单介绍

目录 一、概要 二、深入扩展 2.1 预训练任务 2.2 模型精调 一、概要 BART(Bidirectional and Auto-Regressive Transformers)模型使用标准的基于Transformer的序列到序列结构,主要区别在于用GeLU(Gaussian Error Linerar Units…

西安石油大学C++上机实验 上机二:友元和运算符重载程序设计(2学时)

上机二:友元和运算符重载程序设计(2学时) 实验目的: 了解友元函数的概念。 掌握友元函数的定义和使用方法。 了解运算符重载的概念和使用方法。 掌握几种常用的运算符重载的方法。 实验内容 编写一个时间类,实现…

【面试】记一次中小公司某一次面试题

文章目录1. MySQL中explain执行计划你比较关注哪些字段?2.char、varchar 和 text的区别?3. int(3)和int(11)查询的区别?4. 字段里NULL和空值的区别?5. spring中怎么解决循环依赖问题?5.1 重新设计5.2 使用注解 Lazy5.3…

ESP32设备驱动-HDC2080温湿度传感器驱动

HDC2080温湿度传感器驱动 文章目录 HDC2080温湿度传感器驱动2、硬件准备3、软件准备4、驱动实现HDC2080 器件是一款集成式湿度和温度传感器,可在小型 DFN 封装中以极低的功耗提供高精度测量。基于电容的传感器包括新的集成数字功能和用于消散冷凝和湿气的加热元件。 HDC2080 数…

虹科新闻 | 冲击记录仪ASPION G-Log 2荣获行业领袖奖-Best of Industry Award

虹科ASPION G-Log 2 荣获 行业领袖奖 “2022 Best of Industry Award” 创新的运输冲击数据记录仪虹科ASPION G-Log 2荣获2022年行业领袖奖。经过5个月的投票和近2万张选票,G-Log 2在传感器 由冲击或振动,甚至是温度或相对湿度等气候因素引起的运输损坏…

ERTEC200P-2 PROFINET设备完全开发手册(5-3)

5.3 标识和维护数据(I&M) 标识和维护数据是一类特殊的数据记录,其中 “I&M0”(“16#AFF0”)用于有关模块或设备的常规信息。包含的信息例如:订货号/Order-ID, 硬件软件版本/hard- and software v…

强化学习之蒙特卡罗(MC)、动态规划(DP)、时间差分(TD)

强化学习笔记1.马尔可夫决策过程(MDP)1.马尔可夫性质2.马尔可夫过程3.马尔可夫奖励过程(MRP)4.马尔可夫决策过程(MDP)2.蒙特卡罗(MC)、动态规划(DP)、时间差分(TD)1.蒙特卡罗(MC)2.动态规划(DP)3.时间差分(…

【C】Function

系列连载 【python / C / C】 参考 《C语言程序设计(第四版)谭浩强》【C语言】C语言视频教程《郝斌 C 语言自学教程》 文章目录为什么需要函数什么叫函数如何定义函数函数的分类注意的问题常用的系统函数为什么需要函数 避免重复性操作 有利于程序模…

23种设计模式之建造者模式(黑马程序员)

建造者模式一、概述二、结构三、实现四、总结五、模式扩展在最后一、概述 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。 分离了部件的构造(由Build来负责)和装配(Director负责)。从而可以…

Spring 的创建和使用

目录 一. 创建 Spring项目 二. 存储 Bean 对象到Spring中 1. 添加Spring配置文件 2. 创建一个 Bean 对象 3. 将 Bean 存储到 Spring 容器中 三. 从 Spring 中获取并使用 Bean 对象 1. 创建 Spring 上下文 1.1 使用 ApplicationContext 作为Spring上下文 1.2 使用 Bea…

ONLYOFFICE 邀请您一起创建插件

文档编辑器中的插件具有高度的便捷性和实用性,这对工作效率的提高至关重要,ONLYOFFICE 功能的强大也离不开丰富的插件资源。 现在,您可以自己制作插件并上架到 ONLYOFFICE,一起帮助广大用户更高效地办公,并获得相应的…

KDMP真实案例之主机 I/O 请求没有正常结束导致系统重启

目录 查看kdump文件 导致系统崩溃的寄存器指向的内存地址 导致重启的汇编指令 导致重启的源码 block/blk-core.c文件简介 导致重启的blk_finish_request函数源码 函数源码解读 系统重启原因 处理意见 查看kdump文件 各字段意思说明 KERNEL:显示内核文件的路…

你真的会用iPad吗,如何使iPad秒变生产力工具?在iPad上用vscode写代码搞开发

目录 前言 视频教程 1. 本地环境配置 2. 内网穿透 2.1 安装cpolar内网穿透(支持一键自动安装脚本) 2.2 创建HTTP隧道 3. 测试远程访问 4. 配置固定二级子域名 4.1 保留二级子域名 4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问 6. iPad通过软件远程vscode…