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

单位网站建设意见建议js网站计数器代码

单位网站建设意见建议,js网站计数器代码,网站建设步骤详解视频,wap页面是什么文章目录 前言一、串口空闲中断二、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/830811/

相关文章:

  • 常见的电子商务网站网址网站转移空间备案是不是就没有了
  • 南通优化网站排名建游戏网站
  • 江苏省交通建设局网站首页成都市房产管理局官网
  • 彩票的网站怎么做备案网站可以做卡盟么
  • 湖南门户网站设计公司微信微网站教程
  • 个人网站免费制作wordpress 用户密码
  • 揭阳手机网站建设专业搜索引擎seo服务商
  • 网站项目建设流程帝国cms 网站地图标签
  • 西部数据网站管理助手v3.0dw做的上传网站打不开
  • 网站备案关站双公示网站专栏建设
  • 品牌网站建设工作室响应式网页制作教程
  • 北京网站备案核验单南京门户网站制作
  • 济阳网站建设公司网站移动端适配怎么做
  • 网站建设需求怎么提沧州建设工程信息网
  • 微信端的网站开发pythonapp软件定制研发
  • 南宁企业网站制作模板公众号平台小程序
  • 石家庄网站建设案例tk免费域名注册网站
  • 如何让我们的网站新闻被百度新闻收录珠宝购物网站的建设
  • 济南网站建设推荐q479185700上快甘肃省两学一做专题网站
  • 绵阳市城乡建设和规划局网站环球旅行卡怎么用
  • 深圳交易网站建设个人博客网站建设预算
  • 做网站互联互通免费登记照制作app
  • 怎样维护公司网站烟台专业做网站公司有哪些
  • php 外贸商城网站建设定制网站平台的安全设计
  • 康桥网站建设网店logo设计图片免费
  • 常州网站建设哪儿好薇注册网站费用
  • 网站备案正常多久手机购物网站模板
  • 任务网站建设全球最新数据消息
  • 做外贸网站需要营业执照wordpress新建页面是空白的
  • 网站加搜索框广州有什么好玩的景点