当前位置: 代码网 > it编程>编程语言>Javascript > 基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率(1)

基于树莓派4B与STM32的UART串口通信实验(代码开源)_树莓派4b串口波特率(1)

2024年08月02日 Javascript 我要评论
(2)、SPI,(3)、I2C(该项目使用Serial)

1.2 树莓派4b安装serial与使用

1.2.1 安装serial
1.2.2 打开树莓派4b串口

1.2.3 修改串口映射关系

1.2.4 修改配置文件
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

二、安装minicom与树莓派4b测试

2.1  minicom安装

sudo apt-get install minicom

2.2 树莓派4b通信测试

使用usb-ttl模块交叉连接树莓派4b的 uart 的引脚;

我们在下图 minicom 红框区域输入 **hi ikun!**字样之后,可以在 xcom 的端口处看到字符串成功发送到了 pc 端;

同理,在 xcom 端口发送 hi my brother 字样之后,可以在树莓派4b的  minicom 红框区域成功接收到该信息!

三、树莓派4b与stm32通信

3.1 树莓派4b代码

我们利用 python 代码写一个循环发送数字的代码程序,具体代码如下:

import serial  
import time  
  
ser = serial.serial('/dev/ttyama0',115200) # 串口初始化,根据实际情况修改串口号和波特率  

# 定义要输出的数字  
num =  196 

while true:  
                
    ser.write(str(int(num)).encode()) # 发送数字到串口   
    num += 1  
    if num > 205:  
        num = 196
     
    time.sleep(0.2) # 等待1秒钟  

3.2 cubemx配置

1、rcc配置外部高速晶振(精度更高)——hse;

2、sys配置:debug设置成serial wire否则可能导致芯片自锁);

3、i2c配置:

4、usart1配置:设置uart1串口;波特率:115200;开启uart串口中断;

5、时钟树配置

6、工程配置

3.3 stm32代码

3.3.1 oled代码

oled模块主要是方便显示树莓派4b发送给stm32的数据信息!考虑到实际情况,我们一般需要根据树莓派4b发送过来的数字信息,所以,我们这里利用oled进行数字显示!

小数显示api函数:

//z_len为整数显示位数,f_len为小数显示位数,size2为字体大小
void oled_showdecimal(u8 x,u8 y,float num,u8 z_len,u8 f_len,u8 size2)
{         	
	u8 t,temp;
	u8 enshow;
	int z_temp,f_temp;      
	z_temp=(int)num;
	//整数部分
	for(t=0;t<z_len;t++)
	{
		temp=(z_temp/oled_pow(10,z_len-t-1))%10;
		if(enshow==0 && t<(z_len-1))
		{
			if(temp==0)
			{
				oled_showchar(x+(size2/2)*t,y,' ',size2);
				continue;
			}
			else
			enshow=1;
		}
		oled_showchar(x+(size2/2)*t,y,temp+'0',size2); 
	}
	//小数点
	oled_showchar(x+(size2/2)*(z_len),y,'.',size2); 
	
	f_temp=(int)((num-z_temp)*(oled_pow(10,f_len)));
  //小数部分
	for(t=0;t<f_len;t++)
	{
		temp=(f_temp/oled_pow(10,f_len-t-1))%10;
		oled_showchar(x+(size2/2)*(t+z_len)+5,y,temp+'0',size2); 
	}
}
3.3.2 uart代码

uart.h:

#ifndef __uart_h
#define __uart_h

#include "stm32f1xx_hal.h" 

extern uart_handletypedef huart1;

#define usart1_rec_len  600

extern int  usart1_rx_buf[usart1_rec_len];
extern uint16_t usart1_rx_sta;
extern int usart1_newdata;

void  hal_uart_rxcpltcallback(uart_handletypedef  *huart);

#endif

uart.c:

#include "uart.h"
#include "oled.h"

int usart1_rx_buf[usart1_rec_len];		//目标数据
uint16_t usart1_rx_sta=2;
int usart1_newdata;

extern int num;		//百位
extern int num2;    //十位
extern int num3;    //个位


void  hal_uart_rxcpltcallback(uart_handletypedef  *huart)
{
    if(huart ==&huart1)
    { 
			
      usart1_rx_buf[usart1_rx_sta&0x7fff]=usart1_newdata; 					
      usart1_rx_sta++;  
			
						
      if(usart1_rx_sta>(usart1_rec_len-1))usart1_rx_sta=0;

			//num = usart1_rx_buf[usart1_rx_sta];
			
			hal_uart_receive_it(&huart1,(uint8_t *)&usart1_newdata,1);
			
			num = usart1_rx_buf[usart1_rx_sta-1];			
			num2 = usart1_rx_buf[usart1_rx_sta-2];
			num3 = usart1_rx_buf[usart1_rx_sta-3];			
    }		
}
3.3.3 数据解码代码

control.c:

#include "control.h"
#include "uart.h"
#include "tim.h"
#include "oled.h"

int num;
int num2;
int num3;
int value;
int flag;
int last;


void targettracking()
{
	flag = usart1_rx_sta - last;
				
	last = usart1_rx_sta;
	
	value = (num3-48) * 100 + (num2-48) * 10 + (num-48) * 1;
	
	oled_showstr(10,2,"object center",2);
	oled_showdecimal(45,4,value,3,1,16);
	
	if(flag == 2)
	{
		value = (num2-48) * 10 + (num-48) * 1;
		oled_showdecimal(40,4,value,3,1,16);
	}
	
}

代码运行之后:

四、高级应用

作者这里以上一篇博客的网络模型检测结果为例,代码如下:

import cv2
import numpy as np
import onnxruntime as ort
import serial
import time

## 最后

**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、oppo等大厂,18年进入阿里一直到现在。**

**深知大多数java工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。**

**因此收集整理了一份《2024年嵌入式&物联网开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**

![img](https://img-blog.csdnimg.cn/img_convert/0186901149a2abf61aa33c8453e64b16.png)

![img](https://img-blog.csdnimg.cn/img_convert/f46519ad296e0b4b72029a5100a5877d.jpeg)

![img](https://img-blog.csdnimg.cn/img_convert/19e5244c5e4235b143ed77b0317a8f5a.png)

 ![img](https://img-blog.csdnimg.cn/img_convert/b6647dd2ea32a7e52239d150cac4610d.png)

![img](https://img-blog.csdnimg.cn/img_convert/4da28c27bbd275bf9b2911d2ccbfeb07.png)

![img](https://img-blog.csdnimg.cn/img_convert/7a3dd28f9bbad4113d7d0413801dc773.png)

![](https://img-blog.csdnimg.cn/img_convert/813ecf14eb30f9189f5dd9a26f4320ce.png)

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


7kifn-1715710950517)]

[外链图片转存中...(img-db6x3o9v-1715710950519)]

[外链图片转存中...(img-2mifnw8q-1715710950519)]

 [外链图片转存中...(img-unsgx7yr-1715710950520)]

[外链图片转存中...(img-vin91dye-1715710950520)]

[外链图片转存中...(img-g0ed0vbj-1715710950521)]

[外链图片转存中...(img-vdpavz8y-1715710950521)]

 

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上嵌入式&物联网开发知识点,真正体系化!**

[**如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!**](https://bbs.csdn.net/topics/618654289)

**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**!!


(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com