(3)---STM32通信

news2024/11/20 11:40:06

目录

【1】通信的基础知识

【2】USART 

【3】串口通信协议

【4】相关寄存器 

   串口控制寄存器 

   波特率寄存器

   中断和状态寄存器

   数据发送寄存器  

   数据接收寄存器 

【5】 USART功能框图

【6】串口发送实验

 实验要求

1.观察实物

2.分析原理图

3.STM32CubeMX配置

4、寄存器方式编写发送接受一个字节的函数

5、寄存器方式编写发送接受一个字节的函数

6、串口发送接收函数验证

7、不定长接受

8、重定向


【1】通信的基础知识

1.通信:至少有收发两方

2.通信方式的划分

同步信号:通信双方根据同步信号通信,比如双方有一个共同的时钟信号(SPI同步通信)

异步通信:通信双方有自己的独立系统时钟,大家约定通信的速度,异步通信不需要

同步比异步多了根线,这个线是同步时钟

串行通信:指的是同一时刻只能发送一个bit位,因此只需要一根新也可以

优点:占用引脚资源少

缺点:速率慢

并行通信:指的是同一时刻可以发送或者接收多个bit位,所以需要多根数据线

优点:占用引脚资源多

缺点:速率快

串行通信与并行通信的区别:

串行传输距离远

并行传输距离近

1602LED屏幕就是并行通信

单工、半双工、全双工:

单工:要么收,要么发,只能做接受设备或者发送设备。比如:收音机

半双工:可以收,可以发,但是同一时刻只能收或者发。比如:对讲机

全双工:可以在同一时刻即接收,又发送。手机

 

 485半双工 用差分的方式

UART常用的串口通信

SPI LED屏幕有点SPI支持 ss片选相当于点名 主机相当于老师 从机相当于学生

I2C是单总线加了同步时钟

【2】USART 

  Universal Synchonous Asynchronous receiver transmitter 

  中文参考手册 564页

USART:   支持同步\异步通信、全双工、串行

UART :没有信号线,只支持异步通信、全双工、串行

USART不配置时钟线实现UART

【3】串口通信协议

  数据帧格式:

              空闲状态:信号线保持高电平

              起始位:1位   低电平表示数据包的起始

              数据位:8位or9位

              校验位(可选):奇偶校验

                       奇校验:

                               数据位上的1的个数 + 校验位上1的个数 = 奇数

                       偶校验:

                               数据位上的1的个数 + 校验位上1的个数 = 偶数

              停止位:1位  将电平信号拉高,代表一个数据包发送结束,回到空闲状态。

 

 

 

 波特率:

【4】相关寄存器 

   串口控制寄存器 

             (设备功能初始化、通信帧格式配置)

                USART_CR1  USART_CR2  USART_CR3  

   波特率寄存器

             USART_BRR    

   中断和状态寄存器 

             USART_ISR

   数据发送寄存器  

           USART_TDR

数据接收寄存器 

         USART_RDR

TDR与RDR 数据发收寄存器

数据总线--写---发送数据寄存器--发送位移寄存器--数据发送端

数据接收端---接收位移寄存器---接收数据寄存器---读

时钟线间接与波特率有关

【5】 USART功能框图

Tx:数据发送端

Rx:数据接收端

流控概念

     在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。流控制能解决这个问题

nRTS:请求以发送(Request To Send),n表示低电平有效。当本设备准备好接收新数据时就会将nRTS变成低电平;当接收寄存器已满时,nRTS将被设置为高电平。

nCTS:清除以发送(Clear To Send) 为输入信号,低电平有效。用于判断是否可以向对方发送数据,低电平说明本设备可以向对方发送数据。

该引脚只适用于硬件流控制

SCLK:发送器时钟输出引脚。这个引脚仅适用于同步模式。

发送过程:由CPU和DMA向数据发送寄存器(TDR)中写入要发送的数据,由发送移位寄存器将数据按位移到发送端口输出。

接收过程:由CPU和DMA读取接收数据寄存器(RDR)中的数据。

【6】串口发送实验

          实验要求

                        通过单片机向电脑(串口助手)发送数据

         1.观察实物

              找到通信接口    丝印“P4”

         2.分析原理图

             CH340 : 电平转换芯片,可以转换TTL电平-USB电平。

 

数据选择器/多路复用器

3.STM32CubeMX配置

4、寄存器方式编写发送接受一个字节的函数

//写一个单字节发送的函数
void put(uint8_t ch)
{
	while(!(USART1->ISR & 1<<7)){}
	//判断发送数据寄存器是不是空了
	USART1->TDR=ch;
	//将数据写入到TDR寄存器中
}
int get()
{
	uint8_t ch;
  while(!(USART1->ISR & 1<<5)){}
	//判断接受数据寄存器是不是空了
	ch=USART1->RDR;
	//将数据从RDR寄存器中读出来
	return ch;
}

5、寄存器方式编写发送接受一个字节的函数

 HAL_UART_Transmit(UART_HandleTypeDef *huart, 
                   uint8_t *pData, uint16_t Size, 
                   uint32_t Timeout)

功能:串口发送数据

参数:huart ->串口选择(USART1)
      pData ->需要发送的数据   
      Size->发送多少个数据     
      Timeout->超时时间

返回值:成功返回HAL_OK 失败返回HAL_TIMEOUT
HAL_UART_Receive(UART_HandleTypeDef *huart, 
                 uint8_t *pData,
                 uint16_t Size,
                 uint32_t Timeout)

功能:串口接受数据函数

参数:

          huart ->串口选择(USART1)
          pData ->接收数据的地址   
          Size->发送多少个数据     
          Timeout->超时时间

返回值:成功返回HAL_OK 失败返回HAL_TIMEOUT

6、串口发送接收函数验证

HAL_UART_Receive(&huart1,buf,2,100);
HAL_UART_Transmit(&huart1,buf,strlen(buf),100);
memset(buf,0,sizeof(buf));

7、不定长接受

声明
uint8_t buf[128]={"0 "};//数据缓存区
uint8_t byte;//单个字节缓存区
uint8_t len=0;//接收到的数据长度
写在while内
if(HAL_UART_Receive(&huart1,&byte,1,100)==HAL_OK)
//判断接收一个字节是否成功
	{
	   if(byte=='\n')//判断是否结束
			{//如果结束处理数据
				HAL_UART_Transmit(&huart1,buf,len,100);//原封不动回回去
				memset(buf,0,len);//清空缓存区
				len=0;	//长度清0
				}
		else//如果没有接收完成
		{
			buf[len++]=byte;//继续接收,把接收到的数据存储到buf
		 }
}

8、重定向

//printf的重定向
int fputc(int ch,FILE *f)
{
  while(!(USART1->ISR & 1<<7)){}
	//判断发送数据寄存器是不是空了
	USART1->TDR=ch;
	//将数据写入到TDR寄存器中
}
//scanf的重定向
int fgetc(FILE *f)
{
	uint8_t ch;
  while(!(USART1->ISR & 1<<5)){}
	//判断接受数据寄存器是不是空了
	ch=USART1->RDR;
	//将数据从RDR寄存器中读出来
	return ch;
}
scanf("%s",buf);
printf("%s",buf);
HAL_Delay(500);

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

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

相关文章

选择性搜索算法(Selective Search )——SS算法

文章目录 一、前言二、object Detection VS object Recognition&#xff08;Selective Search的提出&#xff09;2.1object recognition与object detection的关系2.2滑动窗口方法的局限性2.3Selective search算法的提出 三、Selective Search算法3.1什么是Selective Search&…

ChatGPT工作提效之遇强则强

ChatGPT工作提效之遇强则强 前言一、如何使用ChatGPT二、ChatGPT实战应用三、ChatGPT会叫的小孩有奶吃工具类的交互问答类的交互开发类的交互 前言 读《笑傲江湖》西湖比剑时&#xff0c;对于独孤九剑1的解读印象颇为深刻。令狐冲被任我行这个高手激发出许多精妙的剑招。这独孤…

消息队列-RabbitMQ

文章目录 1.什么是MQ1.1 特点1.2 MQ产品分类 2.RabbitMQ2.1.RabbitMQ介绍2.2.使用Docker安装RabbitMQ 3.SpringBoot中使用RabbitMQ3.1.SpringAMQP3.2使用步骤 1.什么是MQ RabbitMQ官方文档 消息队列(Message Queue&#xff0c;简称MQ)&#xff1a;是在消息的传输过程中保存消…

Learning C++ No.22【二叉树OJ题实战】

文章目录 引言&#xff1a;第一题&#xff1a;根据二叉树创建字符串第二题&#xff1a;二叉树的层序遍历第三题&#xff1a;自底向上实现层序遍历第四题&#xff1a;二叉树的最近公共祖先第五题&#xff1a;将搜索二叉树转换成双向链表第六题&#xff1a;从前序和中序遍历序列构…

修改USRPx410的ip地址

用 .\uhd_find_devices.exe查询设备 打印信息解释如下 在C:\Program Files\UHD\bin下打开powershell,输入如下指令ssh root@192.168.10.2 进入到设备内部 输入ifconfig,获取每个口的地址 输入ifconfig sfp0 192.168.10.3进行修改 重新.\uhd_find_devices.exe查询设备。 …

Linux:软件安装方法与命令yum.扩展ubantu系统的软件安装方法与命令apt

Linux&#xff1a;软件安装方法与命令yum: 这里的search可以想象成在linux的应用商店内搜索 例&#xff1a; 通过yum安装wget这个软件。 search搜索wget&#xff1a; 发现在“linux的应用市场”内有wget这个软件&#xff0c;现在再用yum -y install wget安装&#xff08;上面已…

你好:Zookeeper

Zookeeper 初识 初识ZookeeperZookeeper 安装Zookeeper 命令操作Zookeeper数据模型服务端命令客户端命令JavaAPI操作Curator常用操作&#xff1a;前置环境连接Zookeeper集群创建节点查询节点修改节点删除节点事件监听机制 – Watch分布式锁实现分布式锁得API 初识Zookeeper Zo…

排序篇:外排序(排序文件中的数据)

目录 前言&#xff1a; 一&#xff1a;大体思路 二&#xff1a;分割成有序的小文件 (1)先给代码 (2)解析 三&#xff1a;进行文件归并 (1)主逻辑 (2)归并两个有序文件 四&#xff1a;全部代码 前言&#xff1a; 如果要排序的数据量非常大&#xff0c;内存无法容纳&…

零基础自学软件测试我只用了105天,从月薪3000到15K, 我整理的超全学习指南!

我21年毕业于管理类专业&#xff0c;干了大半年行政打杂&#xff0c;工作平淡无快感。性格较内向&#xff0c;思维严谨独立。喜欢软件测试工作内容的系统性&#xff0c;技术性&#xff0c;丰富性。以上便是转行的最初心理&#xff0c;大家觉得可妥&#xff1f;说干就干去年6月底…

(前期准备工作2)白嫖Replit的免费云服务器搭建属于自己的应用

Replit介绍 Replit(原来是https://repl.it)是一个基于浏览器的云端协同开发平台,可用于构建开发环境、实时协作、托管网络应用等。Replit提供可创建动态或者静态网站的容器,并会自动生成免费https域名(格式为:项目名.用户名.http://repl.co)。这代表着任何人都可以试用…

Kafka的工作原理

一、Kafka是什么&#xff1f; Kafka是一个分布式的基于发布/订阅模式的消息队列。分布式消息队列可以看成是将这种先进先出的数据结构独立部署在服务器上&#xff0c;应用程序可以通过远程访问接口使用它。 二、Kafka的工作机制是什么&#xff1f; 1.基本概念 2.消息模型 发…

WiFi基础学习到实战(六:Beacon帧字段解析)

欢迎大家一起学习探讨通信之WLAN。上节我们基于Android设备分析了WiFi扫描的代码实现&#xff0c;具体执行WiFi网络扫描由WiFi模块实现。WLAN协议定义扫描方式有“被动扫描”和“主动扫描”。本节继续分析“被动扫描”依赖Beacon帧中的字段。 好。我们先来看Android11 WiFi扫描…

会计转行数据分析,可行性多高?

看到这样的问题&#xff0c;第一个想法是想劝退&#xff0c;毕竟通过不明真相的网友身上找自己的未来&#xff0c;这件事听着就不靠谱。转行难&#xff0c;转行做好更好&#xff0c;虽然会计也与数据有关&#xff0c;但是数据分析涉及的技术内容明显有很大的差别。所以&#xf…

重塑职业未来:在竞争激烈的职场上脱颖而出的关键策略

在竞争激烈的职场上&#xff0c;各种职场难题时常出现&#xff0c;如何进行有效沟通、如何应对工作压力、如何提升职业能力等&#xff0c;这都是需要去克服的问题。下面分享一下职场老人的经验&#xff01; 一、你遇到过哪些职场问题&#xff1f;分享一下你是怎么解决的呢&…

Type-C边充电边OTG转接器方案

随着生活水平的提高&#xff0c;大家的电子设备也多了起来&#xff0c;更有甚者会凑齐“全家桶”&#xff0c;手机&#xff0c;平板&#xff0c;笔记本电脑&#xff0c;智能手表&#xff0c;无线耳机&#xff0c;Switch&#xff0c;PS5&#xff0c;一样不落。那么多的电子设备&…

hibernate入门项目(一)

本节我们将演示如何搭建一个 Hibernate 工程。 搭建 Hibernate 工程需要以下 7 步&#xff1a; 下载 Hibernate 开发包 新建工程 创建数据库表 创建实体类 创建映射文件 创建 Hibernate 核心配置文件 测试 1. 下载 Hibernate 开发包 浏览器访问 Hibernate 官网 下载 Hibern…

520告白日!小红书关键词热度查询,今年的心动密码是什么?

520&#xff0c;又是一个有爱的日子&#xff0c;人们借机表达爱意的日子&#xff0c;品牌不会错过的好时机。今年520什么东西比较热呢&#xff1f;消费者比较关注什么&#xff1f;品牌有什么样动作&#xff1f;下面&#xff0c;借助小红书关键词热度查询、热词排行榜&#xff0…

基于C3D卷积神经网路的动作识别

对于基于视频分析的问题&#xff0c;2D卷积&#xff08;卷积核为二维&#xff09;不能很好得捕获时序上的信息&#xff0c;因此《3D convolutional neural networks for human action recognition》 这片论文提出了3D卷积并用于行为识别的&#xff0c;论文中将其用于行为识别&a…

商家中心之java商城 开源java电子商务Spring Cloud+Spring Boot+mybatis+MQ+VR全景+b2b2c

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

cpp test

1. 以下程序在linux 64位系统的输出结果&#xff08; &#xff09; #include <stdio.h> int main(void) {int buf[100] { 0 };printf("%d,%d,%d,%d,%d",sizeof(int), sizeof(long long), sizeof(buf),sizeof(buf)/sizeof(buf[0]), sizeof(&buf));retur…