1串口通信

串口通信是嵌入式系统和电子设备中最常用的 异步串行通信 方式,核心是通过 TX(发送) 和 R(接收) 两根线实现全双工数据传输。

2通信协议分类

2.1同步/异步通信

同步和异步是串行通信中两种根本不同的数据传输方式,核心区别在于 是否需要共享时钟信号 来协调数据传输。

2.1.1同步通信

同步通信:带时钟同步信号,如IIC接口或者SPI接口都属于同步通信,要求通信双方必须使用同一个时钟,相当于发送数据的同时接收数据,同步通信属于连续串行传输数据,一次只传输一帧数据,相比于异步通信而言,传输效率更高,缺点是时钟必须一致

2.1.2异步通信

异步通信:不带时钟同步信号,如UART接口属于异步通信,要求通信双方具有发送端和接收端,由于不要求时钟同步,所以在通信的时候,通信双方必须提前约定好通信格式(字符格式)以及通信速率,异步通信以字符为单位进行传输,在传输一个字符的时候会添加起始位和停止位,通过起始位以及停止位来达到同步的功能。

2.1.3关键对比

对比项同步通信异步通信
时钟信号必需(SCL、SCLK)无需
数据帧格式无起始/停止位,连续传输每帧含起始/停止位
速度高(SPI可达100Mbps)低(通常<1Mbps)
距离短(通常<1m)长(RS485可达1200m)
复杂度高(需时钟同步)低(仅需波特率一致)
典型协议SPI、I2CUART、RS232、RS485

2.2串行/并行通信

2.2.1串行通信

传输原理:数据按位依次顺序传输,如发送字节0x41(ASCII 'A')的二进制01000001,从LSB或MSB开始逐个传输。

优点:节约引脚资源(最少一根线)、传输成本低、传输距离远

缺点:传输速度慢

应用领域:一般用于工控设备、测量设备、少部分通信设备  USB  COM口

2.2.2并行通信

传输原理:多位数据同时通过多根数据线发送。例如,8位数据0x41通过8根线同时传输,每根线对应1位。

优点:传输速度快

缺点:占用引脚资源、传输成本高、传输距离近、抗干扰能力弱(串扰)

应用领域:一般大量数据传输,并且传输距离较近  如计算机总线

2.3单工/半双工/全双工通信

2.3.1单工/半双工/全双工概念对比

模式数据传输方向典型协议/硬件优缺点
单工单向固定(A→B)广播、遥控器、FM收音机简单;无法反向传输
半双工双向交替(A→B或B→A,不同时)RS485、对讲机、I2C节省线路;需切换方向,效率较低
全双工双向同时(A→B和B→A可同时进行)UART、SPI、电话、USB高效;需独立通道,成本略高

2.3.2单工/半双工/全双工对比

维度单工半双工全双工
效率最低中等(需切换方向)最高(双向同时)
成本最低(单线)中等(共享线路)较高(独立通道)
典型场景广播、遥控工业总线、对讲机电话、USB、高速数据传输
协议举例FM广播RS485、I2CUART、SPI、以太网

3通信接口

         通信双方可以实现按照某一种协议进行通信的前提是:首先双方都有一个相同的通信接口。该接口还要可以按照通信协议进行数据的收发。

口协议只规定了按照怎样的顺序传输,但是数字量如何转换,

按照什么电平标准到另一个器件,这个不是协议所规定的

RS232,RS485电平是串口通信过程中的一种电平标准,不是协议

例如:

硬件设备和计算机在通信的时候,需要用到电气转换芯片(如MAX232),因为硬件平台一般采用TTL电平信号(采用正逻辑电平,+5V等价于逻辑1,0V等价于逻辑0),但是计算机采用RS232电平信号(采用负逻辑电平,-15V~-3V 表示逻辑1,+3V~+15V 表示逻辑0)。

        通信时一般数据都是以二进制进行收发,那么电压信号在什么情况下为逻辑“1”,在什么情况下为逻辑“0”,这时就需要按照相同的电平规范来接收。

TTL电平规范

COMS

RS485电平规范

4串口通信的参数

        USART或者UART都是全双工异步通信,由于不需要时钟同步,所以就必须要求通信双方要约定字符格式和通信速率。

4.1字符格式

        字符格式一般都是采用字符帧的形式进行传输,字符帧由起始位、数据位、校验位、停止位组成。具体的说明可以参考STM32中文参考手册的26.3.1章节。

UART通信的数据帧格式:1位起始位(‘0’),5~8位数据位,1位校验位,0.5、1、1.5、2位停止位

起始位:告知接收方数据开始发送。

数据位:保存传输的数据

校验位:分为奇校验、偶校验和无校验,若选择奇校验,则数据位和校验位上1的总个数为奇数,若选择偶校验,1的个数为偶数。

(1) 起始位:指的是一帧数据的开始   规定为1bit的低电平

(2) 数据位:指的是有效的信息,可以为7bit(标准ASCII码)或者8bit(拓展ASCII码)

(3) 校验位:指的是对于数据位的简单校验,可以确保数据正常发送,也可以避免噪声的影响,校验分为奇校验、偶校验,校验位也只占1bit。一般不使用校验位。

(4) 停止位:指的是一帧数据传输完成   停止位一般选择1bit,规定为高电平

4.2通信速率

通信速率指的是单位时间内传输的有效的二进制数的个数,也被称为波特率,单位为bps。常用的波特率有9600bps115200bps。 可以根据实际需求进行修改。

举个例子:一般采用的波特率是9600bps,字符格式选择8bit数据位、无校验、1bit停止位,然后再加上1bit的起始位,所以一帧字符占10bit,所以单位时间可以传输960帧。

5代码配置

5.1配置步骤

stm32f4xx_tim.c函数中可以查看

===============================================================================
##### How to use this driver #####
===============================================================================
[..]
(#) Enable peripheral clock using the following functions
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTx, ENABLE) for USART1 and USART6 
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USARTx, ENABLE) for USART2, USART3, UART4 or UART5.

   1.使能USART

(#) According to the USART mode, enable the GPIO clocks using 
  RCC_AHB1PeriphClockCmd() function. (The I/O can be TX, RX, CTS, 
or/and SCLK). 

2.使能GPIO

(#) Peripheral's alternate function: 
(++) Connect the pin to the desired peripherals' Alternate 
Function (AF) using GPIO_PinAFConfig() function

3.使用GPIO_PinAFConfig()将引脚复用
(++) Configure the desired pin in alternate function by:

4通过以下方式将引脚配置为复用功能
GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF

        (++) Select the type, pull-up/pull-down and output speed via 
GPIO_PuPd, GPIO_OType and GPIO_Speed members
(++) Call GPIO_Init() function

(#) Program the Baud Rate, Word Length , Stop Bit, Parity, Hardware 
flow control and Mode(Receiver/Transmitter) using the USART_Init()
function.

5对串口参数进行配置USART_Init()

(#) For synchronous mode, enable the clock and program the polarity,
phase and last bit using the USART_ClockInit() function.
对于同步模式,这个不用


      (#) Enable the NVIC and the corresponding interrupt using the function 
USART_ITConfig() if you need to use interrupt mode. 

6打开串口中断,配置NVIC

(#) When using the DMA mode 
(++) Configure the DMA using DMA_Init() function
(++) Active the needed channel Request using USART_DMACmd() function
DMA的,这个不用   


      (#) Enable the USART using the USART_Cmd() function.

7打开串口USART_Cmd()

8编写中断服务函数

(#) Enable the DMA using the DMA_Cmd() function, when using DMA mode. 

-@- Refer to Multi-Processor, LIN, half-duplex, Smartcard, IrDA sub-sections
for more details

5.2代码整体

实现电脑对单片机数据发送,并显示。使用单片机USART1串口中断方式

mian.c函数

usart.c

5.3出现问题

数据接收区一直是问号

通过打开示例工程,将代码复制进去可以用,知道配置没有错,最后找到问题出在HSE时钟上,单片机实际使用时钟为8MHZ,但是stm32f4xx.h文件中是25MHZ时钟需要修改。

5.4代码解析

  5.4.1结构体USART_InitTypeDef USART_InitStructure;变量配置

  1. USART_BaudRate             指的是波特率              常用9600bps  115200bps
  2. USART_WordLength        指的是数据位           常用8bit   低位先出

  1. USART_StopBits               指的是停止位        常用1bit

  1. USART_Parity           指的是校验位        常用无校验

  1. USART_Mode          指的是串口模式 常用收发模式  USART_Mode_Rx | USART_Mode_Tx

  1. USART_HardwareFlowControl        指的是硬件流控制   常用无

5.4.2指定USART中断源,收到数据就发生中断

编写中断服务函数,一般需要提前设置好串口中断的触发条件,一般触发条件都会设置为接收到数据就发生中断。

ST公司提供了一个函数可以设置串口中断源,调用USART_ITConfig()函数

一般在中断服务函数中需要检测中断是否发生(检测中断状态)以及清除中断状态即可。

5.4.3中断服务函数

发送数据

接收数据(需要在中断服务函数中调用该函数来接收数据)

读取状态

状态寄存器

 USART_GetFlagStatus(USART1,USART_FLAG_TXE) ;//检测发送寄存器发完,为空

USART_ClearITPendingBit(USART1,USART_IT_RXNE); //清除中断标志

6蓝牙模块使用

6.1引脚连接

VCC---5V

Trig---触发信号输入(模块输入单片机发来的信号)----随便找个引脚配置输出模式

Echo---回想信号输出(模块输出单片机输入)---随便找个引脚配置输入模式

GND---GND

6.2超声波原理

Trig连接的单片机引脚配置输出模式,输出一个至少10us的触发信号;第二部模块来做,完成后通过IO口输出一个高电平信号给单片机;高电平信号由与测试距离成正比,通过定时器记录输入高电平持续时间,根据公式得出距离。

为了超声波测距更加准确可以采用温度补偿

6.3超声波距离计算

通过检测到的高电平持续的时间,计算实际距离

已知测距精度是3mm,声速按照340米每秒算

得到3mm,用时9us,只需在每9us计数一次,知道有多少个9us,便知有多少个3mm。得到的往返距离再除以2,得到实际距离。

6.4代码展示

main.c

.main.h

gpio.c

gpio.h

6.5遇到问题

说实话并没有实现,将代码复制到示例工程中实现了。但是我工程没实现,没有串口发送数据。

且stm32f4xx.h和system_stm32f4xx.c,中时钟和锁相环都改过了。

明天可能继续往下写,可能继续找该问题解决方式

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

面向对象的设计模式

一、设计模式简介1、什么是设计模式针对反复出现的问题所总结归纳出的通用解决方设计模式是指在软件开发过程中案。这些方案是众多软件开发人员经过大量实践总结出来的&#xff0c;具有高效性、可维护性和可扩展性等优点。使用设计模式可以帮助开发者更高效地构建软件系统&…

每日钉钉API探索:chooseDepartments专注于部门维度的选择接口

在企业级应用开发过程中&#xff0c;针对组织架构中的部门进行操作是非常常见的需求。今天我们要介绍的是钉钉的chooseDepartments API&#xff0c;它允许用户以部门为单位进行选择&#xff0c;并返回所选部门的相关信息。&#x1f4cc; 功能概述chooseDepartments API主要用于…

生产环境CI/CD流水线构建与优化实践指南

生产环境CI/CD流水线构建与优化实践指南 目录 业务场景描述技术选型过程实现方案详解 流水线结构设计并行构建与缓存策略部署策略&#xff1a;滚动、蓝绿、金丝雀回滚与告警自动化 踩过的坑与解决方案总结与最佳实践 业务场景描述 某大型电商平台&#xff0c;为了保证代码持续交…

腾讯云和火山云优劣势对比

从问题本身看&#xff0c;用户没有限定具体场景&#xff0c;说明可能需要一个全面的横向对比。不过云计算服务涉及面太广&#xff0c;我最好先搭建一个框架性的分析结构&#xff0c;再填充具体细节。 首先想到从几个核心维度切入&#xff1a;基础能力&#xff08;计算存储网络&…

Augment AI 0.502.0版本深度解析:Task、Guidelines、Memory三大核心功能实战指南

Augment AI 0.502.0版本深度解析&#xff1a;Task、Guidelines、Memory三大核心功能实战指南 augment最新版辅助功能全解析续杯免费额度再用满教程|memory|userguidlines|tasksaugment最新插件功能教程前言 在AI辅助编程领域&#xff0c;Augment AI作为一款强大的VS Code插件&…

docker搭建、小皮面板搭建、bp使用、msf

docker搭建Vulhub靶场 docker安装 apt-get install docker.io docker-compose#设置docker代理&#xff1a;创建文件夹以及对应的文件 mkdir /etc/systemd/system/docker.service.d#在该文件中配置自己的代理ip以及代理端口 vim /etc/systemd/system/docker.service.d/http-p…

AI优化器美国VPS集成:智能算力部署与性能调优指南

在当今数字化浪潮中&#xff0c;AI优化器与高性能VPS的融合正成为企业技术架构的核心竞争力。本文将深入解析美国VPS服务器如何通过AI驱动的智能优化技术实现算力突破&#xff0c;从资源配置算法到实时流量调度&#xff0c;全面揭示这种创新组合在跨境电商、大数据分析等场景中…

【保姆级图文详解】Spring AI 中的工具调用原理解析,工具开发:文件操作、联网搜索、网页抓取、资源下载、PDF生成、工具集中注册

目录前言一、Spring AI 中的工具调用&#xff08;Tool Calling&#xff09;1.1、概念1.2、工作原理1.3、技术选型1.4、原理解析1.4.1、实现接口1.4.2、工具调用二、工具调用&#xff08;Tool Calling&#xff09;开发2.1、文件操作2.1.1、概念描述2.1.2、概念描述2.2、联网搜索…

Redis客户端使用(Client、Java、SpringBoot)

上篇文章&#xff1a; Redis数据类型之zsethttps://blog.csdn.net/sniper_fandc/article/details/149139955?fromshareblogdetail&sharetypeblogdetail&sharerId149139955&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 Redis客户端…

Modbus 开发工具实战:ModScan32 与 Wireshark 抓包分析(一

引言 ** 在工业自动化领域&#xff0c;Modbus 协议犹如一座桥梁&#xff0c;连接着各种电子设备&#xff0c;实现它们之间高效的数据交互。从可编程逻辑控制器&#xff08;PLC&#xff09;到人机界面&#xff08;HMI&#xff09;&#xff0c;再到各类智能传感器&#xff0c;M…

Oracle SQL - 使用行转列PIVOT减少表重复扫描(实例)

[13/JUL/2025, Yusuf Leo, Oracle SQL Performance Tuning Series]我们经常会遇到从同一表中按不同维度取出不同区间的数据&#xff0c;再以相同的属性将这些数据分别汇总到一起的需求。这类需求往往迫使我们对同一个表反复去扫描&#xff0c;当原始数据量太大的时候&#xff0…

HTTP 请求方法详解:GET、POST、PUT、DELETE 等

在 HTTP 协议中&#xff0c;请求方法&#xff08;也称为 HTTP 动词&#xff09;定义了客户端希望对指定资源执行的操作类型。这些方法是 HTTP 报文的核心组成部分&#xff0c;决定了请求的目的和行为。 主要 HTTP 请求方法 1. GET 用途&#xff1a;获取资源 特点&#xff1a…

Android 代码热度统计(概述)

1. 前言 代码热度统计&#xff0c;在测试中一般也叫做代码覆盖率。一般得到代码覆盖率后就能了解整体样本在线上的代码使用情况&#xff0c;为无用代码下线提供依据。 做了一下调研&#xff0c;在Android中一般比较常用的是&#xff1a;JaCoCO覆盖率统计工具&#xff0c;它采…

RAG优化

RAG搭建本地AI知识库&#xff0c;在使用过程中遇到的三大痛点&#xff0c;以及相应的进阶方案。1. RAG知识库的三大痛点-- 内容理解不足&#xff1a;AI难以全面理解导入资料的内容&#xff0c;比如在向量编码时候&#xff0c;生硬的截断等导致分析结果不理想。eg: 知识库分割器…

Ubuntu 24.04 启用 root 图形登录

关键词&#xff1a;Ubuntu 24.04、root 登录、GDM、SSH、nano、配置文件一、前言 Ubuntu 默认禁用 root 账户 的图形与 SSH 登录&#xff0c;这是为了安全。但在某些场景&#xff08;如测试、救援、自动化脚本&#xff09;你可能需要 直接用 root 登录 GNOME 桌面。本文以 Ubun…

Jekyll + Chirpy + GitHub Pages 搭建博客

Chirpy 是适用于技术写作的简约、响应迅速且功能丰富的 Jekyll 主题&#xff0c;文档地址&#xff1a;https://chirpy.cotes.page/ &#xff0c;Github 地址&#xff1a;jekyll-theme-chirpy 。 1.开始 打开 chirpy-starter 仓库&#xff0c;点击按钮 Use this template -->…

学习 Flutter (一)

学习 Flutter (一) 1. 引言 什么是 Flutter&#xff1f; Flutter 是 Google 开发的一套开源 UI 框架&#xff0c;主要用于构建高性能、高保真、跨平台的应用程序。使用一套 Dart 编写的代码&#xff0c;开发者可以同时构建适用于&#xff1a; Android iOS Web Windows、mac…

Spring Boot 实现图片防盗链:Referer 校验与 Token 签名校验完整指南

Spring Boot 实现图片防盗链教程&#xff08;Referer 校验 Token 签名校验&#xff09;本文将详细讲解两种防盗链实现方案&#xff0c;并提供完整代码示例。方案一&#xff1a;Referer 校验通过检查 HTTP 请求头中的 Referer 字段判断来源是否合法。实现步骤创建 Referer 拦截…

从 JSON 到 Python 对象:一次通透的序列化与反序列化之旅

目录 一、为什么要谈 JSON 二、最快速上手&#xff1a;两把钥匙 dumps 与 loads 三、深入 dumps&#xff1a;参数是魔法棒 四、深入 loads&#xff1a;把风险挡在门外 五、文件级序列化&#xff1a;dump 与 load 六、处理中文与编码陷阱 七、异常场景与调试技巧 八、实…

Leetcode 3315. 构造最小位运算数组 II

1.题目基本信息 1.1.题目描述 给你一个长度为 n 的质数数组 nums 。你的任务是返回一个长度为 n 的数组 ans &#xff0c;对于每个下标 i &#xff0c;以下 条件 均成立&#xff1a; ans[i] OR (ans[i] 1) nums[i] 除此以外&#xff0c;你需要 最小化 结果数组里每一个 a…