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

网站开发公司可行报告微营销工具

网站开发公司可行报告,微营销工具,施工企业负责人是指企业的,可以用自己的电脑做网站主机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/662868/

相关文章:

  • 网站内图片变换怎么做网络营销培训
  • 奇月网络官方网站苏州网站设计公司排名
  • 做关键词优化需要修改网站标题房地产项目网站建设
  • 站酷设计官网中国建设部
  • 济南公司建设网站品牌加盟网
  • 设计师效果图网站呼和浩特市做网站的企业
  • 征婚网站开发互联网制作公司
  • 网上做名片的网站做百度网站一般多少钱
  • 佛山外贸网站建设特色建设网站接活
  • 网站的营销策略住房和城乡建设部网站政策发布
  • 如何在手机上做自己的网站重庆做网站公司贴吧
  • 网站建设方案解救苏州久远网络从事网络销售都有哪些平台呢
  • 网站基础建设和管理暂行办法企业网站导航栏高度
  • 常见网站类型网站显示建设中页面
  • 优化推广网站排名中山做网站排名
  • 网站建设业务员培训易车网汽车之家
  • asp个人网站宿州企业网站推广
  • 电脑怎么做网站网推怎么推广
  • 可以加外链的网站吉安工商注册官方网站
  • 英文企业网站建站网站制作基本规则
  • 热门网站建设代理店招搜索栏在那个网站上可以做
  • 宜都网站seo顺义建设网站
  • 怎样开发网站建设汕头市国外网站建设公司
  • 做网站的软件电子微信公众号推广创意语
  • 深圳罗湖网站建设深圳网站建设排名
  • 做网站收费多少上海高端网站开发公
  • 营销型企业网站的策划方案东莞网站制作的方案
  • 商城网站建设合同网页设计与网站建设课设
  • 关于手机的网站有哪些内容吗互联网软件开发是什么
  • 设计找图网站数字营销1+x网站