细说ARM MCU的串口发送数据的实现过程

目录

1、条件及工程配置 

2、实现串口发送的库函数

3、修改whlie(1)中的代码

4、修改回调函数

5、下载运行


        前面的文章介绍了用串口的接收中断来接收数据,本文介绍通过串口从MCU向外发送数据。

1、条件及工程配置 

         文章依赖的硬件及工程配置同本文作者的其他文章:细说ARM MCU的串口接收数据的实现过程-CSDN博客  https://wenchm.blog.csdn.net/article/details/139541112

        设计目的: 如果收到0x10,则MCU送出字符串:Everything is OK;如果收到的数据不是0x10,则MCU送出字符串:Received Error Data。

2、实现串口发送的库函数

        在HAL固件库中,常用的串口发送数据函数有以下两个:

HAL_UART_Transmit(*huart,pData,Size,Timeout)
HAL_UART_Transmit_IT(*huart,pData,Size)

首先在main函数前定义两个放置MCU要发送的字符的数组,可以与前面定义的RxBuffer放到相同的注释对中:

/* USER CODE BEGIN PV */
uint8_t CommOkMessage[]="Everything is OK\r\n";
uint8_t CommErrMessage[]="Received ErrorData\r\n";
uint8_t CommFlag =0;
uint8_t RxBuffer[RXBUFFERSIZE]={0};
/* USER CODE END PV */

        定义了一个用作标志的CommFlag变量。字符串后的\r和\n称为转义字符,分别指回车和换行。所谓换行,实际就是将光标转移到下一行的起始处。

        发送CommOkMessage字符串可以用如下语句:

HAL_UART_Transmit(&huart2,CommOkMessage,19,1000);

        参数中的“19”是指CommOkMessage字符串共有19个字符(加上回车、换行符以及字符串结束符),“1000”是指超时时间。

3、修改whlie(1)中的代码

        在while(1)循环中编写代码实现:如果接收到的是0x10,则发送字符串CommOkMessage;如果接收到的不是0x10,则发送字符串CommErrMessage。为了避免MCU一直往外送数据,利用标志变量CommFlag进行控制。

while(1)
{/* USER CODE BEGIN 3 */if((RxBuffer[0] == 0x10) && (CommFlag == 1)){CommFlag =0;HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_SET);HAL_UART_Transmit(&huart2,CommOkMessage,19,1000);}else if((RxBuffer[0] != 0x10) && (CommFlag == 1)){CommFlag = 0;HAL_GPIO_WritePin(LED_GPIO_Port,LED_Pin,GPIO_PIN_RESET);HAL_UART_Transmit(&huart2,CommErrMessage,22,1000);}
}
/*USER CODE END 3 */

4、修改回调函数

        串口中断收到数据之后,把标志变量CommFlag的置位。可以在回调函数中将CommFlag置位:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{CommFlag = 1;HAL_UART_Receive_IT(&huart2,(uint8_t *)RxBuffer,RXBUFFERSIZE);
}

5、下载运行

下载、在串口助手中发送0x20,3次,收到3次错误提示;修改发送的数据为0x10,发送3次,收到3次数据正确提示。

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

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

相关文章

【Unity】Inspector排版扩展学习初探

一、简单的Unity Inspector扩展 [SerializeField] [SerializeField] 作用:让private属性也可以显示在面板上 [Range(x , y)] [Range(x , y)] 作用: 让参数从输入框变为范围滑条 [Header(" 标题 ")] [Header(" 标题 ")]作用&am…

如何选择合适的 AWS 区域对网站性能和成本?

选择合适的 AWS 区域对网站性能和成本都有很大影响,我们结合九河云的分析来总结一些主要考虑因素: 1. 地理位置和用户分布 最好选择靠近目标用户的区域,可以减少网络延迟,提高响应速度。如果用户分散在世界各地,可以考虑使用 AWS 的全球加速器或内容分发网络(CDN)服务。 2. …

docker 容器 network host 模式启动

docker 默认启动容器 network 是 bridge 模式,需使用 -p 映射端口实现容器与宿主机网络通信,较安全; 当使用 network host 模式,直接走宿主机网络通信,较不安全。 下面来一个 docker 容器 network host 模式启动 的 实…

SpringBoot:CORS是什么?SpringBoot如何解决跨域问题?

一、简介 跨域资源共享(CORS, Cross-Origin Resource Sharing)是一个W3C规范,它定义了一种浏览器和服务器交互的方式来确定是否允许跨源请求。当一个资源(如HTML页面、JavaScript文件、图片等)从一个源(ori…

GPT-4o更容易越狱?北航南洋理工上万次测试给出详细分析

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践,基于大语言模型和RAG技术,集合海量工业领域生态资源方优质产品和知识服务,旨在通过智能搜索、连续交互,实时生成个性化的内容…

CentOS7下快速升级至OpenSSH9.7p2安全版本

一、CentOS7服务器上编译生成OpenSSH9.3p2的RPM包 1、编译打包的shell脚本来源于该项目 https://github.com/boypt/openssh-rpms解压zip项目包 unzip openssh-rpms-main.zip -d /opt cd /opt/openssh-rpms-main/ vim pullsrc.sh 修改第23行为source ./version.env 2、sh pull…

知识图谱存在的挑战---商业模式相关和人才相关

文章目录 商业模式相关人才相关 商业模式相关 商业模式是通过协调关系,利用资源,获得价值和利益,将这些内容连接起来,从而形成一种企业满足消费者需求的动态系统。一种商业模式包含的要素很多导致商业模式的种类也很多&#xff0c…

比较市场上14款最佳的看板工具软件

文章对比了14款看板工具软件:PingCode、Worktile、Trello、Asana、Teambition、Monday、ClickUp、Wrike、Jira、Kanban Tool、MeisterTask、Teamhood、Leankit by Planview、ZenHub。 看板工具以其直观的设计和灵活性,成为团队协作和项目跟踪的首选。通过…

Java Collections集合的工具类使用方法

import java.util.*; public class test1 {public static void main(String[] args){// Collections集合的工具类使用方法/*1.Collections.addAll(list,l1,l2,l3...) 可变参数添加对象2.Collections.shuffle(list) 打乱集合中的元素顺序3.Collection.sort(list, new Comparator…

python3的基本语法说明二

一. 简介 前一篇文章简单学习了 python3 的一些基本语法,文章如下:python3的基本语法说明一-CSDN博客 本文继续学习 python3 的基本语法。 二. python3 的基本语法 1. 多行语句 Python 通常是一行写完一条语句,但如果语句很长&#xff0…

【阅读论文】-- LiveRAC:系统管理时序数据的交互式可视化探索

LiveRAC:系统管理时序数据的交互式可视化探索 摘要引言相关工作系统管理角色和活动当前工具的局限性 迭代设计方法参加者设计阶段 设计要求可视化解决方案设计原则LiveRAC 接口执行 纵向评价非正式纵向研究方法对设计的影响使用场景 结论致谢参考文献 摘要 我们介绍…

利用免费的可视化组件,零代码制作一个电商销量大屏居然这么简单!

每到一年一度的618和双十一时,由于各种平台的优惠力度,使人们纷纷清空购物车下单,而在这庞大的销售数据下,各大商家却能够在第一时间发布整体销售业绩和数额,在这高效且巨大的数据背后,你是否有了解过展示数…

算法007:三数之和

. - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/3sum/ 这个题相较于前几个题来说比较难,思想是前面一个题目…

优化yarn在任务执行时核数把控不准确的问题

核数不准这个事情是个概率问题,如果你碰见了,只能说你有点非欧,本质上是因为集群配置问题,默认时yarn不会去精准把控任务的核数,因为默认的资源计算方式是用实际内存去估算核数,这就导致如果大家配置任务时…

探索新领域的四步学习策略

一、构建知识框架 广泛探索: 在探索新领域的初始阶段,我们需要像探险家一样进行全面的扫描。首先,利用网络资源,广泛搜集不同难度和视角的书籍、文章、在线课程等材料,以确保获得多元化的视角。不要局限于单一的观点或…

LSTM 词语模型上的动态量化

原文链接 (beta) Dynamic Quantization on an LSTM Word Language Model — PyTorch Tutorials 2.3.0cu121 documentation 引言 量化涉及将模型的权重和激活值从浮点数转换为整数,这样可以缩小模型大小,加快推理速度,但对准确性的影响很小…

GitHub每日最火火火项目(6.14)

以下是按照要求对每个项目的总结: 项目名称:huggingface / diffusers 项目介绍:diffusers 是一个强大的工具库,专注于图像和音频生成的扩散模型。它提供了一系列预训练模型和便捷的接口,使开发者能够轻松地探索和利用…

vue2项目更换element-ui的主题色(绝对有效,操作简单)

vue2项目更换element-ui的主题色(绝对有效,操作简单) 前言:使用vue2element-ui开发web端项目的朋友应该会有修改element-ui主题色的需求,然而 网上几年前就各种传言element-ui不再维护了,官网显示的最后一次更新日期为2023-08-24…

leetcode打卡#day42 62. 不同路径、63. 不同路径 II、343. 整数拆分、96. 不同的二叉搜索树

62. 不同路径 class Solution { public://动态规划int uniquePaths(int m, int n) {//dp数组&#xff0c;记录到达目的地的路径数vector<vector<int>> dp(m, vector(n, 0));//初始化for(int i0; i< m; i) dp[i][0] 1;for(int i0; i< n; i) dp[0][i] 1;//遍…

【智能家居控制系统项目】一、项目系统镜像烧录与系统登录

前言 完成本章节将可以获得本项目的系统UI界面功能。本章节主要介绍如何烧录项目系统镜像以及进入系统。配套的视频介绍可以点击跳转到智能家居项目复刻配套视频 1.系统功能页面介绍 完成本章全部步骤&#xff0c;我们将可使用以下项目系统功能界面。 1.1 家居总览界面 主界面…