串口收发数据

2023-05-16

1.1 字符串接收函数

        发送方结束标志是你接收方判断的依据,也可以说是属于协议的一部分。

我们这里使用串口助手数据发送自动添加了\r\n,所以我们将它们看成结束标志。

1.2 数据传输方式

        计算机与外部进行沟通只有并行和串行两种方式,计算机只能知道断电和上电,一根线同一时间只有断电或者上电,多根线就存在断电和上电同时存在。

所以一根线的时候称之为串行通信,多条线就是并行通信。

 

同样速度下一条线传输和8条线传输,谁快?8条,也就说并行传输数据的速度快,但是成本更高

一般情况下对传输速度有要求的地方,比如说:屏幕显示,这些地方使用的都是并行。

串行传输一般在远程地方更合适一些。

 

1.2.1 串行通信的连接方式

一共有三种:单工、半双工、全双工

  • 单工只能发送或者只能接收。
  • 能收发但是不能同时进行。
  • 能同时进行收发操作。

​​​​​​​​​​​​​​

我们的串口使用的是哪一种方式??半双工,虽然USART是全双工异步通信的设备,但是程序和硬件上不支持它这样做,所以选择的是半双工方式工作

​​​​​​​​​​​​​​1.2.2 同步和异步

同步:使用同一个时钟(产生时钟频率的设备是一个)。

异步:使用的时钟不是同一个,但是频率是一样的。

 

​​​​​​​1.3 USART特性 

 

        串口现在好用吗??接收数据要等待,如果没有数据过来不做其它事情,这样是不合理的,有什么办法可以处理这件事?中断 

2.1 中断的简介

2.1.1 中断是什么?

中断是一种处理事件的方式,或者说是一种机制。

在STM32中就是一种它提供给我们的机制,一种用于处理事件的方式。

什么机制??程序在运行过程中如果发生了中断对应的事件,优先处理中断事件

假设程序正在运行流水灯,此时如果有数据从电脑发送过来了,我要先去把数据接收到程序中。

     

要产生中断必要的条件:

1)程序一直在运行状态

2)中断机制是开启状态

3)产生中断的东西报备了

4)中断产生后处理方式设计好了

中断处理过程:异常(中断)中断源-->允许中断-->申请中断--> CPU 响应-->保护现场(栈)--> 跳转处理-->返回。

​​​​​​​2.1.2 中断有什么用??

处理突发事件。

为什么用中断处理突发事件,为了节约CPU资源,因为突发事件是不确定什么时候产生的。

​​​​​​​​​​​​​​2.1.3 中断如何使用?

首先,确定中断源——串口接收

然后,开启中断——串口

申请中断??——有数据到达

CPU响应??——数据到了

保护现场??——现有程序停止

处理——中断服务函数

返回——继续执行原有程序

2.2 串口中断

2.2.1 查找串口中断

 

从这里可以了解到,串口1的中断是37

​​​​​​​2.2.2 怎么开启?

 

 

中断使能寄存器。

​​​​​​​2.2.3 优先级的概念

优先级代表谁先谁后,在这里代表谁先执行,谁后执行,说的是中断,意思是多个中断一起触发谁先执行。

但是它还包含另一层意思,意思是谁可以打断谁。如果有某个中断正在执行处理,但是我这个更加紧急,优先要处理我这个中断,这时候优先级设置要更高。

总结:中断优先级表示了谁可以打断谁的执行,还有就是谁先谁后。

因为优先级有三种:抢占、响应和自然。

  • 抢占优先级代表谁可以打断谁;
  • 响应优先级代表谁先谁后执行。
  • 自然优先级只有在抢占和响应一样,并且无法区分谁先谁后的时候起作用,自然优先级就是它的位置也就是编号。

优先级数字越小优先级越高。

怎么设置优先级???

 

给谁设置优先级就指定其对应的下标,设置的8位数据就代表优先级,但是需要根据分组进行判定。

注意:一个程序只能存在一种分组。

在cortex-m3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下:

  • 第0组:所有8位用于指定响应优先级(抢占:0,响应:0~255)
  • 第1组:最高1位用于指定抢占式优先级(0~1),最低7位用于指定响应优先级(0~127)
  • 第2组:最高2位用于指定抢占式优先级(0~3),最低6位用于指定响应优先级(0~63)
  • 第3组:最高3位用于指定抢占式优先级(0~7),最低5位用于指定响应优先级(0~31)
  • 第4组:最高4位用于指定抢占式优先级(0~15),最低4位用于指定响应优先级(0~15)
  • 第5组:最高5位用于指定抢占式优先级(0~31),最低3位用于指定响应优先级(0~7)
  • 第6组:最高6位用于指定抢占式优先级(0~61),最低2位用于指定响应优先级(0~3)
  • 第7组:最高7位用于指定抢占式优先级(0~127),最低1位用于指定响应优先级(0~1)

分组没有设置,咋设置?

 

​​​​​​​2.2.4 串口中断允许

 

 

 

​​​​​​​2.2.5 编写中断服务函数

 

 

配置完成,看完现象,现在总结一下。

所谓中断是用于处理突发事件的,你首先要开启中断(CPU允许,自己开启),然后编写中断服务函数,当中断事件产生的时候,代码回自动进入到中断服务函数去执行,执行完返回原来的地方继续执行原有程序。

注意:你不要在中断里面做过多停留。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口收发数据 的相关文章

  • 单片机中断的过程

    1 根据响应的中断源的中断优先级 使相应的优先级状态触发器置1 xff1b 2 把当前程序计数器PC的内容压入堆栈 xff0c 保护断点 xff0c 寻找中断源 xff1b 3 执行硬件中断服务子程序调用 xff1b 4 清除相应的中断请求
  • Ruby学习札记(3)- Ruby中gem的安装与卸载

    Ruby 学习札记 3 Ruby 中 gem 的安装与卸载 在 Ruby 中有 gem 包这种概念 xff0c 类似 PHP 中的 pear xff0c 相当于一种插件 具体可以 Google 一下 xff08 1 xff09 查看已经安装
  • 【linux】ubuntu20.04 运行软件 提示找不到过时的库 libQtCore.so.4、libQtGui.so.4、libpng12.so.0

    先上结果 1 nxView运行起来 环境 硬件 xff1a Jetson Xavier NX 套件 系统 xff1a Ubuntu 20 04 软件 xff1a nxView 43 libQtCore so 4 解决 0 现象 运行软件提示
  • rtt相关问题总结

    1 总结RT Thread的启动流程 xff08 启动文件部分跳过 xff09 关中断 rt hw interrupt disable 板级初始化 xff1a 需在该函数内部进行系统堆的初始化 rt hw board init 打印 RT
  • FTP 客户端C实现

    使用 Socket 通信实现 FTP 客户端程序 FTP 概述 文件传输协议 xff08 FTP xff09 作为网络共享文件的传输协议 xff0c 在网络应用软件中具有广泛的应用 FTP的目标是提高文件的共享性和可靠高效地传送数据 在传输
  • Qt编写串口通信程序全程图文讲解

    说明 我们的编程环境是windows xp下 xff0c 在Qt Creator中进行 xff0c 如果在Linux下或直接用源码编写 xff0c 程序稍有不同 xff0c 请自己改动 在Qt中并没有特定的串口控制类 xff0c 现在大部分
  • VLC播放器调试经验总结

    一 前言 在使用VS学习VLC源码时 xff0c 可以打断点分析变量数据 xff0c 跟踪代码流程 xff0c 方便我们理解源码 但是在定位音视频卡顿 延时等疑难问题时 xff0c 这一招就不管用了 xff0c 因为打上断点就会导致实时计算
  • http协议如何解决粘包问题

    在讲粘包问题之前 xff0c 首先得明白这个包是应用层的数据包 当数据在传输层时 xff0c 由于TCP是面向字节流的 xff0c 所以它看到的数据是按照顺序一个个放在缓冲区中的 xff0c 而对于应用层而言 xff0c 看到的只是一连串的
  • ROS- 解决 sudo rosdep init和update 出现的错误

    大家在使用ROS时都需要执行sudo rosdep init 方法和rosdep update方法 但是在执行rosdep init时会提示如下错误 ERROR cannot download default sources list fr
  • 如何用MQTT网关快速接入阿里云IOT

    深圳市钡铼技术有限公司推出的BL102 xff0c 是采集西门子 xff0c 欧姆龙 xff0c 三菱 xff0c 台达 xff0c AB xff0c 施耐德等主流PLC及Modbus xff0c DT L645协议设备数据 xff0c 简
  • 闫刚 qgc模块mavlinklog实现过程

    mavlink log qml部分 这样logController就和LogDownloadController进行了绑定 AnalyzeView qml Rectangle span class token punctuation spa
  • 初识TVM--TVM的编译与安装

    TVM是什么 xff1f Apache incubating TVM is an open deep learning compiler stack for CPUs GPUs and specialized accelerators It
  • iOS上简单推送通知(Push Notification)的实现

    iOS上简单推送通知 xff08 Push Notification xff09 的实现 根据这篇很好的教程 xff08 http www raywenderlich com 3443 apple push notification ser
  • Android学习记录(十三) http之digest鉴权之填坑6.0。

    背景 xff1a android 6 0 1 的手机发现使用webdav下载文件实效 xff0c httpclient execute get的时候出现 xff1a CrashHandler java lang ArrayIndexOutO
  • 开源视频播放器IjkPlayer使用记录之(三)--播放视频从上次播放的时间点播放。

    方法 xff1a 1 在关闭视频的时候 xff0c 使用getCurrentPosition 获取当前的时间点 2 使用SharedPreferences记录当前的时间点 3 重新播放时 xff0c 获取该时间点 xff0c 使用seekt
  • 开源视频播放器IjkPlayer使用记录之(四)--多音轨的探路之旅

    前言 xff1a 在视频播放中 xff0c 我们经常会遇到多音轨的资源文件 xff0c 比如某个mkv文件同时支持英语 国语 xff0c 那么最好是能够进行音轨的切换 在IjkPlayer中并没有支持多音轨的代码 xff0c 所以在移植的过
  • KERAS-YOLOV3的代码走读

    KERAS YOLOV3的代码走读 GITHUB地址 xff1a https github com qqwweee keras yolo3 YOLOV3的论文中文翻译 xff1a https zhuanlan zhihu com p 349
  • KERAS-YOLOV3的数据增强

    前言 上篇KERAS YOLOV3的代码走读 https blog csdn net yangchengtest article details 80664415 有数据增强的内容没有看明白 这篇来介绍一下 简介 数据增强的方法主要有 xf
  • 基于KITTI数据集的KERAS-YOLOV3实践

    数据整理 KERAS YOLOV3的GITHUB地址 xff1a https github com yangchengtest keras yolo3 该项目支持的数据结构 xff1a One row for one image Row f

随机推荐

  • 图像语义分割 DEEPLAB V3+的代码走读

    概述 GITHUB路径 xff1a https github com tensorflow models tree master research deeplab 论文 xff1a https arxiv org abs 1802 0261
  • android dlib 交叉编译

    继续趟NDK的坑 DLIB使用C 43 43 11的标准 但是使用gnustl static的时候 xff0c 有些c 43 43 11的特性是无法使用的 由于NCNN的库使用的是静态库 xff0c OPENCV xff0c OPENBLA
  • ANDROID CMAKE DEBUG的记录

    android 如果使用DEBUG模式 xff0c CMAKE编译的SO是DEBUG版本的 xff0c 会造成性能下降 但是使用RELEASE编译的SO xff0c 使用DEBUG模式 xff0c JNI的速度不会变化 终于知道为什么 xf
  • window下使用vnc远程登录linux图形界面和运行应用程序 和odroid Xu4开发板的使用和视频接口VGA、DVI、HDMI的联系

    注 xff1a 自己曾经尝试过很多次使用VNC远程登录odroid XU4的开发板 xff0c 但是连接后均显示未解码的连接 xff0c 刚开始烧写的是odroid官方的ubuntu系统 xff0c 我靠 xff0c 就是因为烧写了这个坑爹
  • Putty的ppk文件转成Xshell使用的key文件

    Putty的ppk文件转成Xshell使用的key文件 今天同学给我一个Putty远程登录使用的ppk文件 xff08 即后缀名为ppk xff09 让我远程登录主机 xff0c 但是我用的是Xshell xff0c 导入这个ppk文件时
  • GD32串口读取GPS模块数据并解析经纬度教程-附完整代码和资料文件

    前言 xff1a 最近入手了个GPS模块 xff0c 手上只有GD32的开发板 网上有很多使用STM32库函数的GPS驱动程序 xff0c 但是基于GD32库函数读取GPS驱动的教程居然一篇都没有 所以为了学习GD32库的同学 xff0c
  • opencv 所有lib文件

    今天在vs上写一段代码 xff0c 编译后总是显示有无法解析的函数 xff0c 又不知道该函数在哪个lib文件中 xff0c 在百度上找了半天 xff0c 也没找到 已是就将所有lib库都添加到vs链接中 如下 xff1a opencv c
  • Java多线程(含生产者消费者模式详解)

    多线程 导航 多线程1 线程 进程 多线程概述2 创建线程 xff08 重点 xff09 2 1 继承Thread类 xff08 Thread类也实现了Runnable接口 xff09 2 2 实现Runnable接口 xff08 无消息返
  • Java网络编程(两种聊天室:TCP和UDP)

    网络编程 您的导航 网络编程网络编程基础知识一 网络编程三要素IP地址端口协议 二 IP地址与InetAddress类IP地址分类InetAddress类三 端口 xff08 Port xff09 与 InetSocketAddressIn
  • 免费发布一个网站(保姆级图文教程)

    利用GitHub Pages发布一个网页 第一步 xff1a 注册一个github账户 访问官网 点这两个都可以注册 根据提示输入一些信息 xff0c 然后创建账户 xff1a 然后你会收到一封邮件 xff0c 输入验证码或是打开邮件的验证
  • 修改键盘映射、交换按键

    修改键盘映射 交换按键 导航 修改键盘映射 交换按键写在前面一 创建配置文件二 修改键盘映射三 重启四 键位表 写在前面 这两天买了个黑爵的小键盘 xff0c del和ins键是同一个键 xff0c 通过fn来区分 xff08 我的笔记本电
  • Spring Cloud Gateway(黑马springcloud笔记)

    Gateway 目录 Gateway一 为什么需要网关二 gateway入门三 断言工厂四 过滤器工厂五 全局过滤1 实现2 过滤器执行顺序 六 跨域问题 一 为什么需要网关 不能让外部能够直接访问微服务 xff0c 而是需要通过网关访问
  • Docker(黑马spring cloud笔记)

    Docker 目录 Docker一 介绍和安装1 安装2 启动3 镜像加速 二 Docker基本操作1 镜像操作2 容器操作3 数据卷操作 三 Dockerfile1 镜像结构2 Dockerfile 四 Docker Compose1 安
  • RabbitMQ(黑马spring cloud笔记)

    MQ 目录 MQ一 同步通讯和异步通讯1 同步通讯2 异步通讯 二 RabbitMQ1 部署2 架构3 常见消息模型3 1 基本消息队列 xff08 Basic Queue xff09 3 2 工作消息队列 xff08 Work Queue
  • Redis实战—黑马点评(一) 登录篇

    Redis实战 黑马点评 xff08 一 xff09 登录篇 来自黑马的redis课程的笔记 黑马程序员Redis入门到实战教程 xff0c 深度透析redis底层原理 43 redis分布式锁 43 企业解决方案 43 黑马点评实战项目
  • tigerVNC的简单使用教程(CentOS的远程桌面连接)

    tigerVNC的简单使用教程 xff08 CentOS的远程桌面连接 xff09 1 环境和软件准备 1 CentOS 6 3下 root 64 localhost rpm q tigervnc tigervnc server tiger
  • Redis实战—黑马点评(二)缓存篇

    Redis实战 黑马点评 xff08 二 xff09 缓存篇 目录 Redis实战 黑马点评 xff08 二 xff09 缓存篇1 什么是缓存1 1 缓存的作用和成本 2 添加 Redis 缓存3 缓存更新策略3 1 三种更新策略3 1 1
  • Reids实战—黑马点评(三)秒杀篇

    Reids实战 黑马点评 xff08 三 xff09 秒杀篇 来自黑马的redis课程的笔记 黑马程序员Redis入门到实战教程 xff0c 深度透析redis底层原理 43 redis分布式锁 43 企业解决方案 43 黑马点评实战项目
  • RT-Thread Stm32f103开启UART2(中断接收及轮询发送) 使用RT-Thread Studio

    RT Thread Stm32f103开启UART2 使用RT Thread Studio 1 使用RT Thread Studio新建RT Thread项目 2 修改dricer gt doard h 增加UART2的宏定义设置gpio接
  • 串口收发数据

    1 1 字符串接收函数 发送方结束标志是你接收方判断的依据 xff0c 也可以说是属于协议的一部分 我们这里使用串口助手数据发送自动添加了 r n xff0c 所以我们将它们看成结束标志 1 2 数据传输方式 计算机与外部进行沟通只有并行和