STM32关于UART的接收方式

news2024/11/20 6:28:15

STM32的 UART 一般分为定长接收不定长接收

定长接收:

HAL_UART_Receive():只能接收固定长度的数据,如果超过固定长度的数据只能接收对应长度,如果小于固定长度则不会接收

HAL_UART_Receive_IT():中断方式接收,每接收一个字节就产生中断完成这次接收存储,只有接收了固定长度的字节后,才会结束中断调用函数提示接收完成

不定长接收:

        通过中断进行一个字符接收,接收了一段字符后,虽然没有达到固定长度,但是也会结束把接收的这一段数据进行操作就可以了, 产生总线空闲就认为结束,空闲中断,总线产生空闲时,产生中断。

实现不定长接收数据

在main.c中的main函数在初始化那里加上下面这两个(注意buf是全局变量)


 

    //使能空闲中断
    __HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);
    //使能接收中断,进行接收数据
    HAL_UART_Receive_IT(&huart1,buf,256);

然后找到目录下的stm32f1xx_it.c  ,这里面放着的是中断的处理接口

加入头文件(用于清零数据)和main.c的buf

 然后找到中断函数处理接口        void USART1_IRQHandler(void)

加入下面的操作

     if(__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE) == SET)
    {
        int datalen = 0;
        __HAL_UART_CLEAR_IDLEFLAG(&huart1);    //清除空闲中断标志
        datalen = 256 - huart1.RxXferCount;    //接收到多少数据
        HAL_UART_Transmit(&huart1,(uint8_t *)buf,datalen,0xffff);  //空闲中断处理
        //还原,将buf的数据清空
        memset(buf,0,256);
        huart1.RxXferCount = 256;
        huart1.pRxBuffPtr = (uint8_t *)buf;
        return ;
    }

然后就可以实现,在256个内数据随意发送,你也可以把buf的空间变大一些,都不影响。

其效果如下所示:

 我这里写的返回发送的数据,如果你要其他操作就修改空闲中断处理的那部分。

        这里出现一个问题,就是如果你使用了不定长接收,那么你的程序里则不能使用printf来进行发送信息,如果不使用不定长接收那么可以使用printf进行调试打印。

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

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

相关文章

CSS 2 CSS 选择器 - 5 2.8 伪选择器 2.8.1 伪类选择器【根据特定状态选取元素】

CSS 文章目录CSS2 CSS 选择器 - 52.8 伪选择器2.8.1 伪类选择器【根据特定状态选取元素】2 CSS 选择器 - 5 2.8 伪选择器 2.8.1 伪类选择器【根据特定状态选取元素】 【什么是伪类】 伪类用于定义元素的特殊状态。 例如,它可以用于: 设置鼠标悬停在…

如何删除ZIP压缩包的密码?

ZIP是比较常用的压缩文件格式,有时候因为工作需要很多人还会给压缩包设置打开密码。那如果后续不需要密码保护了要如何删除密码呢?密码忘记了还能删除吗? 首先来说说第一种情况,也就是知道密码但后续不需要密码保护,只…

1. 初识Python

1. Pythond 简介 Python 语言由荷兰的 Guido Van Rossum (吉多范罗苏姆, 江湖人称龟叔) 在1989年圣诞节期间为了打发圣诞节的无趣而开发的一个脚本解释语言.Python 源代码遵循 GPL(GNU General Public License)开源协议, 也就是说你可以免费使用和传播它, 而不用担心版权的问…

libusb系列-005-部分API简介

libusb系列-005-部分API简介 文章目录libusb系列-005-部分API简介摘要libusb_initlibusb_open_device_with_vid_pidlibusb_kernel_driver_activelibusb_detach_kernel_driverlibusb_claim_interfacelibusb_release_interfacelibusb_attach_kernel_driverlibusb_closelibusb_exi…

【论文翻译】分布式并发控制中时间戳排序算法与本地计数器同步的改进方法

An Advanced Approach of Local Counter Synchronization to Timestamp Ordering Algorithm in Distributed Concurrency Control DOI目录1 介绍2 时间戳排序算法3 本地计数器同步的一种高级方法3.1 改进更新本地计数器的广播消息方式3.2 减少广播消息中的数据传输费用4 结论参…

时间复杂度与空间复杂度

文章目录1.什么是数据结构2.什么是算法3.如何学好数据结构呢3.1写代码3.2 多去动手画图4.算法效率4.1如何评判一个算法的好与坏呢4.2算法的复杂度5.时间复杂度5.1 概念5.2大O渐进法6常见的时间复杂度6.1常数阶6.2线性阶6.3 对数阶6.4平方阶6.5函数调用6.5.1普通调用6.5.2递归调…

1024程序节|Android框架之一 BRVAH【BaseRecyclerViewAdapterHelper】使用demo

文章目录🍓🍓BRVAH 上部🍄🍓动态图结果展示🍄🍄myAdapter.java【第一个布局适配器】🍄🍄youAdapter.java【第二个布局适配器】🍄🍄MainActivity.java【主活动…

【Android】自制静音App,解决他人手机外放问题

契源 看到一个粉丝留言,吐槽舍友深夜手机外放,打扰别人休息,想设计一款软件阻止舍友行径。于是我就来简单设计一下。 需求实现分析 实际上,我之前有篇博文提到过一个类似的Android APP,主要功能是将手机声音强制开到…

内存函数 memcpy、memmove 的简单模拟实现

一、memcpy 函数 数memcpy从source的位置开始向后复制num个字节的数据到destination的内存位置。注意是以字节为单位进行拷贝。函数声明如下: 1、参数返回值解析 第二个参数 src:源地址,即你要从哪开始拷贝。 第三个参数 count&#xff1a…

Qt 物联网系统界面开发 “ 2022湖南省大学生物联网应用创新设计竞赛技能赛 ——应用物联网的共享电动自行车 ”

文章目录前言一、实现效果二、程序设计1. 界面背景图设计2. 信号槽设计3. 定时器设计4. 动态曲/折线图的设计5. 摄像头扫码6. 注册设计7. 登录设计8. 巡检人员设计三、综合分析前言 本篇源于 “ 2022 湖南省大学生物联网应用创新设计竞赛技能赛参考样题 ” ——应用物联网的共享…

【git】git ssh 公钥私钥 在 windows和mac 双系统分别如何生成 以及对接各个平台说明

win和mac 双系统分别如何生成 git ssh 一、windows 生成 ssh 公钥私钥 windows版本需要下载git bash:https://gitforwindows.org/ 在 git bash 中输入如下指令: # 创建全局名称(将会在你的git提交作者中显示)git config --glo…

【allegro 17.4软件操作保姆级教程三】布局操作基础二

4精准定位与坐标定位 在设计中经常会有一些器件或结构孔要摆放在指定位置,如果用move命令用鼠标去移则很难定位完全,这时候就需要精准定位。 操作步骤为: 1、点击move命令,在option面板选择器件原点,这时器件就会悬停在…

策略分析中缺失值的处理方法

在日常的策略分析中,经常会碰到分析的变量出现缺失值的情况,如果对这些缺失值视而不见,则会对策略分析的结果造成一定的影响。那么我们如何处理缺失值呢?关注“金科应用研院”,回复“CSDN”领取“风控资料合集” 首先…

本地数据库IndexedDB - 学员管理系统之登录(一)

IndexedDB是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB允许存储大量数据,提供查找接口,还能建立索引。这些都是LocalStorage或Cookie不具备的。就数据库类型而言,IndexedDB不属于关系型数据库(不支…

插入排序图解

七大排序之插入排序 文章目录七大排序之插入排序前言一、直接插入排序1.1 算法图解1.2 算法稳定性1.3 插入排序和选择排序相比到底优在哪?二、折半插入排序总结前言 博主个人社区:开发与算法学习社区 博主个人主页:Killing Vibe的博客 欢迎大…

springboot:实现文件上传下载实时进度条功能【附带源码】

0. 引言 记得刚入行的时候,做了一个文件上传的功能,因为上传时间较久,为了用户友好性,想要添加一个实时进度条,显示进度。奈何当时技术有限,查了许久也没用找到解决方案,最后不了了之。 近来偶…

全网最全面的pytest测试框架进阶-conftest文件重写采集和运行测试用例的hook函数

【文章末尾有.......】 使用pytest不仅仅局限于进行单元测试,作为底层模块可扩展性强,有必要理解其运行机制,便于进行二次开发扩展,通过文档的学习很容易理解。 构建一个简单的测试脚本 import pytest import requestsdef add(…

Hive数据倾斜常见场景及解决方案(超全!!!)

Hive数据倾斜常见问题和解决方案 文章目录 前言、一、Explain二、数据倾斜(常见优化)前言 Hive数据倾斜是面试中常问的问题,这里我们需要很熟练地能举出常见的数据倾斜的例子并且给出解决方案。 一、Explain 我们可以通过sql语句前面加expa…

公众号网课查题搭建方法

公众号网课查题搭建方法 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(…

QLC 闪存给主控带来了很大的难题?

前言 世界各大主流闪存厂商,如美光、海力士、铠侠和长江存储积极致力于QLC的研发,并相继推出了QLC SSD 产品。随着技术的不断进步,人们普遍担心的QLC擦写寿命少正逐渐被改善。QLC SSD 成本是最大的优势,不指望说替代 TLC SSD&…