STM32CubeIDE(串口)

2023-11-18

目录

一、轮询模式

1.1 配置USART2为异步模式

 1.2 500ms发送一次消息

 1.3 通信结果

 1.4 串口控制LED

二、中断收发

2.1 开启中断

2.2 中断发送接收

2.2.1 中断发送只需要调用接口

2.2.2 中断接收

2.3 实验结果

三、DMA模式与收发不定长数据

3.1 DMA通道配置

3.2  DMA发送接收函数

3.3 使用空闲中断接收不定长数据


一、轮询模式

1.1 配置USART2为异步模式

 1.2 500ms发送一次消息

 1.3 通信结果

 1.4 串口控制LED

  uint8_t reciveDate[2];
  while (1)
  {
	  HAL_UART_Receive(&huart1, reciveDate, 2, HAL_MAX_DELAY);
	  HAL_UART_Transmit(&huart1, reciveDate, 2, 100);
	  GPIO_PinState state=GPIO_PIN_SET;
	  if(reciveDate[1]=='1')
	  {
		  state=GPIO_PIN_RESET;
	  }
	  if(reciveDate[0]=='R')
	  {
		  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_8, state);
	  }
	  else if(reciveDate[0]=='G')
	  {
		  HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, state);
	  }
  }
}

二、中断收发

2.1 开启中断

2.2 中断发送接收

2.2.1 中断发送只需要调用接口

HAL_UART_Transmit_IT(&huart1, reciveDate, 2);

2.2.2 中断接收

①在程序起始开启中断

 ②重新定义stm32f1xx_hal_uart.c中的函数

__weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  /* NOTE: This function should not be modified, when the callback is needed,
           the HAL_UART_RxCpltCallback could be implemented in the user file
   */
}
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit_IT(&huart1, reciveDate, 2);
	GPIO_PinState state = GPIO_PIN_SET;

	if (reciveDate[1] == '1')
	{
		state = GPIO_PIN_RESET;
	}
	if (reciveDate[0] == 'G')
	{
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, state);
	}
	HAL_UART_Receive_IT(&huart1, reciveDate, 2);//再次启动中断接收
}

2.3 实验结果

三、DMA模式与收发不定长数据

3.1 DMA通道配置

3.2  DMA发送接收函数

只需要将_IT修改为_DMA即可,DMA模式还是有中断参与其中

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
	HAL_UART_Transmit_DMA(&huart1, reciveDate, 2);//dma发送
	GPIO_PinState state = GPIO_PIN_SET;

	if (reciveDate[1] == '1')
	{
		state = GPIO_PIN_RESET;
	}
	if (reciveDate[0] == 'G')
	{
		HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, state);
	}
	HAL_UART_Receive_DMA(&huart1, reciveDate, 2);//DMA接收
}

3.3 使用空闲中断接收不定长数据

只有当接收端不再有数据输入时才会触发空闲中断,重新定义

__weak void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
  /* Prevent unused argument(s) compilation warning */
  UNUSED(huart);
  UNUSED(Size);

  /* NOTE : This function should not be modified, when the callback is needed,
            the HAL_UARTEx_RxEventCallback can be implemented in the user file.
   */
}
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
	if(huart==&huart1)
	{
		HAL_UART_Transmit_DMA(&huart1, reciveDate, Size);//发�?�与接收相同的Size长度的字节数

		HAL_UARTEx_ReceiveToIdle_DMA(&huart1, reciveDate, sizeof(reciveDate));
        __HAL_DMA_DISABLE_IT(&hdma_usart2_rx,DMA_IT_HT);//关闭传输过半中断
	}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STM32CubeIDE(串口) 的相关文章

  • print() java_java的print,printf,println以及输入

    java中有三种方式向控制台输入信息 分别是print printf println 现在简单介绍一下他们之间的异同 printf主要是继承了C语言的printf的一些特性 可以进行格式化输出 print就是一般的标准输出 但是不换行 pr
  • 自动化携程酒店爬虫

    一 查看chrome版本 浏览器 chrome version 二 下载传送门 url http chromedriver storage googleapis com index html 根据自己的版本进行下载 放入C Program

随机推荐

  • Linux 下Qt应用程序打包发布方法

    1 首先选择Qt中的 Release 模式 然后点击Run 在Qt工作空间生成相应的 build 项目名称 Desktop 4bec8a Release文件夹 2 将Qt的打包脚本 deployqtapp sh 放在build 项目名称 D
  • Window XP驱动开发(十七) 芯片固件程序设计 (代码实现,针对USB2.0 芯片CY7C68013A)

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 在我的文章 lt lt http blog csdn net chenyujing1234 article details 7604266
  • 武汉工程大学计算机科学与工程学院调剂公告,武汉工程大学计算机科学与工程学院2017年考研复试安排...

    武汉工程大学计算机科学与工程学院2017年考研复试安排本站小编 免费考研网 2017 07 23 武汉工程大学计算机科学与工程学院 以下简称 本院 2017年硕士研究生复试工作将于2017年3月18日 2017年3月20日进行 具体安排如下
  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 大数据三道习题

    Lambda 架构设计图 Lambda体系架构的优点 鲁棒性和容错能力 由于批处理层被设计为追加式 即包含了自开始以来的整体数据集 因此该系统具有一定的容错能力 如果任何数据被损坏 该架构则可以删除从损坏点以来的所有数据 并替换为正确的数据
  • OpenCV源码编译xfeatures2d.VGG出错解决

    OpenCV源码编译xfeatures2d VGG出错解决 在使用OpenCV进行计算机视觉任务时 xfeatures2d模块是一个非常有用的工具 它提供了许多先进的特征检测和描述算法 其中之一是VGG算法 它是一种基于深度学习的图像描述算
  • Qt启动页多线程

    Qt启动页多线程 项目需要在Qt进入启动页之前加载一个大模型文件 同时要有一个页面用来提示用户加载状态 这里就需要用到多线程了 如果在单线程操作 要么需要等到文件加载完毕后才能显示等待页 要么干脆跳过了模型文件的加载 都是不符合需求的 我们
  • python中的且和或怎么表示_python中逻辑与或(and、or)和按位与或异或(&、

    按位与或 按照二进制进行逻辑运算 例如 数字换成二进制 各自位上的0 1进行逻辑运算 得到的结果转换为数字 3 2 0111 0010 0010 2 二进制逻辑运算规则 0 0 0 0 1 0 1 0 0 1 1 1 0 0 0 0 1 1
  • 软件测试复习(4)----测试用例的编写

    软件测试的编写有这几大不可缺少的元素 测试目标 测试环境 输入数据 步骤 期望结果 看例题 根据如下登录界面设计两个测试用例 设计两个测试用例 我们可以从正反两面设计 设计一个正确成功登录的用例 再设计一个登录失败的用例 测试用例1 测试目
  • 大数据与人工智能入门到放弃(01 回顾篇linux--网络,服务,克隆)

    前言 为了从头到尾的搞透 了解运用 大数据和AI 所以从今天开始 决定从头开始 从0开始回顾 到项目实战 在工作之余能抽出时间来完善大数据和AI的学习的过程 所以会从项目的搭建过程开始做起 每周至少3次更新博客 希望不会放弃 做这些记录的原
  • mybatis-plus之代码生成器07

    mybatis plus之代码生成器07 AutoGenerator 是 MyBatis Plus 的代码生成器 通过 AutoGenerator 可以快速生成 Entity Mapper Mapper XML Service Contro
  • 百度网盘无法登陆,二维码不显示,密码、验证码登陆显示‘网络异常’解决方法

    如图所示 二维码加载不出来 账号也不能登陆 但是其他软件一切正常 IE重置 防火墙 注册表 卸载重装 各种方法都无法解决 解决办法 连接手机WiFi后二维码加载出来 问题解决 所以换一个网登陆就可以了
  • linux 和 windows usb插拔侦测

    1 windowsU口探测事件 设备事件 WM DEVICECHANGE 首先要创建一个窗口 把设备事件和窗口关联 HWND h CreateWindow TEXT USB EVENT TEXT 0 0 0 0 0 0 0 GetModul
  • c语言经典程序合集

    1 c语言计算自然数之和 计算自然数和 include
  • SpringBoot+ Mybatis plus 配置多个数据源 (MySql)

    首先配置 yml 然后创建对应的 配置文件 然后复制下方的代码 进行粘贴 Configuration MapperScan basePackages com example chassis mapper chassis mapper sql
  • 关于一个栈的输入顺序是a,b,c,d,e则下列序列中不可能是出栈顺序

    经常在笔试的时候会看见这样类似的笔试题 就是关于一个栈的输入顺序是a b c d e则下列序列中不可能是出栈顺序 很多人都知道栈是先进后出 但是还是做好这道题 以一道题目为例给大家讲讲这道题目应该怎么做 题目 一个栈的输入顺序是a b c
  • 【Linux】深入理解文件操作

    文章目录 初次谈论文件 重温C语言文件操作 系统文件操作接口 open write read 再次谈论文件 文件描述符 文件描述符的分配规则 重定向 什么是重定向 重定向的本质 系统调用接口实现重定向 lt gt gt gt 初次谈论文件
  • Spring Boot中获取当前Request和Response实例的方法

    获取Request HttpServletRequest request ServletRequestAttributes RequestContextHolder getRequestAttributes getRequest 获取Res
  • uni-app在App平台如何实现升级更新?

    使用 uni app 开发 可将代码编译到iOS Android 微信小程序等多个平台 升级时也需考虑多平台同步升级 uni app发布为小程序的升级模式较简单 只需将开发完的代码提交小程序后台 待审核通过后用户将自动升级 App端的升级
  • STM32CubeIDE(串口)

    目录 一 轮询模式 1 1 配置USART2为异步模式 1 2 500ms发送一次消息 1 3 通信结果 1 4 串口控制LED 二 中断收发 2 1 开启中断 2 2 中断发送接收 2 2 1 中断发送只需要调用接口 2 2 2 中断接收