你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32F0 DMA收发UART数据

[复制链接]
STMCU小助手 发布时间:2021-11-24 14:42
直接存储器存取(DMA)用于在外围设备和内存以及内存到内存。数据可以通过DMA快速移动没有任何CPU操作。这使CPU资源对其他操作保持空闲。DMA控制器有5个通道,每个通道专门用于管理内存访问请求。来自一个或多个外围设备。它有一个仲裁器来处理DMA之间的优先级请求。
5 z7 Z% T" A" i7 ?- l; r% y3 U  Q( l
配置过程详解:
# [% g4 f$ ^3 w
) c+ ^# I# y1 a5 w- Y
20190731174743448.jpg

) ~7 f# n* q, S. x+ f: S) W6 b( n' L2 C8 A5 |& y) s2 o

/ O0 y- m$ y% S. A3 B% f1 W首先调用RCC_AHBPeriphClockCmd()函数,进行DMA时钟的初始化。
" T' @2 x2 N0 S8 [6 C- v+ J
# U' Y2 X! z2 o! l) _+ q
20190731210758915.jpg

- o& H. d7 [$ F2 b4 m4 D# ?, e. \; t, m) ?% Q
可以看到DMA在AHB时钟上。所以我们使用以下语句打开DMA1的时钟。- Y. x0 Q( W& P! J0 D7 T2 W( y4 y
, T- _" i4 g% `# r- G
  1. RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE);//使能DMA1时钟
复制代码

5 w2 W' {" o/ A 接着在DMA.c中编写如下两个函数。来设置DMA从UART1到内存和内存到UART的传输通道。
  t* _2 h: I! a
  1. /**************************************************************************************
    & O' l9 x3 v+ S' Q! T
  2. * FunctionName   : DMA_MemoryToPeripheral()
    * Q  n3 C; Q4 W" A7 Q; K5 Y
  3. * Description    : DMA传输(内存-->外设)
    & v' w0 V. X& W1 V  K/ S, \, U
  4. * EntryParameter :  & K- [, m: Y( C7 u6 a' ?
  5. * ReturnValue    : None * g6 }" J: l- Z1 T1 n
  6. * Function       :
    : R6 k  d+ \; w2 r
  7. **************************************************************************************/
      k$ h% v. S! k9 g# J3 t5 D1 C
  8. void DMA_MemoryToPeripheral(uint32_t MemoryAddr,uint32_t PeripheralAddr,uint16_t BufferSize)
    ! o  v1 G2 H+ @- V& I
  9. {
    2 `& O6 N6 Q, o6 X4 S; Q
  10.         DMA_InitTypeDef DMA_InitStructure;4 B; q: ]+ S3 w  L$ S! x: O
  11.         
    % v/ I' n1 |& k& v
  12.         DMA_DeInit(DMA1_Channel2);//复位DMA1_Channel2! P. v& Y* V  i4 n  r1 O9 }' L
  13.         
    8 O- H6 [( X! D( H$ x% |, A' c+ X
  14.         DMA_InitStructure.DMA_PeripheralBaseAddr=PeripheralAddr;//外设地址- ~! S5 X2 A1 A1 L( h7 W" C4 Q5 k
  15.         DMA_InitStructure.DMA_MemoryBaseAddr=MemoryAddr;//内存地址
    $ l* T1 D( c/ i" O
  16.         DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralDST;//传输方向:内存到外设' F9 E5 O" |; O7 S0 i2 L
  17.         DMA_InitStructure.DMA_BufferSize=BufferSize;//传输长度4 N7 f4 u* e7 l& Z* \/ B
  18.         DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设累增:NO
    ) q& Z" P% T0 P, ~4 N/ N  e
  19.         DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//外设累增:YES
    # B9 e# i2 N# |" V( _
  20.         DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;$ O0 ?* E4 b$ i! `( w$ j5 w
  21.         DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;
    ' X* w; ~+ o+ B: i5 `
  22.         DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;//循环模式:NO
    # x7 i0 s5 M# f3 |
  23.         DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh;
    $ G: m$ U7 Y2 l# K/ P  W# Z
  24.         DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//内存-内存:NO
    " ]/ g+ s3 \* M) Z* H
  25.         DMA_Init(DMA1_Channel2,&DMA_InitStructure);
    2 X; i. n# Q+ u( w7 U. P' ?+ b: T
  26.         , H  w) P3 U! t! {; c3 v
  27.         DMA_Cmd(DMA1_Channel2,ENABLE);//使能DMA传输
    & R5 r; ~  t+ q% e7 w. q
  28.                 * C5 A9 e4 E. x& {( D- Q+ D
  29. }
复制代码
  1. /**************************************************************************************
    ( t) a' v! }/ g1 {
  2. * FunctionName   : DMA_PeripheralToMemory() . K, m# a7 E) t0 g6 R# Z& b/ g) W
  3. * Description    : DMA传输(内设-->内存)
    1 e7 ]6 F4 g/ W( Y9 Z
  4. * EntryParameter :  
    1 J# `% P: i3 p# |
  5. * ReturnValue    : None ( q/ c$ q/ Z) X1 A. P# ?! f
  6. * Function       : * k% D3 H- ~+ [( j2 I; K
  7. **************************************************************************************/
    $ s5 z, Z9 F* f$ x  ~% x, A
  8. void DMA_PeripheralToMemory(uint32_t PeripheralAddr,uint32_t MemoryAddr,uint16_t BufferSize)2 j% y5 i# Y4 r) `  E/ t: w
  9. {
    ' [# i- l% m: H, R0 s2 X
  10.         DMA_InitTypeDef DMA_InitStructure;//声明结构体; T: f( u$ \. p9 |6 [/ \
  11.         
    4 O$ `' r5 a2 |
  12.         DMA_DeInit(DMA1_Channel3);//复位DMA1_Channel3
    # z% _2 ?4 y& z8 b
  13.         ( D; [, x  L" p+ Y; X' d
  14.         DMA_InitStructure.DMA_PeripheralBaseAddr=PeripheralAddr;//外设地址
    / f' h" H- i- {% i6 _5 C2 z0 }7 P
  15.         DMA_InitStructure.DMA_MemoryBaseAddr=MemoryAddr;//内存地址: t0 |% i4 w/ i" K, e3 D. y& y
  16.         DMA_InitStructure.DMA_DIR=DMA_DIR_PeripheralSRC;//传输方向:内存到外设
    - Z1 ]8 t$ [: R1 S
  17.         DMA_InitStructure.DMA_BufferSize=BufferSize;//传输长度
    . z9 x1 n7 v, B6 h5 ?, B; k
  18.         DMA_InitStructure.DMA_PeripheralInc=DMA_PeripheralInc_Disable;//外设累增:NO
    , o* f, Q, {% l% {; F
  19.         DMA_InitStructure.DMA_MemoryInc=DMA_MemoryInc_Enable;//外设累增:YES
    ) J3 E) ~) }/ w  d" B6 j5 Z& G' E6 K
  20.         DMA_InitStructure.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;
    2 b4 d" A/ p# u5 _
  21.         DMA_InitStructure.DMA_MemoryDataSize=DMA_MemoryDataSize_Byte;6 _7 P# I, u' T% [# n2 y$ [6 q2 W7 ?
  22.         DMA_InitStructure.DMA_Mode=DMA_Mode_Normal;//循环模式:NO4 E( Z' S, m7 Q) ~
  23.         DMA_InitStructure.DMA_Priority=DMA_Priority_VeryHigh;, q1 L( k9 Y- }: v6 n" F+ @7 g
  24.         DMA_InitStructure.DMA_M2M=DMA_M2M_Disable;//内存-内存:NO8 f; T. ]$ D' p! _$ b, w* J/ F2 z
  25.         DMA_Init(DMA1_Channel2,&DMA_InitStructure);. B7 q$ n# S4 F4 ]+ z
  26.         3 j; x3 A2 f1 O- _  ^5 d5 g" k; Y3 j* G
  27.         DMA_Cmd(DMA1_Channel3,ENABLE);//使能DMA传输
    + ^' j) F- [6 H5 O
  28.         
    . n- M# }6 |" j7 ]! H" @4 I
  29. }
复制代码

7 S2 l( d) @# T 通过以上两个函数可以初始化两个通道,一个从内存到外设,一个从外设到内存。
) h3 G: [- Z; `1 [+ O. G% F
6 M+ M" b+ ?" h- g! R5 T1 u1 _当然在我们调用这两个通道的时候需要知道一些东西。8 x6 T4 @3 a: ?" X, M) x/ J

% }" C" R' y) R+ X$ d/ X# ~6 d  `1.有关通道的信息:% |# C2 O. s2 ~5 |* p3 @
. c$ v: M. U$ N# v( [" V  w+ I
2019073121253971.jpg

4 S4 ~- z3 s7 }1 o6 _7 Z
3 K$ M) S6 {2 M, N: Z. |
收藏 评论0 发布时间:2021-11-24 14:42

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版