6,串口编程———通过串口助手发送数据,控制led亮灭

//功能:串口助手每次发送数据格式:@0000&

// 第二个字节控制LED1亮灭

// 第三个字节控制LED2亮灭

// 第四个字节控制LED3亮灭

// 第无个字节控制LED4亮灭

//要求:代码能够一直运行,能够接收多字节数据

上节讲了串口的基本发送接收数据,本节应用一下。

以上功能可写成这样:发送和接收数据的解析函数:

void DataAnaly(void)
{if(usart1flag == 1){if(Usart1buff[0]== '@' && Usart1buff[Usart1len-1]== '&'){if(Usart1buff[1]=='1')LED1(1);elseLED1(0);	if(Usart1buff[2]=='1')LED2(1);elseLED2(0);if(Usart1buff[3]=='1')LED3(1);elseLED3(0);if(Usart1buff[4]=='1')LED4(1);elseLED4(0);memset(Usart1buff,0,10);Usart1len=0;usart1flag=0;}else{memset(Usart1buff,0,10);Usart1len=0;usart1flag=0;}}}

因为功能要求代码能够一直运行,所以一般会想到把上面这个功能函数写在while(1)循环里,但是如果写在while(1)循环中,只有发数据,while循环才会跑起来,不发的话,程序会一直卡死在接收数据这里,while循环里的其他数据就不能运行了,所以要使用中断。因为在接受数据这导致其他数据不能运行,所以要使用接收中断。

1,在上节的usart.c中的void Usart_Init(void){ }函数里加一行代码,开启接收函数中断源

  //开启串口1接收中断USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); 

2,在usart.c写中断服务函数

uint8_t Usart1buff[10] = {0};
uint16_t Usart1len 		 = 0;
uint8_t  usart1flag 	 = 0;//中断服务函数按键1  不用在.h中声明 不用在main函数中调用了 
void USART1_IRQHandler(void)
{//检查指定usart中断(接收中断)发生与否if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET){//将接收到的数据保存在Usart1buff[10]数组中Usart1buff[Usart1len] =  USART_ReceiveData(USART1);if(Usart1buff[Usart1len] == '&'){//判断数据是否接受完毕usart1flag=1;}//只要接收到数据就会发生中断//因为中断一直在发生,所以数据要往后偏移Usart1len++;//清除 USARTx 的中断待处理位USART_ClearITPendingBit(USART1,USART_IT_RXNE);}}

3,在usart.c写解析函数,然后在usart.h中声明函数(省略)

void DataAnaly(void)
{//如果数据接收正确,执行对应程序if(usart1flag == 1){if(Usart1buff[0]== '@' && Usart1buff[Usart1len-1]== '&'){if(Usart1buff[1]=='1')LED1(1);elseLED1(0);	if(Usart1buff[2]=='1')LED2(1);elseLED2(0);if(Usart1buff[3]=='1')LED3(1);elseLED3(0);if(Usart1buff[4]=='1')LED4(1);elseLED4(0);//将Usart1buff所指向的内存区域的前10个字节设置为0,清除memset(Usart1buff,0,10);Usart1len=0;usart1flag=0;}//如果数据接收不正确,清除接收输入的数据的数组,数组长度和标志位清零else{memset(Usart1buff,0,10);Usart1len=0;usart1flag=0;}}}

4,在主函数的while循环里调用函数,写以下代码,然后执行代码看现象,可看到本功能执行的同时,while循环里的写的其他功能代码也可以实现(例如写的按键控制灯也能正常执行),没有发生阻塞现象。

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

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

相关文章

宁波财经学院程序设计补修单链表

2024年6月2日 #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct Node { int data; struct Node* next; } Node; // 尾插函数 void append(Node** head_ref, int new_data) { // 1. 分配新节点&#xff0c;并设置其数据…

数学问题求解能力提升:ChatGLM-Math模型的自我批评管道

大型语言模型&#xff08;LLMs&#xff09;在处理语言任务上取得了巨大进步&#xff0c;但在解决需要数学推理的实际问题时仍面临挑战。这些挑战包括数学问题的复杂性、需要高度准确性和逻辑一致性的解答、缺乏深入的数学领域知识&#xff0c;以及现有模型对反馈的依赖性&#…

【Docker】学习笔记(超万字图文整理)

前言 再此感谢黑马程序员提供的Docker课程&#xff01; 什么是Docker&#xff1f;看这一篇干货文章就够了&#xff01; UPD: 补充更新微服务集群、Docker镜像仓库部分内容 所有笔记、生活分享首发于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#…

k8s集群修改apiserver的ip地址

有时候由于服务器的调整&#xff0c;导致ip的的变化&#xff0c;k8s集群的api大管家的ip变动会导致kubectl的接口都无法正常使用&#xff0c;这是只需要将k8s主节点配置文件的ip替换即可。 例如无需要将原来的192.168.146.202的ip替换成192.168.85.202&#xff0c;执行一下操作…

后端开发技术栈选择指南

在软件开发领域&#xff0c;后端开发是构建应用程序的服务器端逻辑、数据库、API和业务规则的核心部分。选择合适的后端技术栈对于项目的成功至关重要。本文将详细介绍当前流行的几种后端开发技术栈&#xff0c;并探讨它们的优势、适用场景以及如何根据项目需求进行选择。 Jav…

全文检索-ElasticSearch

1.基本概念 1.Index索引 动词&#xff1a;相当于MySQL中的insert&#xff1b; 名词&#xff1a;相当于MySQL中的DataBase&#xff1b; 2.Type&#xff08;类型&#xff09; 在Index&#xff08;索引&#xff09;中&#xff0c;可以定义一个或多个类型 类似于MySQL中的Tab…

Win键的快捷键

查找设置 win开始菜单win Q搜索窗口win E文件资源管理器win R运行窗口win A操作中心win I 设置中心 win num打开任务栏的第num窗口win V剪切板 录制 win G录制工具(Esc退出) 多桌面工作 win Ctrl D创建桌面win Ctrl F4关闭桌面win Ctrl 左右方向键切换桌面…

Mysql | select语句导入csv后再导入excel表格

需求 从mysql数据库中导出数据到excel 解决方案 sql导出csv文件 sql SELECT col1,col2 FROM tab_01 WHERE col3 xxx INTO OUTFILE /tmp/result.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n;csv文件导出excel文件 1、【数据】-【导入数据】 …

C和c++头文件库

C语言和c里面都有哪些我们常会用到的头文件呢&#xff1f;要了解每种头文件库的作用&#xff0c;才能更好的写代码。 1.c语言 C语言中的头文件&#xff08;Header Files&#xff09;是包含函数声明、宏定义、数据类型和常量定义的文件&#xff0c;通常具有.h扩展名。头文件的…

【QT】如何将printf打印输出至窗体

在Qt中&#xff0c;通常不推荐使用printf函数来输出信息到窗体&#xff0c;因为Qt有自己的信号和槽机制以及日志系统来处理输出和调试信息。不过&#xff0c;如果你确实需要将printf的输出重定向到Qt的窗体&#xff0c;你可以通过重定向标准输出来实现。 以下是一个简单的例子…

【计算机毕设】基于SpringBoot的教学资源库设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个基于SpringBoot的教学资源库系统&#xff0c;以便教师和学生能够方便地存储、分享和查找各种教学资源。具体目标包括&…

解决TrueNas Scale部署immich后人脸识别失败,后台模型下载异常,immich更换支持中文搜索的CLIP大模型

这个问题搞了我几天终于解决了&#xff0c;搜遍网上基本没有详细针对TrueNas Scale部署immich应用后&#xff0c;CLIP模型镜像下载超时导致人脸识别失败&#xff0c;以及更换支持中文识别的CLIP模型的博客。 分析 现象&#xff1a;TrueNas Scale安装immich官方镜像应用后&…

解决el-dialog里嵌入el-tabs卡死的问题

文章目录 1. 解决 el-dialog 里嵌入 el-tabs 卡死的问题 1. 解决 el-dialog 里嵌入 el-tabs 卡死的问题 今天发现在element ui里面使用 el-dialog 会导致页面卡死&#xff0c;本来我心想这么简单的一个弹窗&#xff0c;怎么会卡死解决思路&#xff1a;以为是项目的问题&#x…

赶紧收藏!2024 年最常见 20道 Kafka面试题(二)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道 Kafka面试题&#xff08;一&#xff09;-CSDN博客 三、Kafka的设计架构是什么&#xff1f; Kafka的设计架构是分布式和可扩展的&#xff0c;旨在处理高吞吐量的数据流。以下是Kafka设计架构的关键组成部分及其…

JAVA和爬虫,那个值得学习

如果你是初学者&#xff0c;建议先从基础的编程语言学起&#xff0c;比如Java&#xff0c;它能为你打下坚实的编程基础&#xff0c;并且在未来转学其他语言或技术时更加容易。随着编程基础的建立&#xff0c;你可以根据自己的兴趣或职业规划&#xff0c;学习爬虫技术作为补充技…

微信小程序实现上传视频 / 上传图片功能以及整合上传视频 / 上传图片功能(超详细)

上传视频功能 效果如下: <!-- 上传 S --><view class"img-list"><!-- 上传列表 --><view class"upload-video"><block wx:if"{{src ! }}"><video src"{{src}}" class"img-li"></vi…

Django 目录

Django 创建项目及应用-CSDN博客 Django 注册应用-CSDN博客 Django 应用的路由访问-CSDN博客 Django templates 存放html目录-CSDN博客 Django 解析路由参数-CSDN博客 Django 用re_path()方法正则匹配复杂路由-CSDN博客 Django 反向解析路由-CSDN博客 Django HttpReques…

jlink系列 v9 和 v11 调试器版本区别

纵览 csdn 居然找不到一个关于 jlink 调试器最近几个版本的基本说明&#xff0c;这实在是太扯了&#xff0c;我找了找资料版本说明如下&#xff1a; Jlink 用途 &#xff1a;嵌入式 arm 内核调试器。Jlink 截止目前硬件售卖版本 &#xff1a;v12。Jlink 最新固件&#xff1a;见…

[SQL-SERVER:数据库安全及维护]:MSSM工具进行附加还原备份等操作

文章目录 目的介绍一、完整备份与还原&#xff08;20分&#xff09;1.将教师提供的TeachingDB数据库附加到个人使用的服务器上&#xff0c;并更名为TeachingDB_***&#xff08;***为个人姓名&#xff09;1.1 操作流程&#xff1a;将docker容器sqlserver数据库已有的mdf镜像文件…

AI帮写:探索国内AI写作工具的创新与实用性

随着AI技术的快速发展&#xff0c;AI写作正成为创作的新风口。但是面对GPT-4这样的国际巨头&#xff0c;国内很多小伙伴往往望而却步&#xff0c;究其原因&#xff0c;就是它的使用门槛高&#xff0c;还有成本的考量。 不过&#xff0c;随着GPT技术的火热&#xff0c;国内也涌…