Linux中裸机串口通信的基本方法

news2024/11/18 15:25:23

     大家好, 今天主要和大家聊一聊,如何使用串口进行通信的方法。

目录

第一:串口的基本简介

第二:UART的特点

​第三:UART的配置步骤     


第一:串口的基本简介

      串口又叫做串行接口,通常叫做COM接口,串行接口指的是数据一个一个的顺序传输,通信线路简单。使用两条线即可实现双向通信,一条用于发送,一条用于接收。

       UART作为串口的一种,其工作原理也是将数据一位一位的进行传输,发送和接收各用一 条线,因此通过 UART 接口与外界相连最少只需要三条线:TXD(发送)、RXD(接收)和 GND(地 线)。

各个为含义如下:

       空闲位:数据线在空闲状态的时候为逻辑“1”状态,也就是高电平,表示没有数据线空闲, 没有数据传输。

       起始位:当要传输数据的时候先传输一个逻辑“0”,也就是将数据线拉低,表示开始数据 传输。 

       数据位:数据位就是实际要传输的数据,数据位数可选择 5~8 位,我们一般都是按照字节 传输数据的,一个字节 8 位,因此数据位通常是 8 位的。低位在前,先传输,高位最后传输。

        奇偶校验位:这是对数据中“1”的位数进行奇偶校验用的,可以不使用奇偶校验功能。停止位:数据传输完成标志位,停止位的位数可以选择 1 位、1.5 位或 2 位高电平,一般都 选择 1 位停止位。 

         波特率:波特率就是 UART 数据传输的速率,也就是每秒传输的数据位数,一般选择 9600、 19200、115200 等。

第二:UART的特点

       ①、兼容 TIA/EIA-232F 标准,速度最高可到 5Mbit/S。 

       ②、支持串行 IR 接口,兼容 IrDA,最高可到 115.2Kbit/s。 

       ③、支持 9 位或者多节点模式(RS-485)。

       ④、1 或 2 位停止位。

       ⑤、可编程的奇偶校验(奇校验和偶校验)。

       ⑥、自动波特率检测(最高支持 115.2Kbit/S)。

       接下来看一下UART几个重要的寄存器,第一个就是 UART 的控制寄存器 1,即 UARTx_UCR1(x=1~8)。

       第二个寄存器UARTx_UFCR、UARTx_UBIR和UARTx_UBMR,寄存器UARTx_UFCR中要用的是位RFDIV(bit9:7),用来设置参考

    通过这三个寄存器可以设置UART的波特率,波特率的计算公式为:

   

Ref Freq:经过分频以后进入 UART 的最终时钟频率。

UBMR:寄存器 UARTx_UBMR 中的值。

UBIR:寄存器 UARTx_UBIR 中的值。

通过 UARTx_UFCR 的 RFDIV 位、UARTx_UBMR 和 UARTx_UBIR 这三者的配合即可得

到我们想要的波特率。比如现在要设置 UART 波特率为 115200,那么可以设置 RFDIV 为

5(0b101),也就是 1 分频,因此 Ref Freq=80MHz。设置 UBIR=71,UBMR=3124,根据上面的

公式可以得到:

​第三:UART的配置步骤     

1、设置 UART1 的时钟源

设置 UART 的时钟源为 pll3_80m,设置寄存器 CCM_CSCDR1 的 UART_CLK_SEL 位为 0

即可。

2、初始化 UART1

初始化 UART1 所使用 IO,设置 UART1 的寄存器 UART1_UCR1~UART1_UCR3,设置内

容包括波特率,奇偶校验、停止位、数据位等等。

4、使能 UART1

UART1 初始化完成以后就可以使能 UART1 了,设置寄存器 UART1_UCR1 的位 UARTEN

为 1。

5、编写 UART1 数据收发函数

编写两个函数用于 UART1 的数据收发操作。

​第四:代码基本实现

    先实现串口的头文件​的基写法:

#ifndef _BSP_UART_H#define _BSP_UART_H//函数声明void uart_init(void);void uart_to_init(void);void uart_disable(UART_Type *base);void uart_enable((UART_Type *base);#endif

      函数声明中,继续编写对应的源文件​内容:

#include "uart.h"//初始化串口1,波特率为115200void uart_init(void){    //初始化串口IO    uart_io_init();  /* 2、初始化 UART1 */ uart_disable(UART1); /* 先关闭 UART1 */ uart_softreset(UART1); /* 软件复位 UART1 */  UART1->UCR1 = 0; /* 先清除 UCR1 寄存器 */ UART1->UCR1 &= ~(1<<14); /* 关闭自动波特率检测 *//* * 设置 UART 的 UCR2 寄存器,设置字长,停止位,校验模式,关闭硬件流控 * bit14: 1 忽略 RTS 引脚 * bit8: 0 关闭奇偶校验 * bit6: 0 1 位停止位 * bit5: 1 8 位数据位 * bit2: 1 打开发送 * bit1: 1 打开接收 */ UART1->UCR2 |= (1<<14) | (1<<5) | (1<<2) | (1<<1); UART1->UCR3 |= 1<<2; /* UCR3 的 bit2 必须为 1 */  /* * 设置波特率 * 波特率计算公式:Baud Rate = Ref Freq / (16 * (UBMR + 1)/(UBIR+1))  * 如果要设置波特率为 115200,那么可以使用如下参数: * Ref Freq = 80M 也就是寄存器 UFCR 的 bit9:7=101, 表示 1 分频 * UBMR = 3124 * UBIR = 71 * 因此波特率= 80000000/(16 * (3124+1)/(71+1)) * = 80000000/(16 * 3125/72)  * = (80000000*72) / (16*3125)  * = 115200 */ UART1->UFCR = 5<<7; /* ref freq 等于 ipg_clk/1=80Mhz */ UART1->UBIR = 71; UART1->UBMR = 3124;  #if 0 uart_setbaudrate(UART1, 115200, 80000000); /* 设置波特率 */ #endif uart_enable(UART1); /* 使能串口 */}

​总结:实现串口的基本功能,对后面利用串口来调试程序,具有重要的​实践意义。

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

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

相关文章

农业灌区量测水流量在线监测系统解决方案-灌区信息化管理系统-灌区水网智慧化

平升电子农业灌区量测水流量在线监测系统解决方案/灌区信息化管理系统/灌区水网智慧化&#xff0c;对灌区的渠道水位、流量、水雨情、土壤墒情、气象等信息进行监测&#xff0c;同时对泵站、闸门进行远程控制&#xff0c;对重点区域进行视频监控&#xff0c;实现了信息的采集、…

Docker系统性入门(五)

文章目录Podman安装&基操pod多架构CI/CD容器安全监控Podman Podman 是 Red Hat 在2018年推出的&#xff0c;源代码开放是一个基于 Linux 系统的 daemon-less 的容器引擎&#xff1b;可以运行在root或者非root用户模式最近总听到这个要代替docker什么的&#xff0c;可以参考…

甲骨文蟾蜍 Toad for Oracle 16.2 注册版

使您的 Oracle 数据库操作现代化以实现业务敏捷性。 Toad for Oracle 是唯一一款可帮助您简化工作流程、减少代码缺陷并提高代码质量和性能同时支持团队协作的开发人员工具。自动化管理任务并主动管理您的数据库&#xff0c;同时实现性能优化和风险缓解。快速轻松地定义、搜索…

硬核干货,带你一文掌握 MySQL 的binlog 、redo log、undo log

​hello&#xff0c;大家好。 在MySQL 中我们经常会接触到三个核心日志&#xff0c;它们分别是&#xff1a;binlog 、redo log、undo log。 好多同学对于它们可能并不陌生&#xff0c;但是具体区分起来各自的功能用途以及实现原理&#xff0c;那可能认知就会比较模糊了&#x…

Web前端开发技术课程大作业_ 关于美食的HTML网页设计——HTML+CSS+JavaScript在线美食订餐网站html模板源码30个页面_

&#x1f468;‍&#x1f393;静态网站的编写主要是用HTML DIVCSS JS等来完成页面的排版设计&#x1f469;‍&#x1f393;,常用的网页设计软件有Dreamweaver、EditPlus、HBuilderX、VScode 、Webstorm、Animate等等&#xff0c;用的最多的还是DW&#xff0c;当然不同软件写出的…

Git基础|配置Git账号信息,Git存储的原理详解【建议收藏】

Git作为分布式版本管理&#xff0c;就需要对用户进行认证&#xff0c;账号名和邮箱&#xff0c;方便开发者从不同的电脑进行登录。同时&#xff0c;要想真的记住Git的命令&#xff0c;也必须要清楚Git的存储、上传原理。 Git基础2一、用户签名1、打开命令界面2、进入到用户管理…

CleanMyMac2023最新版软件功能及使用心得教程

电脑明明有100G&#xff0c;但是只剩下几个G&#xff0c;明明已经清理了很多&#xff0c;但是还是没有释放出内存&#xff0c;怎么办&#xff1f;可以试试CleanMyMac X&#xff0c;怎么使用呢&#xff1f;来看看吧&#xff01;CleanMyMac X是一款颇受欢迎的专业清理软件&#x…

【2022.12.10】备战春招Day5——每日一题 + 96. 不同的二叉搜索树

【每日一题】1691. 堆叠长方体的最大高度 题目描述 给你 n 个长方体 cuboids &#xff0c;其中第 i 个长方体的长宽高表示为 cuboids[i] [widthi, lengthi, heighti]&#xff08;下标从 0 开始&#xff09;。请你从 cuboids 选出一个 子集 &#xff0c;并将它们堆叠起来。 如…

​创新不是公司的救命良药

阅读本文大概需要1.06 分钟。之前问说当整个大环境都差的时候&#xff0c;公司还有项目可做就不错了&#xff0c;不要觉得只能赚点小钱就看不上&#xff0c;现在已经从伸手抓钱&#xff0c;变成弯腰捡钱的时代了。 开始赚的钱是不多&#xff0c;但能验证方向&#xff0c;先把跑…

web前端期末大作业 基于HTML+CSS+JavaScript学生宿舍管理系统

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

SSM+Mysql实现的仿网盘系统(功能包含注册登录,文件上传、所有文件、分类资源查看、用户管理、分享资源等)

博客目录SSMMysql实现的仿网盘系统实现功能截图系统功能使用技术代码完整源码SSMMysql实现的仿网盘系统 本系统是一个模拟百度网盘的系统&#xff0c;通过实现了图片/文本文件/视频等资源上传&#xff0c;并且分类管理、资源分享&#xff0c;实现了资源的在线管理。 (文末查看…

Vue2.0开发之——Vue组件-组件属性(34)

一 概述 为Count组件添加自定义属性为自定义属性添加v-bind自定义属性props是只读的自定义属性default默认值自定义属性type值类型自定义属性required必填值 二 为Count组件添加自定义属性 2.1 组件的props props 是组件的自定义属性&#xff0c;在封装通用组件的时候&#…

【Vue核心】6.数据代理

1.回顾Object.defineProperty方法 Object.defineproperty Object.defineproperty 的作用就是直接在一个对象上定义一个新属性&#xff0c;或者修改一个已经存在的属性。Object.defineproperty方法需要传递3个参数&#xff0c;1.属性所在的对象 2.属性的名字 3.一个描述符对象…

Wireshark TS | PMTU 问题实例

前言 PMTU&#xff0c;说到网络上的 PMTU 所能实现的功能&#xff0c;网工对它的原理自然是如数家珍&#xff0c;不熟悉的可能就感觉高大上了&#xff0c;觉得路径 MTU 能自动发现了&#xff0c;自然端到端数据包传输就能避免数据包分片了。可是理想很丰满&#xff0c;现实很骨…

防火墙NAT综合实验——nat控制,豁免,远程,DMZ区域(带命令)

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.实验 实验要求 实验命令 前言 本章将会进行NAT的综合配置…

编程零基础转行Python,往这个方向走,绝对没有错

近几年Python的受欢迎程度可谓是扶摇直上&#xff0c;当然了学习的人也是愈来愈多。一些学习Python的小白在学习初期&#xff0c;总希望能够得到一份Python学习路线图&#xff0c;小编经过多方汇总为大家汇总了一份Python学习路线图。 对于一个零基础的想学习python的朋友来说…

对造轮子Say NO!如何移植并使用Linux内核的通用链表?(附源代码)

1. 什么是链表 链表是一种常用的组织有序数据的数据结构&#xff0c;它通过指针将一系列数据节点连接成一条数据链&#xff0c;是线性表的一种重要实现方式。 相对于数组&#xff0c;链表具有更好的动态性&#xff0c;建立链表时无需预先知道数据总量&#xff0c;可以随机分配…

字节跳动技术总监整理的这份MySQL学习文档,看完才发现要学的可太多了!

对于程序员来说&#xff0c;去任何一家公司面试&#xff0c;数据库是避不开的。开发人员对MySQL掌握的越深入&#xff0c;你能做的事情就越多。 完成业务功能&#xff0c;要懂基本的Sql语句。做性能优化&#xff0c;要懂索引&#xff0c;懂引擎。做分库分表&#xff0c;要懂主从…

Head First设计模式(阅读笔记)-13.代理模式

监控糖果机 假设现在需要一台监视器去生成报告&#xff0c;报告中包括糖果机的位置、库存等信息 // 糖果机 public class GumballMachine{String loc;public GumballMachine(String loc, int count){this.loc loc;}public String getLoc(){return loc;}// 其他方法省略 } // 监…

详解Pytorch中的torch.nn.MSELoss函数(包括每个参数的分析)

一、函数介绍 Pytorch中MSELoss函数的接口声明如下&#xff0c;具体网址可以点这里。 torch.nn.MSELoss(size_averageNone, reduceNone, reduction‘mean’) 该函数默认用于计算两个输入对应元素差值平方和的均值。具体地&#xff0c;在深度学习中&#xff0c;可以使用该函数用…