当前位置: 首页 > 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/199819/

相关文章:

  • 网站 整站 抓取商城类网站设计制作
  • 湛江市企业网站seo点击软件莱芜在线论坛莱芜一中李念学
  • 湖南建设银行宣传部网站男和女做暖暖网站
  • 媒体网站开发购物网站开发 英文文献
  • vs2013网站开发教程网站制作 建站
  • 吉林市做网站的公司哪家好室内设计师联盟账号
  • 个人两字印章在线制作网站网页制作公司列举自己的优势
  • ps网站切图教程广州短视频代运营公司
  • 网站举报后还是没封掉平台网站建设协议
  • 网站不备案会有什么影响兰州市建设局网站
  • 南宁网站建设代理wordpress最新版
  • 网站开发的pc或移动端外国黄冈网站推广软件
  • ppt可以做网站吗wordpress新建页面没有内容
  • 网站建设公司怎么做郑州建设信息网可以领证书吗
  • 爱情表白网站制作室内设计学校哪些
  • 做网站,好苦逼百度获客平台
  • 手机公司网站建设比较好的wordpress 搜索引索
  • 海东市公司网站建设辽宁省企业信息系统
  • 龙岗做网站公司szaow中国国企500强名单
  • 寻找手机网站建设公众号怎么开通视频号
  • 旅游的网页设计模板windows清理优化大师
  • 虚拟主机 域名 和网站关系wordpress 中 水印
  • 幻灯片网站源码wordpress 幻灯片手机端字体大小
  • 公司门户网站及oa系统建设的请示最全的提交网站入口大全
  • 网站qq临时会话代码德阳网站建设推广
  • 百度快照 直接进入网站10_10_设计公司网站设计
  • 品牌百度网站建设外包网站有哪些
  • 网站开发的研究背景广州网站建设哪家便宜
  • 佛山医疗网站建设苏州学校网站建设
  • 建设厅网站怎么打印不出来wordpress 必备