首页 > 其他分享 >DMA问题

DMA问题

时间:2024-01-13 22:12:25浏览次数:27  
标签:count DMA arr 问题 Init DMA1 InitStructure

问题1

主函数:

 1 #include "stm32f10x.h"                  // Device header
 2 #include "Delay.h"
 4 #include "DMA.h"
 5 #include "Serial.h"
 7 
 9 uint8_t arr[3];
10 int main(void)
11 {
12     int a=0;
13     /*模块初始化*/
14     OLED_Init();        //OLED初始化
15     Key_Init();            //按键初始化
16     Serial_Init();        //串口初始化
17     MyDMA_TX_Init(DMA1_Channel4,(uint32_t)&USART1->DR,(uint32_t) arr,3);
18 
19         
20     arr[0]=0x01;
21     arr[1]=0xFA;
22     arr[2]=0x02;
23     SRAM_USART1_Transfer();    
24 
25     arr[0]=0x03;
26     arr[1]=0xFB;
27     arr[2]=0x04;
28     SRAM_USART1_Transfer();    
29 
30 }
 1 #include "DMA.h"
 2 
 3 uint16_t _count;
 4 
 5 void MyDMA_TX_Init(DMA_Channel_TypeDef* DMA_CHx,uint32_t PeripheralAddr,uint32_t MemoryAddr,uint16_t count)
 6 {
 7     _count=count;
 8     RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);    
 9     
10     DMA_InitTypeDef DMA_InitStructure;
11     
12     DMA_InitStructure.DMA_PeripheralBaseAddr=PeripheralAddr;
13     DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
14     DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;
15     
16     DMA_InitStructure.DMA_MemoryBaseAddr=MemoryAddr;
17     DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
18     DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;
19     
20     DMA_InitStructure.DMA_BufferSize=count;
21     DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;
22     DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;
23     DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;
24     DMA_InitStructure.DMA_Priority=DMA_Priority_High;
25     DMA_Init(DMA_CHx, &DMA_InitStructure);
26     
27 //    DMA_Cmd(DMA1_Channel4,ENABLE);
28     USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //使能串口1的DMA发送
29 }
30 
31 void SRAM_USART1_Transfer(void)
32 {
33     DMA_Cmd(DMA1_Channel4,DISABLE);//失能DMA通道
34     DMA_SetCurrDataCounter(DMA1_Channel4, _count);//将传输计数器赋值
35     DMA_Cmd(DMA1_Channel4,ENABLE);//使能DMA
36     
37     while(DMA_GetFlagStatus(DMA1_FLAG_TC4)==RESET);//等待DMA转运完成
38     DMA_ClearFlag(DMA1_FLAG_TC4);         
39 }

黄色的地方取消注释:

初始化后根本没有程序触发DMA搬运数据,为什么会有00的出现

问题2

1         Serial_SendByte(0x01);
2         arr[0]=0xFA;
3 //        Delay_ms(500);
4         SRAM_USART1_Transfer();
5         Serial_SendByte(0x02);

当我把黄色的注释掉的时候DMA转运的数据没有显示到串口上

我查了一下DMA不会在你让它转运数据的时候立刻转运数据,也就是DMA想转运数据的时候串口数据寄存器被占了

 STM32利用DMA发送无法正确发送数据的问题_stm32f hal usart dma 发送 数据 不正确-CSDN博客

标签:count,DMA,arr,问题,Init,DMA1,InitStructure
From: https://www.cnblogs.com/Sandals-little/p/17963078

相关文章

  • 解决 DELPHI 中执行外部命令出现屏幕一闪的问题的方法
    解决DELPHI中执行外部命令出现屏幕一闪的问题的方法有的时候我们在DELPHI中使用ShellExecuteEx(exInfo:TShellExecuteInfo)函数执行一些外部命令,但会出现,屏幕一闪的问题,解决方法如下:设置exinfo.nShow:=SW_HIDE;//隐藏命令执行的窗口,不会出现屏幕一闪的情况在exinfo......
  • Maven常见问题与原理技巧
     背景目前项目中主流的都是使用maven等构建工具,当然在使用过程中也会遇到各种各样的疑惑或问题,比如:maven生命周期到底有啥用jar包下载不了怎么办不知道配置怎么配,下载jar包的顺序是什么jar包冲突又是怎么解决问的人多了,也就形成了大家的共性问题,这里基于这些问题,本文......
  • Java Web中文乱码的问题
    本编文章列举了JavaWeb编程中所有可能导致中文乱码的问题以及解决方法1、html页面乱码首先第一点便是html页面乱码问题例如:此时我们需要在项目中找到该网页的html文件,在html文件头部中找到metacharset="";然后将meta中的charset改为charset="UTF-8"如下图示:2、request乱码在debug......
  • openGauss学习笔记-196 openGauss 数据库运维-常见故障定位案例-强制结束指定的问题会
    openGauss学习笔记-196openGauss数据库运维-常见故障定位案例-强制结束指定的问题会话196.1强制结束指定的问题会话196.1.1问题现象有些情况下,为了使系统继续提供服务,管理员需要强制结束有问题的会话。196.1.2处理办法以操作系统用户omm登录主机。使用如下命令连接......
  • Hive常见问题
    Hive常见问题1、hive创建数据库在使用hive指令创建数据库时,指定创建位置createdatabasebigdata_demo1location'/bigdata_29';在shell脚本中显示创建返回结果但是在hdfs中并未找到该数据库;这里可能是bug,于是我们通过第二种方法,即在location中将该数据库也加入到路径中......
  • VIM/NeoVIM:解决LuaSnip下Tab按键跳转冲突问题
    主要现象当使用LuaSnip生成片段时,即使切换过VIM模式,输入模式下的Tab按键仍然会导致光标跳转到Snippet的片段占位符处,导致光标“随机跳转”的问题。发生原因这是因为触发代码片段之后,LauSnip会一直维持一个记录占位符跳转的Session,这个Session在当前Buffer会一直持续到占位符结......
  • 【Leetcode 2474. 购买量严格增加的客户】MySQL用户变量编程解决严格递增连续子序列问
    题目地址https://leetcode.cn/problems/customers-with-strictly-increasing-purchases/description/代码#WriteyourMySQLquerystatementbelowwitht1as(selectcustomer_id,year(order_date)asmy_year,sum(price)astotal_spendfromOrders......
  • 【LeetCode 2494. 合并在同一个大厅重叠的活动】MySQL用户变量编程解决区间合并问题
    题目地址https://leetcode.cn/problems/merge-overlapping-events-in-the-same-hall/代码#WriteyourMySQLquerystatementbelowwitht2as(select*#----只需要改动这里的逻辑,其他不要动。注意里面的语句是“顺序执行的”-------------如果切换......
  • Spark版本不兼容导致Standalone集群无法连接问题
    一、Spark版本不一致报错现象当使用client模式连接Spark的standalone集群时,报错所有的sparkmaster的节点都没有回应。二、问题排查思路 通过client端的日志产看没有什么有价值的信息,需要看下spark端的master的日志,docker logsspark-master 产看docker容器spark-master......
  • 解决VMware 虚拟机 ubuntu 20.04 异常关闭导致虚拟网卡 ens33 无法工作问题
    问题描述由于经常使用SSH远程链接VMware中的虚拟机ubuntu,每次关闭都是挂起,时间久了,虚拟机运行有些卡顿了,此时可以通过Linux命令重启或者关闭ubuntu,也可以之间使用VMWare中的【虚拟机】--【电源】->【关闭客户机】强行关闭正在运行的虚拟机但是这个强行关闭正在运行的......