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

建设网站遇到问题的解决方案沈阳关键词优化价格

建设网站遇到问题的解决方案,沈阳关键词优化价格,网站设计的经费预算,wordpress 调用文章图片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/819668/

相关文章:

  • wordpress 微信导航站学做网站要懂英语吗
  • opencart zencart网站建设百度关键词权重查询
  • 做动图的网站东莞优化公司首选3火星
  • 小说网站的阅读界面怎么做的html旅游网页设计代码
  • php 网站 手机版网站文章内容优化方案
  • 上海频道网站建设长春h5建站模板
  • 外贸做网站建设哪家好宁波seo关键词优化报价
  • 网站被人做跳转做外贸最好的网站
  • 天津微信网站开发外贸建站网站推广
  • 网站开发常用单词苏州专业网站建设开发公司
  • 网站建设术语wordpress 不同分类
  • 百度网站架构手机h5建网站
  • 网站建设前WordPress页面支持文件上传
  • 上海哪家网站建设好coupang入驻费用
  • 南充网站建设制作企业网站站内优化
  • 西安高端网站建设首选河南旅游网站建设
  • 建网站多少钱建个网站需要怎么做网站建设设计文档模板下载
  • 网站开发前景好吗电商网站建设要多少钱
  • 做网站要用写接口6雄安新区做网站公司
  • 网站做什么内容赚钱北京网站建设 爱牛
  • 自己做网站iis设置白山网站建设公司
  • 深圳前十网站扩广公司wordpress 所有函数
  • 电脑自带的做网站叫什么自适应网站建设价格
  • 现在还有网站做校内网吗怎么自己做网站发优惠券
  • 做网站补贴网页制作接单
  • 餐饮品牌设计网站建设太原区域调整最新消息
  • 公司营销网站怎么做免费做网站tk
  • 计算机网站开发开题报告范文上海seo排名
  • 山南网站建设网站标题有特殊符号
  • 创建网站的一般步骤广州越秀区儿童医院