HC32F460JETA使用串口DMA循环传输数据时遇到问题,只传输了一次就停止传输,如何解决??

news2024/9/25 2:32:04

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

问题描述

  HC32F460JETA使用串口DMA循环传输数据时遇到问题,只传输了一次就停止传输。固件版本是HC32F460_DDL_Rev3.2.0.zip,以下是DMA配置部分:

void DmaReconfigInit(void)
{
    stc_dma_reconfig_init_t stcDmaReconfigInit;
 
    DMA_ReconfigStructInit(&stcDmaReconfigInit);
    stcDmaReconfigInit.u32CountMode      = DMA_RC_CNT_SRC;
    stcDmaReconfigInit.u32SrcAddrMode    = DMA_RC_SRC_ADDR_RPT;
    stcDmaReconfigInit.u32DestAddrMode   = DMA_RC_DEST_ADDR_KEEP;
 
    DMA_ReconfigInit(CM_DMA2, DMA_CH0, &stcDmaReconfigInit);
 
    AOS_SetTriggerEventSrc(AOS_DMA_RC, EVT_SRC_DMA2_TC0);
 
    DMA_ReconfigCmd(CM_DMA2, ENABLE);
}
 
int32_t DMA_Config(uint16_t len,uint8_t *txbuf)
{
    int32_t i32Ret;
    stc_dma_init_t stcDmaInit;
    stc_dma_repeat_init_t stcDmaRepeatInit;
 
    /* DMA&AOS FCG enable */
    FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_DMA2, ENABLE);//TX_DMA_FCG_ENABLE
    FCG_Fcg0PeriphClockCmd(FCG0_PERIPH_AOS, ENABLE);
 
    /* USART_TX_DMA */
    DMA_StructInit(&stcDmaInit);
    stcDmaInit.u32IntEn = DMA_INT_DISABLE;//DMA_INT_ENABLE;
    stcDmaInit.u32BlockSize = 1UL;
    stcDmaInit.u32TransCount = len;
    stcDmaInit.u32DataWidth = DMA_DATAWIDTH_8BIT;
    stcDmaInit.u32DestAddr = (uint32_t)(&CM_USART1->TDR);
    stcDmaInit.u32SrcAddr = (uint32_t)txbuf;
    stcDmaInit.u32SrcAddrInc = DMA_SRC_ADDR_INC;
    stcDmaInit.u32DestAddrInc = DMA_DEST_ADDR_FIX;
    //stcDmaInit.u32TransferMode = DmaTransferModeCycle;
    i32Ret = DMA_Init(CM_DMA2, DMA_CH0, &stcDmaInit);
    if (LL_OK != i32Ret) while(1){}
 
    AOS_SetTriggerEventSrc(AOS_DMA2_0, EVT_SRC_USART1_TI);
    
    DMA_RepeatStructInit(&stcDmaRepeatInit);
 
    stcDmaRepeatInit.u32Mode     = DMA_RPT_BOTH;//DMA_RPT_SRC;
    stcDmaRepeatInit.u32SrcCount = 0;
    stcDmaRepeatInit.u32DestCount = 0;
 
    DMA_RepeatInit(CM_DMA2, DMA_CH0, &stcDmaRepeatInit);
    DmaReconfigInit();
    
    DMA_Cmd(CM_DMA2, ENABLE);
    DMA_ChCmd(CM_DMA2, DMA_CH0, ENABLE);
    DMA_TransCompleteIntCmd(CM_DMA2, DMA_INT_TC_CH0, ENABLE);
 
    AOS_SW_Trigger();
    USART_FuncCmd(CM_USART1, USART_TX, ENABLE);
    return i32Ret;
}

解决方案

  如下是上述问题的解决方案,仅供参考:

  在HC32F460JETA单片机上使用DMA进行串口循环传输数据时,遇到只传输一次就停止传输的问题,可能与DMA配置或触发机制相关。以下是一些排查和可能的解决方案:

1. 检查DMA传输完成中断

  • DMA只传输一次后停止,通常是因为传输完成中断触发了但没有再次配置或启动DMA。确认您在DMA传输完成后,重新配置并启用了DMA。
  • 可以在DMA传输完成中断回调函数中,手动重新配置和启动DMA。比如,重新设置DMA_ChCmd(CM_DMA2, DMA_CH0, ENABLE);,以便让DMA继续循环传输。

2. 确保DMA触发事件正确配置

  • 在DMA配置中,您使用了AOS_SetTriggerEventSrc(AOS_DMA2_0, EVT_SRC_USART1_TI);设置DMA的触发源。请确认这个触发源在每次发送完数据后都能被正确触发。
  • 试着替换或测试其他触发事件源,以确定USART的发送中断或事件是否能够正确地触发DMA。

3. DMA重复模式和重配置模式

  • DMA_RepeatStructInitDmaReconfigInit中,您配置了DMA的重复模式和重配置模式。
  • 确认stcDmaRepeatInit.u32Mode的设置是否适合您的应用需求。如果只是源地址重复且目的地址不变,确保DMA_RPT_SRC而不是DMA_RPT_BOTH可能更适合您的需求。

4. 重配置命令启用

  • 通过DMA_ReconfigCmd(CM_DMA2, ENABLE);启用DMA的重配置命令,确保每次传输完成后,DMA能够自动重新配置源地址或传输计数器,以便实现循环传输。

5. 增加Log调试信息

  • 可以在代码中添加调试信息(例如使用串口打印或LED指示)来监控DMA传输完成中断是否被触发,以及查看DMA配置是否被正确重新加载。

6. 确保数据缓存区持续有效

  • 确保txbuf数据缓存区在传输过程中没有被修改或销毁。如果缓存区内容被更改,DMA可能会遇到不可预见的行为。

代码调整示例

尝试在DMA传输完成中断中重新启动DMA:

void DMA_IRQ_Handler(void)
{
    if (DMA_GetTransCompleteStatus(CM_DMA2, DMA_INT_TC_CH0) == SET)
    {
        DMA_ClearTransCompleteStatus(CM_DMA2, DMA_INT_TC_CH0);
        // 重新配置并启动DMA
        DMA_ChCmd(CM_DMA2, DMA_CH0, ENABLE);
        AOS_SW_Trigger();
    }
}

总结

上面列出的步骤可以帮助您解决DMA循环传输数据的问题,尤其是配置和触发机制的正确设置非常重要。如果以上方法仍未解决问题,建议进一步检查芯片文档或联系HC32技术支持以获取更详细的帮助。

  希望如上措施及解决方案能够帮到有需要的你。

  PS:如若遇到采纳如下方案还是未解决的同学,希望不要抱怨&&急躁,毕竟影响因素众多,我写出来也是希望能够尽最大努力帮助到同类似问题的小伙伴,即把你未解决或者产生新Bug黏贴在评论区,我们大家一起来努力,一起帮你看看,可以不咯。

  若有对当前Bug有与如下提供的方法不一致,有个不情之请,希望你能把你的新思路或新方法分享到评论区,一起学习,目的就是帮助更多所需要的同学,正所谓「赠人玫瑰,手留余香」。

☀️写在最后

  如上问题有的来自我自身项目开发,有的收集网站,有的来自读者…如有侵权,立马删除。再者,针对此专栏中部分问题及其问题的解答思路或步骤等,存在少部分搜集于全网社区及人工智能问答等渠道,若最后实在是没能帮助到你,还望见谅!并非所有的解答都能解决每个人的问题,在此希望屏幕前的你能够给予宝贵的理解,而不是立刻指责或者抱怨!如果你有更优解,那建议你出教程写方案,一同学习!共同进步。

  ok,以上就是我这期的Bug修复内容啦,如果还想查找更多解决方案,你可以看看我专门收集Bug及提供解决方案的专栏《CSDN问答解惑-专业版》,都是实战中碰到的Bug,希望对你有所帮助。到此,咱们下期拜拜。

码字不易,如果这篇文章对你有所帮助,帮忙给 bug菌 来个一键三连(关注、点赞、收藏) ,您的支持就是我坚持写作分享知识点传播技术的最大动力。

同时也推荐大家关注我的硬核公众号:「猿圈奇妙屋」 ;以第一手学习bug菌的首发干货,不仅能学习更多技术硬货,还可白嫖最新BAT大厂面试真题、4000G Pdf技术书籍、万份简历/PPT模板、技术文章Markdown文档等海量资料,你想要的我都有!

📣关于我

我是bug菌,CSDN | 掘金 | InfoQ | 51CTO | 华为云 | 阿里云 | 腾讯云 等社区博客专家,C站博客之星Top30,华为云2023年度十佳博主,掘金多年度人气作者Top40,掘金等各大社区平台签约作者,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者;全网粉丝合计 30w+;硬核微信公众号「猿圈奇妙屋」,欢迎你的加入!免费白嫖最新BAT互联网公司面试真题、4000G PDF电子书籍、简历模板等海量资料,你想要的我都有,关键是你不来拿哇。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2162158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——STM32代码实现篇

STM32代码实现 开启本章节需要完成下方的前置任务: 点击跳转: 物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 目标 1.连接OneNET:STM32使用串口与ESP8266/01s连接发送…

基于Vue3组件封装的技巧分享

本文在Vue3的基础上针对一些常见UI组件库组件进行二次封装,旨在追求更好的个性化,更灵活的拓展,提供一些个人的思路见解,如有不妥之处,敬请指出。核心知识点$attrs,$slots 需求 需求背景 日常开发中,我们经…

PHP判断微信或QQ访问

PHP判断微信或QQ访问 若是微信或者QQ打开&#xff0c;提示图会覆盖网页&#xff0c;但网页功能仍在运行&#xff01; <meta name"viewport" content"initial-scale1, maximum-scale1, user-scalableno, widthdevice-width"><style> .top-gui…

leetcode第169题:多数元素

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;3 示例 …

OpenHarmony(鸿蒙南向)——平台驱动开发【ADC】

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 概述 功能简介 ADC&#xff08;Analog to Digital Converter&…

LOGO设计新革命:5款AI工具让你秒变设计大师(必藏)

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 你是否曾因设计一个既独特又专业的LOGO而感…

JUC高并发编程2:Lock接口

1 synchronized 1.1 synchronized关键字回顾 synchronized 是 Java 中的一个关键字&#xff0c;用于实现线程间的同步。它提供了一种简单而有效的方式来控制对共享资源的访问&#xff0c;从而避免多个线程同时访问同一资源时可能出现的竞态条件&#xff08;race condition&am…

【Linux网络 —— 网络基础概念】

Linux网络 —— 网络基础概念 计算机网络背景网络发展 初始协议协议分层协议分层的好处 OSI七层模型TCP/IP五层(或四层)模型 再识协议为什么要有TCP/IP协议&#xff1f;什么是TCP/IP协议&#xff1f;TCP/IP协议与操作系统的关系所以究竟什么是协议&#xff1f; 网络传输基本流程…

【openwrt】 libubox组件——ustream

文章目录 ustream 核心数据结构struct ustreamstruct ustream_buf_liststruct ustream_bufstruct ustream_fd ustream 核心APIustream_fd_initustream_uloop_cbustream_fd_read_pendingustream_fill_read ustream_write_pendingustream_writeustream_fd_write ustream 应用示例…

Python画笔案例-059 绘制甩曲彩点动图

1、绘制甩曲彩点动图 通过 python 的turtle 库绘制 甩曲彩点动图,如下图: 2、实现代码 绘制甩曲彩点动图,以下为实现代码: """甩曲彩点动图.py """ import time import turtlecs = [red,orange,

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总 当前的问题 图1:在VTAB-1k基准测试上&#xff0c;使用预训练的ViT-B/16模型&#xff0c;VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示&#xff0c;当给出大量提示时&#xff0c;VPT显示了性能的显著下降…

串口问题汇总:串口发送乱码,重定义使用printf ,输出顺序出错,缓存区思想,串口项目应用

1.c51使用串口出现顺序被覆盖的情况&#xff0c;也就是输出time 最后输出的却是te 这是因为你没有等待上一个数据发送就开始发送下一个数据就会导致数据篡位 2.c51想使用串口重定义使用printf 首先c51是自带stdio.h不需要像32那样点击 include lib选项&#xff0c;你直接改…

力扣958:判断二叉树是否为完全二叉树

给你一棵二叉树的根节点 root &#xff0c;请你判断这棵树是否是一棵 完全二叉树 。 在一棵 完全二叉树 中&#xff0c;除了最后一层外&#xff0c;所有层都被完全填满&#xff0c;并且最后一层中的所有节点都尽可能靠左。最后一层&#xff08;第 h 层&#xff09;中可以包含 …

体制内打工人收藏!5款AI写作工具,助你变成单位笔杆子~

对于初入体制内职场的新手或是日常任务繁重、难以抽身撰写文件的同事们&#xff0c;别再让加班的夜晚成为常态&#xff01;现在&#xff0c;就让我揭秘几个高效公文写作宝库&#xff0c;它们能助你迅速掌握公文写作的精髓&#xff0c;海量素材信手拈来&#xff0c;更有快速成文…

Elasticsearch、ik分词器、elasticsearch-head、Kibana的认识与安装

文章目录 elasticsearch安装elasticsearchIK中文分词器elasticsearch-headkibana elasticsearch Elasticsearch是一个基于Lucene的搜索服务器&#xff0c;也是属于NoSQL阵营的数据库。它提供了一个分布式多用户能力的全文搜索引擎&#xff0c;基于RESTful web接口提供给我们操…

2025年SEO策略:如何优化您的知识库?

如今很多人在遇到问题时都会求助于谷歌。谷歌已经成为提供解决方案不可或缺的工具。作为全球搜索引擎的巨头&#xff0c;拥有大量用户流量。这就是为什么确保您的产品和服务在谷歌搜索结果中排名靠前是至关重要的&#xff0c;如果您想获得更多的客户&#xff0c;SEO是一个非常关…

打造你的专属主题-VitePress保姆级教程

本篇为vitepress系列教程&#xff0c;在开始前&#xff0c;若还不了解vitepress的小伙伴可以看一下以往文章&#xff1a; 不敲一行代码&#xff01;助你快速搭建属于自己的官网博客&#xff01;-VitePress保姆级教程 文章目录 VitePress主题配置准备自定义主题配置标题配置图标…

如何用AI实现自动更新文章?(全自动更新网站)

AI的诞生确实给我们的生活和工作都带来了很大的改变&#xff0c;从我自身来讲&#xff0c;也渐渐习惯了遇到事情先问问AI&#xff0c;不管是翻译、专业性问题、PPT制作、总结写作这些&#xff0c;确实帮我迅速理清了思路&#xff0c;也可以有很多内容的借鉴。 作为一个业余爱好…

滑动窗口算法第一弹(长度最小的子数组,无重复字符的最长子串 最大连续1的个数III)

目录 前言 1. 长度最小的子数组 &#xff08;1&#xff09;题目及示例 &#xff08;2&#xff09;暴力解法 &#xff08;3&#xff09;优化 2. 无重复字符的最长子串 &#xff08;1&#xff09;题目及示例 &#xff08;2&#xff09;暴力解法 &#xff08;3&#xff…

深度学习:卷积神经网络CNN

目录 一、什么是卷积&#xff1f; 二、卷积神经网络的组成 1. 卷积层 2. 池化层 3. 激活函数 4. 全连接层 三、卷积神经网络的构造 四、代码实现 1.数据预处理 2.创建卷积神经网络 3.创建训练集和测试集函数 4.创建损失函数和优化器并进行训练 一、什么是卷积&…