HAL库中断方式进行串口通信

2023-05-16

目录

一、通过CubeMX配置项目

 二、在keil配置代码

 三、烧录运行

 四、输出

 五、总结

六、参考链接


一、通过CubeMX配置项目

 

 

 

 

 二、在keil配置代码

main函数中的while循环里面添加传输代码

if(flag==1){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			
			//延时
			HAL_Delay(1000);
		}

在main函数下面重写中断处理函数

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	
	//当输入的指令为0时,发送提示并改变flag
	if(c=='0'){
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
	}
	
	//当输入的指令为1时,发送提示并改变flag
	else if(c=='1'){
		flag=1;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
	}
	
	//当输入不存在指令时,发送提示并改变flag
	else {
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
	}

	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}

main函数全部代码


#include "main.h"
#include "usart.h"
#include "gpio.h"
#include <string.h>

void SystemClock_Config(void);

char c;//指令 0:停止  1:开始
char message[]="hello Windows\n";//输出信息
char tips[]="CommandError\n";//提示1
char tips1[]="Start.....\n";//提示2
char tips2[]="Stop......\n";//提示3
int flag=0;//标志 0:停止发送 1.开始发送


int main(void)
{
	HAL_Init();
  SystemClock_Config();
  MX_GPIO_Init();
  MX_USART1_UART_Init();
	
	//设置接受中断
	HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);

	
	//当flag为1时,每秒发送一次信息
	//当flag为0时,停止
  while (1)
  {
		if(flag==1){
			//发送信息
			HAL_UART_Transmit(&huart1, (uint8_t *)&message, strlen(message),0xFFFF); 
			
			//延时
			HAL_Delay(1000);
		}
  }
}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	
	//当输入的指令为0时,发送提示并改变flag
	if(c=='0'){
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips2, strlen(tips2),0xFFFF); 
	}
	
	//当输入的指令为1时,发送提示并改变flag
	else if(c=='1'){
		flag=1;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips1, strlen(tips1),0xFFFF); 
	}
	
	//当输入不存在指令时,发送提示并改变flag
	else {
		flag=0;
		HAL_UART_Transmit(&huart1, (uint8_t *)&tips, strlen(tips),0xFFFF); 
	}

	//重新设置中断
		HAL_UART_Receive_IT(&huart1, (uint8_t *)&c, 1);  
}
/* USER CODE END 4 */
/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /** Initializes the RCC Oscillators according to the specified parameters
  * in the RCC_OscInitTypeDef structure.
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /** Initializes the CPU, AHB and APB buses clocks
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }
}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}




 三、烧录运行

 

 四、输出

输入t输出字符串

 输入s停止输出

 五、总结

通过此次实验,使我更了解了HAL库中断方式进行串口实验的流程,学习方法也多了。

六、参考链接

(8条消息) HAL库中断方式进行串口通信_醉意丶千层梦的博客-CSDN博客_hal库串口接收中断

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

HAL库中断方式进行串口通信 的相关文章

  • 微信公众平台-股票行情查询

    微信公众平台 股票行情查询 php实现的获取上证 xff0c 深证 A B股实时行情的接口 xff0c 只实现了文本消息回复 xff0c K线图可以在图文消息中加上接口url地址就可以显示 xff0c 具体的接口地址网上可以找 xff0c
  • PELCO-D与PELCO-P协议介绍

    一般控制协议都由硬件或软件商编制在程序里面 xff0c 我们只需要通过相关的控制设备来进行操作 但是作为一个从事监控行业的技术人员 xff0c 往往会遇到除了电脑和协议转换器以外根本没有任何控制设备的情况 xff0c 此时 xff0c 协议
  • ROS 问题(topic types do not match、topic datatype/md5sum not match、msg xxx have changed. rerun cmake)

    1 topic types 不匹配 使用 roslaunch 命令 roslaunch carla ros bridge carla ros bridge with example ego vehicle launch 启动官方 demo
  • Ubuntu中查看安装的Python版本以及不同版本之间切换

    查看系统中已安装的所有Python版本 使用 ls 命令来查看你的系统中都有那些 Python 的二进制文件可供使用 xiyou 64 span class token property xiyou virtual machine span
  • Ubuntu Python 多版本安装

    概述 由于 Python 3 有几次较为跳跃的更新 xff0c 导致大量使用 Python 3 作为开发工具的软件会对 Python 3 的版本进行严格限制 xff0c 如限制使用 Python 3 8 Python 3 9 版本 这要求开
  • 怒爬某 Hub 资源就为撸了一个鉴黄平台

    来源 xff1a 码匠笔记公号 黄色已经是我们所不容然而却防不胜防的 xff0c 尤其是对于做内容的工具和平台 xff0c 所以花了30分钟搭建了一个鉴黄平台 xff0c 分享给大家 数据准备 找了 N 多资源都不能解决问题 xff0c 于
  • ROSERROR : datatype/md5sum

    出错原因是 xff1a 自定义消息 xff0c 发送话题的消息类型和接受话题的消息类型不一样 但是我的代码真的是一样的 所以 xff0c 解决办法是 xff1a 清空工作空间的build devel文件夹 xff0c 重新编译运行 成功 x
  • 学习使用 ArUco 标记

    在本文中 xff0c 我们将研究使用 Python 和 OpenCV 检测和估计 ArUco 标记的方向 首先 xff0c 我们将从生成 ArUco 标记开始 你可以使用特定网站一个一个地创建单个标签 xff0c 也可以使用我的程序生成整个
  • TCP协议中的序列号

    TCP 协议工作在OSI的传输层 xff0c 是一种可靠的面向连接的数据流协议 xff0c TCP之所以可靠 xff0c 是因为它保证了传送数据包的顺序 顺序是用一个序列号来保证的 响应包内也包括一个序列号 xff0c 表示接收方准备好这个
  • c++开发过程中遇到的问题及解决方案

    xfeff xfeff 问题一 xff1a 1 gt JForm obj error LNK2019 无法解析的外部符号 34 public virtual thiscall JFC JForm JForm void 34 1JForm 6
  • Digest Auth 摘要认证

    Digest Auth 摘要认证 1 非常规方式 转载 xff1a https blog csdn net qq 25391785 article details 86595529 public static void postMethod
  • 嵌入式C语言基础知识--位操作

    目录 大小端模式 xff1a 字节高低位 xff1a LSB和MSB xff1a 高位先行msb 低位先行lsb xff1a 串口传输是低位先行 IIC传输是高位先行 字节序 比特序 大端模式 小端模式 高字节序 低字节序 MSB LSB
  • qt 绘制 流程图 案例 收集

    参考 C 43 43 中的例子 xff1a Qt Qt5 11 1 Examples Qt 5 11 1 widgets graphicsview diagramscene The Diagram Scene example is an a
  • 获得GPS数据的两种方法 1.读串口

    获得GPS数据一般可通过两种方法 xff0c 读串口及调用gpsapi函数 串口作为硬件设备 xff0c 不能同时被两个程序占用 xff0c gpsapi函数几个应用程序可同时共享端口 1 xff0e 读串口 先找出 gps 使用的串口号
  • 机器人履带底盘的悬挂和传动

    我爸是坦克 xff01 一个履带机器人 一 前言 曾经调研过机器人履带底盘的设计和构造 xff0c 整理一下备忘 本文主要关注自己比较难理解的履带底盘悬挂机构和摇臂式履带底盘传动机构 其中履带底盘的悬挂涉及到克里斯蒂悬挂 xff08 Chr
  • Python爬虫——Scrapy 的基本使用

    文章目录 Python爬虫 Scrapy 的基本使用1 创建 Scrapy 爬虫项目2 Scrapy 创建爬虫文件3 Scrapy 运行爬虫文件 Python爬虫 Scrapy 的基本使用 Scrapy 框架中创建项目 查看配置信息 xff
  • Python爬虫——Scrapy框架使用实例及执行过程

    文章目录 Python爬虫 Scrapy框架使用实例及执行过程1 Scrapy框架使用实例2 Scrapy框架执行过程 Python爬虫 Scrapy框架使用实例及执行过程 1 Scrapy框架使用实例 1 创建scrapy项目 scrap
  • C++基础入门

    文章目录 C 43 43 基础入门1 变量和常量2 关键字3 数据类型4 流程控制5 数组6 函数7 指针8 结构体 C 43 43 基础入门 1 变量和常量 变量和常量 变量 xff1a 数据类型 变量名 61 值 常量 xff1a 宏常
  • 解决CLion的 CMake executable not found:XXX

    解决CLion的 CMake executable not found XXX 问题 CLion不能编译DeepStream项目 xff0c 也不能 build 和 debug了 xff0c 还出现以下提示 xff1a 原因 原因是 cli
  • C++核心编程

    C 43 43 核心编程 1 c 43 43 内存模型 c 43 43 程序执行时将内存大致分为4个区域 代码区 xff1a 存放CPU执行的二进制代码指令 xff0c 由操作系统进行管理全局区 xff1a 存放全局变量和静态变量以及全局常

随机推荐

  • STL技术——STL概述和入门

    文章目录 STL技术 STL概述和入门1 STL简介2 入门案例2 1 vecto存放内置数据类型2 2 vecto存放自定义数据类型2 3 容器嵌套 STL技术 STL概述和入门 1 STL简介 STL介绍 STL xff08 stand
  • 使用keil软件添加.C文件和.H文件到工程

    使用keil软件添加 C文件和 H文件到工程 1 第一步 在所建工程的文件夹下的HARDWARE子文件夹下创建一个所要添加文件名称 xff0c 例如要添加led c和led h文件 xff0c 可以先在HARDWARE文件目录下创建一个命名
  • STL常用容器——String容器的使用

    文章目录 STL常用容器 String容器1 string构造器2 string的赋值操作3 拼接字符串4 字符串查找和替换5 字符串比较6 字符串存取7 字符串插入与删除8 截取字符串 STL常用容器 String容器 string类封装
  • STL常用容器——vector容器的使用

    文章目录 STL常用容器 vector容器的使用1 vector容器概念2 vector容器构造方式3 vector赋值操作4 vector容量 capacity 和大小 size 的区别5 vector添加和删除6 vector数据存取
  • STL常用容器——deque容器的使用

    文章目录 STL常用容器 deque容器的使用1 deque 容器简介2 deque容器的构造函数3 deque的赋值操作4 deque大小操作5 deque容器添加和删除元素6 deque容器访问元素7 容器内元素排序 STL常用容器 d
  • STL常用容器——stack容器的使用

    文章目录 STL常用容器 stack容器的使用1 stack容器介绍2 stack容器常用接口 STL常用容器 stack容器的使用 1 stack容器介绍 stack容器简介 stack容器是堆栈容器 xff0c 该容器具有先进后出的特性
  • STL常用容器——queue容器的使用

    文章目录 STL常用容器 queue容器的使用1 queue容器的介绍2 queue容器常用接口2 1 queue容器构造函数2 2 queue队列容器常用的成员函数 STL常用容器 queue容器的使用 1 queue容器的介绍 queu
  • STL常用容器—— list 容器的使用

    文章目录 STL常用容器 list 容器的使用1 list 容器介绍2 list容器的构造函数3 list容器的赋值和交换4 list容器大小操作5 list容器添加和删除元素操作6 list容器数据存取7 list容器反转和排序 STL常
  • STL常用容器——set容器的使用

    文章目录 STL常用容器 set容器的使用1 set容器简介2 set容器的构造和赋值3 set容器的大小和交换4 set容器的添加与删除5 set容器的查找与统计6 pair类模板7 set和multiset的区别8 set容器的排序 S
  • STL常用容器——map容器的使用

    文章目录 STL常用容器 map容器的使用1 map容器介绍2 map容器构造和赋值3 map容器大小和交换4 map容器的添加和删除4 1 insert插入数据的四种方式4 2 删除键值对 5 map容器查找和统计6 map容器排序 ST
  • STL常用算法——遍历算法

    文章目录 STL常用算法 遍历算法1 for each 2 transform STL常用算法 遍历算法 1 for each for each xff1a 遍历容器 xff0c 对容器中的每一个元素调用函数或函数对象 函数原型 xff1a
  • STL常用算法——查找算法

    文章目录 STL常用算法 查找算法1 find 2 find if 3 adjacent find 4 binary search 5 count 和count if 5 1 count 5 2 count if STL常用算法 查找算法
  • 视觉识别示例-海康威视

    视觉识别示例 海康威视 C Program Files x86 MVS Development Documentations1 在海康威视软件MVS xff0c 默认安装目录下有示例及说明 xff0c 如上图是示例说明 C Program
  • STL常用算法——排序算法

    文章目录 STL常用算法 排序算法1 sort 2 random shuffle 3 merge 4 reverse STL常用算法 排序算法 1 sort sort xff1a 对容器或普通数组中范围内的元素进行排序 xff0c 默认进行
  • STL常用算法——拷贝和替换算法

    文章目录 STL常用算法 拷贝和替换算法1 copy 2 replace 3 replace if 4 swap STL常用算法 拷贝和替换算法 1 copy copy 函数 xff1a 将源容器内指定范围的元素拷贝到目的容器中 函数原型
  • STL常用算法——算术生成算法和集合算法

    文章目录 STL常用算法 算术生成算法和集合算法1 算术生成算法1 1 accumulate 1 2 fill 和fill n 2 集合算法2 1 set intersection 2 2 set union 2 3 set differe
  • CompletableFuture的使用

    文章目录 1 Future2 CompletableFuture 并行 xff0c 并发 并发 xff1a 一个实体上 xff0c 多个任务有序执行 并行 xff1a 多个实体上 xff0c 多个任务同时执行 用户线程 用户线程是系统的工作
  • 将本地jar添加到Maven仓库

    一 将jar添加到本地仓库的做法 xff1a 以下面pom xml依赖的jar包为例 xff1a 实际项目中pom xml依赖写法 xff1a html view plain copy lt dependency gt lt groupId
  • nodejs如何实现Digest摘要认证?

    文章目录 1 前言2 原理3 过程4 node实现摘要认证5 前端如何Digest摘要登录认证 xff08 下面是海康的设备代码 xff09 1 前言 根据项目需求 xff0c 海康设备ISAPI协议需要摘要认证 xff0c 那么什么是摘要
  • HAL库中断方式进行串口通信

    目录 一 通过CubeMX配置项目 二 在keil配置代码 三 烧录运行 四 输出 五 总结 六 参考链接 一 通过CubeMX配置项目 二 在keil配置代码 main函数中的while循环里面添加传输代码 if flag 61 61 1