5635|10

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

请教香主,如何启动DMA传输? [复制链接]

                                 我用DMA发送串口数据,如何启动传输呢,是要专门设置定时器启动吗?
此帖出自stm32/stm8论坛

最新回复

                                 学习中。。。  详情 回复 发表于 2009-9-10 23:33
点赞 关注
 

回复
举报

72

帖子

0

TA的资源

一粒金砂(初级)

沙发
 

软件启动DMA,然后每当发送寄存器空时,DMA传送一次数据

                                 详见STM32参考手册的24.3.12节。
此帖出自stm32/stm8论坛
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

看你想怎么启动了

DMA的启动方式有很多中种的 
如果你需要定时来启动就用定时器来启动
但是从你说的来看是想通过串口的收发来启动传输
可以看一下USART里面的DMA模式
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

4
 

还是不启动

按照参考手册和例程程序的顺序都试了,还是不能启动传输。

初始化程序:
    GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

     /* Configure USARTx_Tx as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin = GPIOA_Tx1Pin;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* Configure USARTx_Rx as input floating */
    GPIO_InitStructure.GPIO_Pin = GPIOA_Rx1Pin;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    DMA_UART1Tx_StructInit();
    DMA_Init(DMA1_Channel4, &DMA_UART1TxStructure);

    BSP_IntVectSet(BSP_INT_ID_DMA1_CH4, DMA1_CH4_Uart1TxFinish);
    BSP_IntPrioSet(BSP_INT_ID_DMA1_CH4, DMA1_CH4_UART1Tx_UIP);
    BSP_IntEn(BSP_INT_ID_DMA1_CH4);

    /* USARTx configuration ------------------------------------------------------*/
    /* USARTx configured as follow:
         - BaudRate = 115200 baud  
         - Word Length = 8 Bits
         - One Stop Bit
         - No parity
         - Hardware flow control disabled (RTS and CTS signals)
         - Receive and transmit enabled
    */
    USART_InitStructure.USART_BaudRate = 115200;
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;
    USART_InitStructure.USART_StopBits = USART_StopBits_1;
    USART_InitStructure.USART_Parity = USART_Parity_No ;
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

    USART_Init(USART1, &USART_InitStructure);

    USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);

发送子程序:
    DMA_Cmd(DMA1_Channel4, DISABLE);
    DMA_UART1TxStructure.DMA_MemoryBaseAddr = (u32)TxBuf;
    DMA_UART1TxStructure.DMA_BufferSize = temp;
    DMA_Init(DMA1_Channel4, &DMA_UART1TxStructure);
    DMA_Cmd(DMA1_Channel4, ENABLE);
    USART_Cmd(USART1, ENABLE);


这样还是不行,运行后没有数据从串口发出去。
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

5
 

找到了问题的原因

问题出在了 DMA_UART1TxStructure.DMA_PeripheralBaseAddr 这个地址变量的赋值上,我是这样操作的:

DMA_UART1TxStructure.DMA_PeripheralBaseAddr = (u32)USART1->DR;

这样也试过:

DMA_UART1TxStructure.DMA_PeripheralBaseAddr = USART1->DR;

两种方式的结果 DMA_PeripheralBaseAddr 都是 0。
后来我直接地址赋值问题就解决了:

DMA_UART1TxStructure.DMA_PeripheralBaseAddr = 0x40013804;

USART1->DR 是接收数据寄存器地址,为什么它的地址值是 0 呢?
此帖出自stm32/stm8论坛
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

6
 

拜托,一个是内容,一个是地址

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

7
 

是的,问题解决了,谢谢

                                  
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

8
 
请问香主你的STM32 手册能不能给个下载链接 啊
我想看看
谢谢
此帖出自stm32/stm8论坛
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

9
 
请问香主你的STM32 手册能不能给个下载链接 啊
我想看看
谢谢
请看置顶帖“如何查找STM32的官方文档
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 谢谢香主,香主万岁
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
                                 学习中。。。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表