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

学做面包的网站/yandex网站推广

学做面包的网站,yandex网站推广,免费网站做seo,端 传媒网站模板1、概念上的误解我们知道DMA传输是在DMA请求下,将数据从源端传输到目的端。常有人将DMA请求跟DMA的源端或目的端混为一谈。这里,我们可以将DMA传输类比成收发快递,发件方即DMA源端,收件方即DMA目的端,而DMA请求端就是呼…

87f246dd242bccc2917c94cee3595235.png

1、概念上的误解

我们知道DMA传输是在DMA请求下,将数据从源端传输到目的端。

常有人将DMA请求跟DMA的源端或目的端混为一谈。这里,我们可以将DMA传输类比成收发快递,发件方即DMA源端,收件方即DMA目的端,而DMA请求端就是呼叫快递的人。这个呼叫快递的人可能是发件方、也可能是收件方,还可能是另外第三方。比方你要发个快递,叫快递的人可能是公司的前台美眉。

具体到我们STM32应用,比方通过DMA将内存数据传输给UART DR寄存器发送出去,源端是存储相关待发送数据的内存区域,目的端是UART DR数据寄存器。至于DMA请求,可以是UART发送空事件【TXE】,也可以是定时器的某个周期性触发事件等。

在STM32各个系列的参考手册的DMA章节部分,都有类似如下的DMA请求映射表。表格里填写的都只是针对各个DMA传输流的DMA请求事件,并非一定是源端或目的端。当然,不排除作为源端或目的端同时又担当DMA请求角色的可能。

04152d4b7c5cdeb835b2f9fc22d2d7ca.png

2、配置上容易忽视的问题

我们在做DMA配置时,比较容易忽视两个小问题。第一个就是源端和目的端的数据宽度的定义问题,除了考虑配置满足实际需要的数据宽度外,还要注意将源端、目的端二者数据访问宽度配置一致。不然的话,往往会导致些奇怪的问题。

a64c99b813f01af1458689293b3de3dc.png

还有,就是要注意DMA的传输方向别弄错了,到底是PERIPHERIAL到MEMORY还是MEMORY到PERIPHERIAL或者说是Memory到Memory要配置正确。尤其是在用CubeMx配置时,这里有个默认配置是PERIPHERIAL到MEMORY。如果说你的真实意图根本不是从PERIPHERIAL到MEMORY,而你无意中使用了这个默认配置,结果可想而知,DMA传输根本没法正常运行。我前两天就被这个地方折腾过,用定时器触发DMA输出任意周期性的PWM波,白白多耗了近2个小时。此时,在调试环境里想强制使能相关DMA Stream的传输都不行,整个就不工作。

101adab285ee75b94e4a65295a501999.png

类似配置方面的小细节要多加注意,忽略了那些往往会累死人。

3、DMA传输作用范围问题

前面将DMA传输类比成发快递,发快递时,快递公司一般也没法无处不到,那DMA传输也有同样的问题,各个DMA模块往往有各自的服务范围。比方以下图STM32F4的一个框图为例。DMA1可以轻松访问右边黄色标注出来的外设,DMA2可以访问左边分数标注出来的各个外设。如果我们在程序里的DMA配置部分,将DMA1的源端或目的端安排为左边的粉色标注出来的外设、或者将DMA2的源端/目的端安排为右边的黄色标注出来的外设,结果一定会让你失望。因为你期望它访问它到达不了的地方。

e881e7cff0752488234169f99349f182.png

这个地方比较隐蔽,因为我们在代码里只是根据DMA请求自行指定源端和目的端,有时会忽视所用DMA的服务范围。前面提过,各个STM32系列参考手册里DMA章节部分都有明确的基于各路DMA传输流的DMA请求事件源的描述和展示,但并未指定基于各个DMA请求的源端或目的端。所以我们在基于某个DMA请求来自指定源端或目的端时,一定注意你安排的源/目的端是不是该DMA可以到达的地方,具体要结合手册中功能框图和总线访问架构图。

比方说,下图是STM32F7系列一个总线访问框架图。不难看出,DMA1是访问不了AHB1外设和AHB2外设的。当然,DMA2访问AHB1外设和AHB2外设又没有问题。

d76658a8360c1b7d281c5ce5a75c10fc.png

再比方,下图是STM23H7系列一个总线访问框架图,其中BDMA是没法访问D1域或D2域的外设及内存的。D2域的DMA1/DMA2没法访问D1域中的DTCM/ITCM。D1域中的MDMA没法访问D2域中的AHB2外设。

a53e5e17cb9dd7a507048761c4482440.png

关于这些总线框架性的东西,在我们的STM32应用中也要多加关注。比方有时在做通信数据传输时发现,使用中断没问题,用DMA就失败。这时不妨查看下DMA访问的外设或内存区域到底是不是它所能访问得到地方,如果不是就需要适当调整下。

4、跟DCache有关的问题

该问题往往跟我们使用带cache的M7内核的STM32F7或STMH7系列芯片有关,使用DMA传输时有时会遇到DMA访问到的数据不是实时的正确数据。这往往可能是因为DMA要访问的内存区域,跟CPU是共享的,同时又开启了相关区域的D-Cache属性,即CPU访问该内存区域数据时使用D-Cache,将内存数据拷贝到D-Cache。之后,CPU访问相关数据时往往只在Cache里进行。

比如下面的一个基于STM32F7芯片的经典示例。首先CPU从flash里拷贝128字节常量数据到片内SRAM,然后通过DMA将SRAM里的这128字节数据拷贝进DTCM内存区。最后通过CPU将DTCM里的数据跟FLASH里的原始数据进行比较,这时会发现比较结果是二者内容根本不一致。

这是因为开启了SRAM的回写的Cache属性,第一次将数据从flash拷贝进SRAM过程中,数据还没有真正写进SRAM,还只是放在了Cache。当我们通过DMA将SRAM相关区域的数据拷贝进DTCM内存区时,并没有将真正的来自FLASH区的数据拷贝过去,导致最后的数据比较失败。

0bb8a9d168404e18bdb6475ad0f0b9f4.png

像这种情况下,我们可以有几种方案来解决这个问题:
1、在做将数据从SRAM拷贝到DTCM区之前,先做个D-Cache的清除操作【SCB_CleanDCache()】,将D-Cache里的数据写回到实际存储区SRAM里。

2、我们可以通过MPU设置SRAM区域的MPU属性,将其回写的Cache属性【writeback】调整为透写的Cache属性【writethrough】。

3、配置SRAM的MPU属性为shareable共享属性,令CPU访问它时不使用D-Cache.

4、将所有涉及到具有Cacheable可缓存属性的存储区域,都使用透写策略。这点可以通过配置M7内核相关控制寄存器位实现。

再举个实例,使用STM32F7芯片做UART的通信数据接收,UART接收到数据后触发DMA,DMA将数据从UART_DR寄存器拷贝到片内SRAM,CPU再从相应的SRAM区取走数据送到某LCD显示设备显示输出。这时,你很可能会发现一个奇怪的现象,显示设备输出的数据永远都时第一次接收到的数据,不管UART的发送方任何改变发送数据,显示出来的数据就是不变,只是跟第一次发送出来的数据相比是正确的。这是怎么回事呢?

99bb018030143f6141cc1b49e0f8fad9.png

原因是因为开启了SRAM的D-Cache属性,CPU第一次从SRAM读取数据后,同时又将数据放到D-Cache里,后面再来读取SRAM相应地址数据时并没有前往SRAM,而是直接区D-Cache里提取数据,从而导致每次显示出来的数据总是第一次接收到的数据,尽管UART那边后续接收的数据在不停变化,但并没有对D-Cache里的数据做同步更新。

这时我们可以在CPU读取SRAM数据前做个D-cache的清除操作,让实际存储器数据与D-Cache里数据同步更新,或者做D-Cache的失效操作,让CPU无视D-cache直接从SRAM区读取数据,或者说通过MPU配置禁用该SRAM区的Cache属性。当然,最终你选用哪种策略,得结合你的实际应用来定。

好,先聊到这里。其中第3点、第4点一定要阅读STM32手册,尤其芯片的功能框图和总线架构图。罗列上面这些,权作提醒,祝君好运!

=======***********************=======

往期话题链接:

1、STM32定时器单脉冲输出模式话题

2、一个跟Cache有关的通信应用异常话题

3、关于STM32F0 多通道ADC的DMA传输

4、STM32F0 IAP应用中不同代码区的跳转话题

5、一个关于STM8中断应用异常的话题

982edd86297de5499dcf3091cbb9d4ae.png

http://www.lbrq.cn/news/1407961.html

相关文章:

  • 桐庐做网站/最近时事新闻热点事件
  • 手机端网站设计制作案例/关键词优化技巧有哪些
  • 石家庄做网站建设的公司排名/网络营销策划方案怎么写
  • 关于做网站/长沙做网站推广
  • 仿网站出售/电商线上推广渠道
  • 网站建设中模版/广告资源网
  • 小企业网站建设哪家便宜/图们网络推广
  • 做宣传网站买什么云服务器/开发一个app需要多少钱?
  • 深圳有做网站的公司660元/美国站外推广网站
  • 公司网络推广怎么做/seo系统培训课程
  • 做网站费用怎么付/推广手段和渠道有哪些
  • 绍兴做网站哪家好/全球新闻最新消息
  • 石家庄小学网站建设/谁有推荐的网址
  • 企业网站建设之域名篇/推广策划方案怎么写
  • inurl 湖北网站建设/惠州网络营销
  • iview可以做门户网站吗/正规手游代理平台有哪些
  • 广州网站优化服务/cilimao磁力猫
  • 动态网站建设网/体验式营销案例
  • 网站制作哪个软件/搜索引擎有哪些软件
  • 网站留言板模板/问卷调查网站
  • 购物网站开发技术/手机怎么做网站免费的
  • 加盟营销型网站制作/互联网推广话术
  • 网站中文字内容左右切换的js代码/游戏搜索风云榜
  • 自己如何做网站建设/做网络销售感觉自己是骗子
  • joomla 网站建设/百度网址大全官网旧版
  • 帝国cms登录网站/全网营销系统怎么样
  • 徐州seo推广/长春seo优化
  • 郑州新闻网官网/seo服务公司
  • 服装公司 网站怎么做/网络营销师官网
  • 平乡县网站建设平台位置/电商网站开发
  • JVM垃圾回收(GC)深度解析:原理、调优与问题排查
  • 【SpringBoot】Dubbo、Zookeeper
  • [免费]基于Python的全国气象数据采集及可视化大屏系统(Flask+request库)【论文+源码+SQL脚本】
  • LAMP 架构部署:Linux+Apache+MariaDB+PHP
  • LeetCode 837.新 21 点:动态规划+滑动窗口
  • 软考 系统架构设计师系列知识点之杂项集萃(124)