【STM32】HAL库开发教程(四)—串口FIFO使用

2023-05-16

前言

不必害怕未知,无需恐惧犯错,做一个Creator!

本文主要介绍STM32_HAL库开发中串口_FIFO的使用。

一、开发步骤

1. Cubemx配置

  1. 在左侧引脚配置栏选择目标串口号
  2. 在串口模式处配置串口模式为异步通信模式
  3. 在串口配置处配置中断使能和串口参数:波特率、数据长度、停止位、发送接收模式等。(注意在GPIO引脚处和硬件引脚进行确认)

在这里插入图片描述

2. 中断函数编写

生成KEIL文件后,编写中断响应函数。

void USART2_IRQHandler(void)
{
  /* USER CODE BEGIN USART2_IRQn 0 */

  /* USER CODE END USART2_IRQn 0 */
  HAL_UART_IRQHandler(&huart2);
  /* USER CODE BEGIN USART2_IRQn 1 */
  InterRxBufferWrite();
  /* USER CODE END USART2_IRQn 1 */
}

3. 功能函数编写

此处使用环形FIFO缓存区对串口数据进行处理,因此编写环形FIFO缓冲区的功能函数

uint8_t InterRxBufferWrite(void)  //串口接收缓冲区写函数
{
  if (InterFifo.RxBufferWptr  ==  (InterFifo.RxBufferRptr - 1))  //串口缓冲区满了
  {
		return 0;		
  }	
  HAL_UART_Receive_IT(&huart2, &InterFifo.RxBuffer[InterFifo.RxBufferWptr++], 1);	
  InterFifo.RxBufferWptr %= INTER_BUFFER_NUM;//写入一个字节数据到缓冲区中
	return 1;
}

uint8_t InterRxBufferRead(uint8_t* data) //串口接收缓冲区读函数
{
  if (InterFifo.RxBufferRptr == InterFifo.RxBufferWptr)	//串口缓冲区为空
  {
		return 0;
  }
  *data =  InterFifo.RxBuffer[InterFifo.RxBufferRptr++];	//从缓冲区读取一个字节数据并返回
  InterFifo.RxBufferRptr %= INTER_BUFFER_NUM;	
  return 1;
}

uint8_t InterTxBufferWrite(uint8_t data) //串口发送缓冲区写函数
{
  if(InterFifo.TxBufferWptr == (InterFifo.TxBufferRptr - 1)) //串口缓冲区满了
  {
      return 0;		
  }
  InterFifo.TxBuffer[InterFifo.TxBufferWptr++] = data;										
  InterFifo.TxBufferWptr %= INTER_BUFFER_NUM; //写入一个字节数据到缓冲区中
  return 1;
}

uint8_t InterTxBufferRead(uint8_t* data) //串口发送缓冲区读函数
{
  if(InterFifo.TxBufferRptr == InterFifo.TxBufferWptr) //串口缓冲区为空
  {
      return 0;
  }
  *data =  InterFifo.TxBuffer[InterFifo.TxBufferRptr++];	//从缓冲区读取一个字节数据并返回
  InterFifo.TxBufferRptr %= INTER_BUFFER_NUM;	
  return 1;
}

二、主要接口函数

1. 串口中断函数

void USART2_IRQHandler(void):
如果设置为接收中断,则没收到一个字节出发一次中断。
注意添加使用串口接收中断配置函数:__HAL_UART_ENABLE_IT(&huart2, UART_IT_RXNE);

2. HAL库串口发送函数

HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)
参数:串口名、串口数据地址、串口数据长度、超时时间
将指定地址和长度和数据通过串口进行发送

3.HAL库串口接收函数

HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
HAL库串口接收函数
参数:串口名、串口数据地址、串口数据长度
接收指定长度的数据到指定数据地址。


总结

本项目中串口的使用主要可以归纳为:
1.串口环形FIFO缓冲区功能函数编写
2.串口FIFO使用至串口中断内
3.根据串口中断使用灵活使用串口


提示:若有错误不足,欢迎批评指正。该系列文章仅供参考,欢迎互相学习交流。

感谢你的阅读,期待你的关注收藏点赞!

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

【STM32】HAL库开发教程(四)—串口FIFO使用 的相关文章

  • Android FFmpeg应用简析

    FFmpeg简介 FFmpeg是一个跨平台的自由软件 xff0c 可用于录制 转换和流式传输音频和视频 它包含了非常多的音频 视频编解码库 封装格式库以及工具库 它不仅支持各种常用的音视频格式 xff0c 而且支持一些非常罕见的格式 FFm
  • Android 机器学习模型的轻量级框架 TensorFlow Lite

    TensorFlow Lite 简介 TensorFlow Lite 是一款用于在移动设备 嵌入式设备和物联网设备上运行机器学习模型的轻量级框架 它是 TensorFlow 在移动领域的延伸 xff0c 旨在解决手机等设备上机器学习计算资源
  • 跨越屏幕:桌面PC端的多端开发框架介绍

    目前 xff0c 随着互联网和移动互联网的发展 xff0c 多端开发框架已经成为越来越多开发者更好的选择 主要有以下几个方面的前景 xff1a 跨平台开发需求不断增加 xff1a 由于不同平台和设备的差异性 xff0c 开发人员需要使用不同
  • Android App 换肤实现方式

    Android App 换肤的引入意味着给用户提供不同的界面样式 xff0c 以适应不同用户的审美需求 引入换肤可以让用户更加个性化地使用 App xff0c 增强用户对 App 的黏度和使用体验 Android App 换肤可以满足以下几
  • Android 开发中常见的架构设计模式组件化、插件化和模块化

    在 Android 中 xff0c 组件化 插件化和模块化都是很常见的架构设计手段 xff0c 用于提高应用开发的灵活性 扩展性和复用性 组件化 插件化和模块化可以混合使用 xff0c 根据项目的需求和规模选择合适的方案 组件化 Compo
  • tensorflow各个版本的CUDA以及Cudnn版本对应关系(重点)

    概述 xff0c 需要注意以下几个问题 xff1a xff08 1 xff09 NVIDIA的显卡驱动程序和CUDA完全是两个不同的概念哦 xff01 CUDA是NVIDIA推出的用于自家GPU的并行计算框架 xff0c 也就是说CUDA只
  • 在PaaS上代理出现了异常的解决方案

    前言 xff1a 我们的项目基本都是在内网的 xff0c 但是当你要访问第三方的插件或者是和第三方做集成时 xff0c 需要后台与第三方接口做连接的 xff0c 这个时候需要通过公司的代理服务器去访问外网 方法一 xff1a 通过Java添
  • 记一次pip下载包报错ERROR: No matching distribution found for xxx时的解决方案

    前言 当我们使用python自带的pip安装一些包时 xff0c 可能会报以下错误 xff1a 出现这种情况有三种可能 xff1a 第一种可能 xff1a pip的版本过低 xff0c 需要升级一下 xff0c 可以执行以下命令进行尝试 p
  • linux系统的7种运行级别

    Linux系统有7个运行级别 runlevel 运行级别0 xff1a 系统停机状态 xff0c 系统默认运行级别不能设为0 xff0c 否则不能正常启动 运行级别1 xff1a 单用户工作状态 xff0c root权限 xff0c 用于系
  • C语言:求 1! + 2! + 3! + ... + n!(for循环)

    解决问题 xff1a C语言利用 for循环 xff1a 求 1 43 2 43 3 43 43 n 代码实现 include lt stdio h gt int main void int n 61 0 int i 61 0 int m
  • Selenium之Css定位元素

    Selenium之Css定位元素 xff1a cssSelector定位 xff0c 属于CSS高级等位 xff0c 它的定位方式 xff0c 利用选择器进行的 在CSS 中 xff0c 选择器是一种模式 xff0c 用于选择需要添加样式的
  • Ubuntu双系统、ROS、软件安装教程

    一 win10下安装Ubuntu16 04双系统 1 制作系统U盘 下载Ubuntu16 04 我们首先去Ubuntu官网下一个Ubuntu16 04的iso镜像文件 利用软碟通制作 在制作系统U盘的时候我们需要去下一个软件 软碟通 xff
  • Matlab并行计算(新手)

    Matlab并行计算 1 Matlab不会自动开启多核并行2 Matlab并行过程 parpool3 电脑核数与parpool的关系4 说明 matlabpool与partool5 并行实现 parfor或SPMD5 1 parfor xf
  • linux打开防火墙端口

    先打开端口 firewall cmd zone 61 public add port 61 8888 tcp permanent 命令8888就是端口 xff0c 直接替换 然后重启防火墙 firewall cmd reload
  • CSS动画(animation)【一】

    1 动画 xff08 animation xff09 属性简介 2 动画实现 64 keyframes wave 0 css样式 10 css样式 100 css样式 3 示例 xff08 vue xff09 lt template gt
  • Js对象数组查找对象属性的值

    let students 61 name 39 小明 39 age 9 name 39 小李 39 age 14 name 39 小白 39 age 12 let index 61 studens findIndex function st
  • sql汇总

    一 xff1a SQLSERVER 1 dateadd 日减一 update tableName set time 61 DATEADD DAY 1 time 小时加10 update tableName set time 61 DATEA
  • 微信开发者工具 显示区域鼠标不显示的问题

    1 xff1a 打开控制面板 2 xff1a 硬件和声音 3 xff1a 鼠标 4 xff1a 勾选显示鼠标轨迹 OK
  • maven导入本地jar

    cmd 然后进入maven库根目录 mvn install install file Dfile 61 D maven lingpipe 4 1 2 jar DgroupId 61 com aliasi DartifactId 61 lin
  • MergeSort(迭代归并排序)——C语言实现

    前言 xff1a 归并排序跟快速排序有异曲同工之妙 xff0c 都是分治法的典型代表 但是这种分治法都有不小的弊端 xff0c 就是需要占用大量的系统栈 xff0c 很容易造成空间的大量浪费 xff0c 所以就有用迭代来优化递归的操作 这次

随机推荐

  • Spring boot @Async不起作用 的解决方法

    Spring boot 64 Async 为异步方法 但有时候往往会遇到注解不起作用的情况 xff0c 就我遇到的两种情况 xff0c 给出解决方法 1 64 Async 注解的方法不能跟调用它的方法房子一个类中 2 需要在Applicat
  • springboot jar包window服务器启动

    1 在idea中用maven将程序打成jar xff0c 放到运行的目录中 2 去github上面下载winsw xff1a https github com kohsuke winsw releases 将WinSW NET4 exe文件
  • salesforce 接口国内访问慢的解决方案

    最近接到一个客户 xff0c 他们需要用salesforce作为ToC的后端 xff0c 由salesforce直接提供api给前端页面 我们知道一般做salesforce的 xff0c 基本上是作为公司内部应用系统来使用的 xff0c 即
  • sql server跨库连接

    exec sp addlinkedserver kd SQLOLEDB 127 0 0 1 exec sp addlinkedsrvlogin kd 39 false 39 null 39 用户名 39 39 密码 select from
  • shell初探(一)

    1 文件夹创建 span class token function mkdir span p my sheel mkdir是在当前目录下创建文件夹 xff0c p是递归创建目录 2 编辑文件 span class token functio
  • shell初探(二)

    1 if条件语句 一般数值判断用到逻辑运算符 gt lt 的用双小括号 span class token shebang important bin bash span age1 span class token operator 61 s
  • shell初探(三)

    前面学了简单的shell编程 xff0c 那今天我们就根据前面学到的内容 xff0c 写一个小demo练习一下 需求 学生成绩录入查询系统 xff0c 带简单筛选功能 代码 span class token shebang importan
  • shell初探(四)

    1 for循环 循环1 100的数字 xff0c 并输出 span class token keyword for span span class token variable span class token punctuation sp
  • Idea 热部署 devtool

    第一步引入jar span class token generics function span class token punctuation lt span dependency span class token punctuation
  • zookeeper安装及遇到的问题解决

    一 安装 1 下载地址 http mirror bit edu cn apache zookeeper 2 定位到文件并解压 span class token function cd span data myzookeeper span c
  • 重签名ipa步骤及工具

    au signer win工具可以实现在Windows电脑直接重签名ipa xff0c 无需苹果电脑 xff01 对现用的ipa文件进行重签 xff0c 实现达到可以安装自己苹果手机的目的 扩展功能可以设置签名时间控制 xff0c 可以去除
  • Linux下Nacos安装集群配置及Mysql持久化配置

    安装配置1个ngix 43 3个nacos注册中心 43 1个mysql 一 Nacos下载安装 1 下载地址 xff1a https github com alibaba nacos releases tag 1 3 1 2 解压 把下载
  • centos 安装redis踩的两个坑

    redis 安装就不说 xff0c 面向百度编程 xff0c 主要记录下两个重要的点 xff1a 1 设置redis 密码 找到redis安装目录 xff0c 进入下面的bin目录 xff0c 找到redis conf文件 编辑redis
  • centos7安装mysql 8.0 简单全过程

    一 安装 依次执行以下命令 xff0c 遇到选项选Y span class token function sudo span yum localinstall https repo mysql com mysql80 community r
  • nacos注册地址服务名找不到问题记录

    项目构成 xff0c nacos 43 gateway 43 openfeigns xff0c 在做配置的时候使用服务名 xff08 spring application name xff09 找不到服务器 问题解决 xff1a 调用的微服
  • 做设计师还是程序员?一张图你就明白!

    平时大家相安无事 xff0c 可一旦项目滑了水 栽了坑 二重奏就开始没完没了的唱起来了 请看下图 xff1a 你的桌子是有什么 小编反手一摸 xff0c 还好小编的头发还再 你头发呢 xff1f 相信这里有很多学习java的朋友 xff0c
  • 查看数据库当前编码【Mariadb、Mysql、Flask】

    情景 在centos下部署flask项目 xff0c 使用的是mariadb xff0c xff08 本地mysql香香的 xff09 xff0c 用到sqlarchemy xff0c 插入前中文 xff0c 出入后查询乱码 xff0c 最
  • JVM之调优篇

    内存泄漏与内存溢出 内存溢出 指在程序申请内存时 xff0c 没有足够的内存可以分配 xff0c 就是OOM xff0c 即使垃圾回收之后也不能有足够的空间分配 内存泄漏 Memory Leak 是指在程序运行后 xff0c 没有释放所占用
  • 使用document解析xml文件

    在慕课上课时 xff0c 看到可以使用document来解析xml文件 xff0c 把上课的代码放出来 xff0c 先记录一下 大概步骤如下 xff1a 1 使用DocumentBuilderFactory 创建对象后再创建Document
  • 【STM32】HAL库开发教程(四)—串口FIFO使用

    前言 不必害怕未知 xff0c 无需恐惧犯错 xff0c 做一个Creator xff01 本文主要介绍STM32 HAL库开发中串口 FIFO的使用 一 开发步骤 1 Cubemx配置 在左侧引脚配置栏选择目标串口号在串口模式处配置串口模