当前位置: 首页 > news >正文

网站证书打印格式不正确找地推平台

网站证书打印格式不正确,找地推平台,有域名了 怎么做网站,兰州网站推广公司文章目录 前言一、串口空闲中断二、DMA空闲中断接收不定长数据实现思路三、STM32Cubemx配置DMA空闲中断接收不定长数据四、代码编写总结 前言 本篇文章给大家讲解一下DMA串口空闲中断接收串口不定长数据,之前我们也是讲解过串口接收不定长数据的,那么本…

文章目录

  • 前言
  • 一、串口空闲中断
  • 二、DMA+空闲中断接收不定长数据实现思路
  • 三、STM32Cubemx配置DMA+空闲中断接收不定长数据
  • 四、代码编写
  • 总结


前言

本篇文章给大家讲解一下DMA+串口空闲中断接收串口不定长数据,之前我们也是讲解过串口接收不定长数据的,那么本篇文章的话将使用DMA来接收不定长数据。

一、串口空闲中断

串口空闲中断是指在串口接收到数据后,在数据的传输结束之后,在一段连续的空闲时间内没有接收到新数据时触发的中断。具体来说,串口空闲中断会在以下情况下触发:

1.数据传输结束: 当串口接收到一个完整的数据帧后,包括起始位、数据位、校验位和停止位,数据的传输结束。

2.连续空闲时间: 在数据传输结束后,如果在一段连续的时间内(通常是一个字节的时间,即字符间的时间间隔),串口没有接收到新的数据,那么就会产生空闲中断。

串口空闲中断的触发时机提供了一个机会来检测数据帧的接收是否完整,并且在数据帧之间的间隙中执行一些必要的操作,比如处理接收到的数据、清理缓冲区或者进行其他后续处理。这种机制在串口通信中非常重要,可以确保数据的准确传输和处理。

二、DMA+空闲中断接收不定长数据实现思路

使用DMA(Direct Memory Access,直接内存访问)结合串口空闲中断可以实现串口接收不定长数据的主要原因是提高了数据接收的效率和灵活性。

在传统的串口接收数据方式中,通常是通过串口中断来实现数据接收。但是当接收大量数据或者需要处理高速数据时,使用中断方式会导致CPU频繁地响应中断,影响系统的实时性和效率。

而使用DMA可以将串口接收到的数据直接存储到内存中,减轻了CPU的负担,提高了系统的性能。DMA能够在不需要CPU干预的情况下,直接在外设和内存之间传输数据,大大提高了数据传输的效率。

串口空闲中断则可以用来标志一帧数据的接收完成。当串口接收到一帧完整的数据后,传输结束,串口会进入空闲状态。利用空闲中断可以确定一帧数据的长度,从而在DMA接收完一帧数据后,触发空闲中断,处理接收到的数据,清理缓冲区,并准备接收下一帧数据。

结合DMA和串口空闲中断,可以实现高效地接收不定长数据。DMA负责高速数据的传输,减少了CPU的负载,而串口空闲中断用于标志数据帧的接收完成,提供了灵活性和准确性。这种组合使得系统能够高效地处理不定长数据的接收,同时保证了系统的实时性和性能。

三、STM32Cubemx配置DMA+空闲中断接收不定长数据

添加DMA接收的功能:

DMA接收是把外设发来的数据保存到内存中来,所以是Peripheral To Memory。
其他STM32Cubemx的配置大家可以看上一篇文章:DMA发送
在这里插入图片描述

四、代码编写

1.首先需要先使能 串口接收空闲中断函数

函数原型:

HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

函数参数:

huart:指向 UART_HandleTypeDef 结构体的指针,用于指定要配置的串口。
pData:指向存储接收数据的缓冲区的指针。
Size:要接收的数据的字节数。

函数返回值:

返回 HAL_StatusTypeDef 类型的值,表示函数执行的状态。可能的返回值包括 HAL_OK(成功)和其他错误代码,如 HAL_ERROR。

函数作用:

这个函数用于配置串口接收,使其能够在接收到数据后等待空闲中断(IDLE interrupt)来标志数据帧的接收完成。
一旦串口接收到完整的数据帧,即收到停止位后,等待一段连续的空闲时间,即在一个字节的时间内没有接收到新数据,串口会产生空闲中断(IDLE interrupt),从而触发回调函数或中断服务例程,标志着一帧数据的接收完成。

函数调用流程:

在调用该函数后,串口会开始接收数据,并等待空闲中断的触发。
一旦接收到完整的数据帧,并且在一段连续的空闲时间内没有接收到新数据,串口会触发空闲中断。
在空闲中断触发后,可以在空闲中断的回调函数或者中断服务例程中进行数据处理,如拷贝接收到的数据到指定的缓冲区,并进一步处理或者通知应用程序。

2.编写中断回调函数

当触发串口空闲中断时会调用到void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)。这个回调函数。

3.完整代码编写

在这个代码中我们在串口助手中发送LED ON和LED OFF来控制LED灯的打开和关闭。LED ON和LED OFF为不同长度的数据,使用普通的串口接收方法来接收这个长度不定的数据是比较复杂的,现在我们可以使用DMA+空闲中断接收来解决这个问题。

uint8_t Rx_data[100] = {0};//保存接收到的数据//空闲中断回调函数
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{if(huart->Instance == USART1){if(strstr(Rx_data, "LED ON") != NULL){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);}else if(strstr(Rx_data, "LED OFF") != NULL){HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);}HAL_UARTEx_ReceiveToIdle_IT(&huart1, Rx_data, 100);}		
}//接收到100字节会调用接收完成中断回调函数
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1){HAL_UARTEx_ReceiveToIdle_IT(&huart1, Rx_data, 100);}
}HAL_UARTEx_ReceiveToIdle_IT(&huart1, Rx_data, 100);//开启接收功能

总结

本篇文章就讲解到这里,大家也可以自己写代码实际操作一下。

http://www.yayakq.cn/news/673855/

相关文章:

  • 网站首页flash模板做网站 多少人
  • 网站建设原创北京网站建设公司知乎
  • 企业高端网站南京铁路建设网站
  • 制作网站river网站开发技术语言
  • 专业高端网站设计首选微信商城怎么开发
  • 什么网站系统做的最好wordpress如何去除页眉部分
  • 海淀网站设计公司寻找赣州网站建设
  • 织梦搭建网站教程国内有实力的软件开发公司
  • 青岛低价网站建设广州建设网站的公司
  • 新款手机2023款排行榜杭州优化公司多少钱
  • 做app护肤网站变身小说网址wordpress
  • php网站开发教程网seo软件服务
  • wordpress主题网站模板广州市越秀区建设局官方网站
  • jsp网站开发中英文页面切换手机网页显示不全
  • 西安 网站建设 1阳光城最新消息
  • 做受视频播放网站网站开发的常见编程语言有哪些
  • 中国数据统计网站wordpress 分页标题
  • 建设能源官方网站电子商务网站建设考卷
  • 站长工具高清无吗网络规划设计师教程pdf
  • 企业能建站吗郑州专门做喷绘安装的网站
  • 建设机械网站公司简约网站模板html
  • 网站建设开发哪个好学应届生招聘去哪个网站
  • cms网站开发实验报告服务营销策划方案
  • 网站推广的优势天眼查河南建设网站公司
  • 那种导航网站福田专业做网站公司
  • 做钓鱼网站要具备什么做网站的的价格
  • 台州企业网站建设公司国外推广网站有什么
  • 五屏网站建设免费推荐大全app下载
  • 程序代码优化网站查大学专业网站
  • 网站发布工具长沙装修公司招聘网