你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32H7432 串口采用DMA方式接收不定长数据重复问题

[复制链接]
mls 提问时间:2019-2-28 11:40 /
大家好:
        现在我调试dma串口时,接收的数据是重复的,发不同数据会有重复在里面,是u不是要清除buffer,百度各种方法无法实现。
void u_uart_dma_receive_idle(UART_HandleTypeDef *huart, uint8_t index)
{
        if((__HAL_UART_GET_FLAG(huart, UART_FLAG_IDLE) != RESET))
        {
                __HAL_UART_CLEAR_IDLEFLAG(huart);
                UartRawPack[index-1]->len = UART_MAX_LEN - ((DMA_Stream_TypeDef*)huart->hdmarx->Instance)->NDTR;
                //Send Data to queue here.
                if(UartRawPack[index-1]->len > 0){
                        u_uart_dma_RxCpltCallback(huart, UartRawPack[index-1]);
                }
                HAL_UART_DMAStop(huart);
                //HAL_UART_Transmit_DMA(huart, UartRawPack[index-1]->Data, UartRawPack[index-1]->len);
                HAL_UART_Receive_DMA(huart, UartRawPack[index-1]->Data, UART_MAX_LEN);
        }
}

收藏 评论7 发布时间:2019-2-28 11:40

举报

7个回答
mls 回答时间:2019-2-28 11:45:25
mls 回答时间:2019-2-28 11:45:45
没人么?
mls 回答时间:2019-2-28 11:47:07
大神在哪?
mls 回答时间:2019-2-28 11:52:51
现象如图
微信图片_20190228115031.png
微信图片_20190228115031.png
ikxlf 回答时间:2019-2-28 17:15:57
发的数为啥和接收的不一样
mls 回答时间:2019-2-28 19:20:52
搞定了,是打开了cache,开dma要配置mpu。
/* Configure the MPU attributes as Device not cacheable
     for UART DMA descriptors */
  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
  MPU_InitStruct.BaseAddress = 0x38000000;
  MPU_InitStruct.Size = MPU_REGION_SIZE_64KB;
  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
  MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
  MPU_InitStruct.Number = MPU_REGION_NUMBER3;
  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
  MPU_InitStruct.SubRegionDisable = 0x00;
  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;

  HAL_MPU_ConfigRegion(&MPU_InitStruct);

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2 自力更生

查看全部评分

小坦克 回答时间:2023-12-13 19:57:52

mls 发表于 2019-2-28 19:20
搞定了,是打开了cache,开dma要配置mpu。
/* Configure the MPU attributes as Device not cacheable
...

这个是怎么解决的,是打开cache,还是关闭cache,我目前发送两包不同的数据到串口,接收到的一包数据会有这两个包的内容,感觉数据被覆盖了

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版