|
本文以stm32 F303K8为例,不同型号的DMA配置方法略有不同。 本文设计的实验如下:通过USART2接收数据,并通过DMA将串口接受数据循环存入长度为100的uint8型数组。 思维导图总览:) A, B9 x. e9 ?. _* e) V: i
1- 时钟配置 2 C8 @) f! D, h9 F1 _5 e
有stm32基本知识应该知道Stm32的每个外设在使用前都需要开启其时钟,否则模块不运行。 + ~6 ]" ^5 M, \4 X& k$ l' o2 - DMA配置 使用DMA前要确定外设与DMA连接的通道,不用系列芯片的硬件设计略有不同,因此要去查对应型号的参考手册。 1 {8 H7 N1 y* x3 H2 H$ ?
F303K8上USART2_RX的请求连接在DMA1的Channel6上。后续的配置都围绕对DMA1的Channel6的配置。6 R8 s$ {- s+ ?5 x9 B0 C DMA的结构如下,下图截取自F4系列的数据手册,F3的DMA结构与F1的相同,但不影响借用F4的DMA结构图对配置方法进行理解。
要配置的内容及API如下:
这里没有使用DMA的中断,因此没有对具体的中断进行使能。, _* c7 F( e5 F `5 U 3 - 使能外设发出DMA请求 - G' j/ }% S7 T; K1 Z( c$ p
DMA是在外设或软件Requst之后才会发起传输,所以要使能外设发出DMA请求,这里是USART2_RX的请求。 2 I- s( Y, c2 r- Q" E转载自: Vulcan ; Y3 c1 Q; z# {$ ^5 t* u9 V5 p |
经验分享 | 通过STM32 TIMER的PWM功能模拟输出正弦波
SPI 32位宽DMA方式收发失败问题
多通道DMA传输为何有一路异常?
经验分享 | STM32N6 ADC DMA 传输失败案例分享
经验分享 | DMA发送函数只能第一次调用有效?
经验分享 | 使用EXIT0同步触发SPI的DMA发送话题
【开发经验】LAT1500 如何通过DMA配合CRC功能
我心中的ST中文论坛
经验分享 | 为什么重启ADC的DMA传输要先停掉ADC?
经验分享 | 使用GPIO+DMA+TIM模拟SPI通信演示
微信公众号
手机版