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

网站定制牛七科技安装wordpress+000

网站定制牛七科技,安装wordpress+000,凡科互动可信吗,山西seo推广系统title: HAL-DMA中断空闲接受不定长数据 tags: STM32HalCubemax 面对无规律长度的数据帧如何处理? 不定长数据接收可以使用每帧数据发送完成后会有一定的空闲时间"帧的时间间隔?" 如果你想每帧都要可以采用dma加空闲中断的方式空闲中断一次就是一帧数据…

title: HAL-DMA中断空闲接受不定长数据
tags:

  • STM32
  • Hal
  • Cubemax

  面对无规律长度的数据帧如何处理?

  • 不定长数据接收可以使用每帧数据发送完成后会有一定的空闲时间"帧的时间间隔?"
    如果你想每帧都要可以采用dma加空闲中断的方式空闲中断一次就是一帧数据接受完成再去做其它数据解析和其他业务出来不过需要我们注意的是这里面有个小坑

__HAL_UART_CLEAR_IDLEFLAG(&huart1);

我先说下如何处理:
if (__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)== SET)
{uint16_t temp = 0;__HAL_UART_CLEAR_IDLEFLAG(&huart1);HAL_UART_DMAStop(&huart1);temp = huart1.Instance->SR;temp = huart1.Instance->DR;temp = hdma_usart1_rx.Instance->CNDTR;Usart1type.UsartDMARecLen  = USART1_DMA_REC_SIE - temp;HAL_UART_RxCpltCallback(&huart1);
}

  这个函数网上说什么有bug还是啥

  •  temp = huart1.Instance->SR;

  •  temp = huart1.Instance->DR;

  • 还要读一下这两寄存器

    原理很简单就是打开空闲中断函数

    触发中断后dma接收

    接收完后搬到接收数组里面清除dma数组

    做业务逻辑处理 处理完就全部数组清除

    操作步骤如下:

1.开启中断函数

void EnableUsart_IT(void){__HAL_UART_ENABLE_IT(&huart1,UART_IT_RXNE);__HAL_UART_ENABLE_IT(&huart1,UART_IT_IDLE);__HAL_UART_CLEAR_IDLEFLAG(&huart1);HAL_UART_Receive_DMA(&huart1,Usart1type.Usart1DMARecBuffer,USART1_DMA_REC_SIE);}

2.触发中断后dma接收

void USART1_IRQHandler(void)
{/* USER CODE BEGIN USART1_IRQn 0 */if (__HAL_UART_GET_FLAG(&huart1,UART_FLAG_IDLE)== SET){uint16_t temp = 0;__HAL_UART_CLEAR_IDLEFLAG(&huart1);HAL_UART_DMAStop(&huart1);temp = huart1.Instance->SR;temp = huart1.Instance->DR;temp = hdma_usart1_rx.Instance->CNDTR;Usart1type.UsartDMARecLen  = USART1_DMA_REC_SIE - temp;HAL_UART_RxCpltCallback(&huart1);}/* USER CODE END USART1_IRQn 0 */HAL_UART_IRQHandler(&huart1);/* USER CODE BEGIN USART1_IRQn 1 */HAL_UART_Receive_DMA(&huart1,Usart1type.Usart1DMARecBuffer,USART1_DMA_REC_SIE); //再次打开DMA接收/* USER CODE END USART1_IRQn 1 */}

3.接收完后搬到接收数组里面清除dma数组

/* USER CODE BEGIN 1 */void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){if (huart->Instance==USART1){memcpy(&Usart1type.Usart1RecBuffer[Usart1type.UsartRecLen],Usart1type.Usart1DMARecBuffer,Usart1type.UsartDMARecLen);Usart1type.UsartRecLen=Usart1type.UsartDMARecLen;memset(Usart1type.Usart1DMARecBuffer,0x00,sizeof(Usart1type.Usart1DMARecBuffer));Usart1type.UsartRecFlag=1;}}

4.业务逻辑处理

我就简单的串口打印测试

/* Infinite loop *//* USER CODE BEGIN WHILE */while (1){if (Usart1type.UsartRecFlag==1 ){​    printf("re:%s,len%d\r\n",Usart1type.Usart1RecBuffer,Usart1type.UsartDMARecLen);​    memset(Usart1type.Usart1RecBuffer,0x00,sizeof(Usart1type.Usart1RecBuffer));​    Usart1type.UsartRecFlag=0;​    Usart1type.UsartRecLen=0;}/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */}

参考代码:就一积分 给我点

串口空闲中断cubemax任意长度数据资源-CSDN文库

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

相关文章:

  • 网站维护指导深圳几个区的分布图
  • 南昌做兼职的网站微网站不能分享朋友圈
  • 如何自己建设网站电子商务公司注册资金最低多少
  • 云服务器搭建个人网站html5企业网站开发
  • 营销型网站 开源程序泉州台商区建设局网站
  • 企业网站seo数据网络技术课程
  • 同城型网站开发网站模板怎么设计
  • 江汉网站建设WordPress关闭邮箱通知
  • 腾讯云怎么做网站做网站后台程序是怎么来的
  • 国际知名平面设计网站网络营销渠道具有交互性的特点
  • 同安网站建设环球影城可以寄存东西吗
  • vipkid网站开发团队有哪些网站建设工作室
  • 如何做网站搜索栏实现网站开发
  • 推荐微信网站建设免费cms建站五指
  • 快速建站教程兰州网站建设报价
  • 寿光网站建设定制jsp网站购物车怎么做
  • 备案公司网站建设方案书凡科网做的网站保存后就上传了吗
  • 网站的营销与推广wordpress批量修改文章内的代码
  • 做音乐网站之前的准备wordpress网站底部导航代码
  • 盐城网站优化seo推广的全称是
  • 绍兴 网站制作平面设计作品欣赏官网
  • 好的flash网站seo专业推广
  • 百度收录了我新网站的2篇文章了wordpress文档结构
  • 茶叶响应式网站自己服务器建设网站
  • 微电影网站源码xiazai三联网站建设价格
  • 哪个网站买域名便宜aspnet网站开发实例视频
  • python 网站开发神器网站推广方案及预算
  • 关键词挖掘工具站哪里有做胎儿dna亲子鉴定
  • 淘宝客可道cms网站建设网站建设html的好处
  • 建设个人网站用什么软件好找网站建设