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

【经验分享】STM32F7学习笔记(三)-串口DMA

[复制链接]
STMCU小助手 发布时间:2022-7-3 16:00
一、打开上一节的工程,在上一节的基础上进行修改' A! v8 S9 H& Z0 {
二、配置DMA
0 @) L, Z* e% b. T
在cubemx界面上点击DMA
7 M, e$ f1 p- ~  ^' w# @. X& Z

! c' F8 o2 a  c6 p; P1 h ~QOBD1NN~49@TE]}5KKZYI9.png 7 o! E0 @- k+ D& Y; O: Q& I

# S, W$ Y' W9 L* E0 I2 b
因为串口1是挂在DMA2上的,所以点击DMA2,如图中标记的2,随后点击ADD
9 O3 y2 c# ~6 m+ G( B
: F1 a. Y& y  g) l8 E' Q" e' W
HKI)5R)Z}U7QRCZP7]N~SQL.png : j8 c9 p% _2 i+ j: r
; r- W5 q' `  z
选择USART1_RX,继续点击ADD,将USART1_TX也添加进去,随后配置DMA如下图所示
4 \2 |; B: E& `& x% v2 C% a' P! d
- Q4 x: u0 m2 f/ w3 ?/ R2 I: e

7 Y; ?, m- s# _1 T; F4 g: f* O PIJQ9Z6NDGO_EWQ[I7F@ZIO.png , X8 y/ B, ?& E$ |' r- |8 c
( f$ N& X3 q, i( |
其中mode设置可以选择Normal表单次传输,传输一次后终止传输,Circular表示循环传输,传输完成后又重新开始继续传输,不断循环永不停止。此处选择单次传输。
% E- u" T8 @9 M( ]% g5 g  U- S! {; |9 `( ]
Increment Address表示地址指针递增。串口发送数据是将数据不断存进串口的发送数据寄存器(USARTx_TDR)。所以外接的地址是不递增。而内存储器存储的是要发送的数据,所以地址指针要递增才能将所以的数据发送出去。" Q# |, i( }9 v) ^
  y6 \. }, K1 J- A
串口数据发送寄存器只能存储8bit,每次发送一个字节,所以数据长度选择Byte。
' m% V1 t- e- V2 G6 p6 |: w# O$ W
0 Q! H$ |8 C8 e& `, s( A# M# s: j
三、生成代码

4 P7 B; u) i  T$ ^  O在主函数中添加代码,添加完成如下所示
! s( c- C( @! T
  1. <font face="Tahoma"><font size="3">int main(void)</font></font>0 y: E* L: N+ q/ d% |5 p
  2. <font face="Tahoma"><font size="3">{</font></font>
    & d7 ^. M5 y+ j: ?( B/ t
  3. <font face="Tahoma"><font size="3">  /* USER CODE BEGIN 1 */</font></font>
    & Q$ ^3 m* X1 U" Z* j0 E
  4. <font face="Tahoma"><font size="3">    uint8_t *data="uart dma test\r\n";</font></font>; }/ s2 C: E# i' o$ G' _- U
  5. <font face="Tahoma"><font size="3">  /* USER CODE END 1 */</font></font>
    ) U" R/ m6 \1 L7 g1 P' f9 Y, j
  6. <font face="Tahoma"><font size="3">
      F+ R3 }: w( i& R4 F& e
  7. </font></font>
      H8 H! ^1 U8 S$ n  @( s& [
  8. <font face="Tahoma"><font size="3">  /* Enable I-Cache---------------------------------------------------------*/</font></font>: _! S7 y4 S0 C" o/ M
  9. <font face="Tahoma"><font size="3">  SCB_EnableICache();</font></font>
    , }: X3 O9 t$ w: q* `
  10. <font face="Tahoma"><font size="3">
    ( T% o' o0 m# \+ |5 q& y
  11. </font></font>! r' a5 m3 v4 g! C
  12. <font face="Tahoma"><font size="3">  /* Enable D-Cache---------------------------------------------------------*/</font></font>
    : i: u- u& B/ d) g; I+ W" N. w
  13. <font face="Tahoma"><font size="3">  SCB_EnableDCache();</font></font>
    & @. |" M. z# [
  14. <font face="Tahoma"><font size="3">
    # v3 T8 w0 p1 D1 s  }
  15. </font></font>" @2 _4 W3 k8 x0 W
  16. <font face="Tahoma"><font size="3">  /* MCU Configuration--------------------------------------------------------*/</font></font>
    2 x/ w! F/ q; m2 O  w
  17. <font face="Tahoma"><font size="3">' ]. {7 R, n8 F: `& ?
  18. </font></font>3 }) M: ^9 j$ i" Q4 K
  19. <font face="Tahoma"><font size="3">  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */</font></font>
    $ G( ]& W5 X+ s
  20. <font face="Tahoma"><font size="3">  HAL_Init();</font></font>2 Z$ L; [3 f1 V- |* A
  21. <font face="Tahoma"><font size="3">
    ( f8 k$ }$ @" t) x! o
  22. </font></font>
    ( Q! k! G7 Z' Z; T' x' }
  23. <font face="Tahoma"><font size="3">  /* USER CODE BEGIN Init */</font></font>2 q3 f0 g- X6 g4 X9 g% ^- R( D5 C
  24. <font face="Tahoma"><font size="3">2 C* ]$ g/ h2 M6 a: k( U" u
  25. </font></font>
    ( \0 _* U3 g6 a( b$ R3 I7 h
  26. <font face="Tahoma"><font size="3">  /* USER CODE END Init */</font></font>5 z) X' [; S. ^
  27. <font face="Tahoma"><font size="3">
    , i, V3 B* i' q1 q/ D
  28. </font></font>
    6 U1 G: c6 |4 b& @8 A" d
  29. <font face="Tahoma"><font size="3">  /* Configure the system clock */</font></font>
    9 f6 a: x9 y7 d3 H0 S1 C& w
  30. <font face="Tahoma"><font size="3">  SystemClock_Config();</font></font>
    ; V* ?8 z: Q6 O! M
  31. <font face="Tahoma"><font size="3">6 ?8 c& m0 a& W% k
  32. </font></font>
    8 V2 N: E) m0 O! `( {! Q& e, X4 T% y
  33. <font face="Tahoma"><font size="3">  /* USER CODE BEGIN SysInit */</font></font>
    4 `) b4 @$ {1 J9 w9 y4 R! O
  34. <font face="Tahoma"><font size="3">
    : e. {5 b. I5 ~7 Z& \4 A% n
  35. </font></font>
    ! `4 F% a2 j! g& w) i: M
  36. <font face="Tahoma"><font size="3">  /* USER CODE END SysInit */</font></font>4 ^# F* C( Y4 A5 D' [" [$ m; ^7 F
  37. <font face="Tahoma"><font size="3">
    * r- G! D7 k' Y! r  o- I( i! ?6 N
  38. </font></font>
    * o: Z  j, y6 t. a) u8 ^3 P
  39. <font face="Tahoma"><font size="3">  /* Initialize all configured peripherals */</font></font>
    % ?; b# N/ U3 Q
  40. <font face="Tahoma"><font size="3">  MX_GPIO_Init();</font></font>3 f5 `9 a8 R1 b+ B1 n5 @# E( @
  41. <font face="Tahoma"><font size="3">  MX_DMA_Init();</font></font>
    " A. L  w1 j5 [
  42. <font face="Tahoma"><font size="3">  MX_USART1_UART_Init();</font></font>8 `+ \" n# q1 z" L  y% O6 j1 ~- H" |
  43. <font face="Tahoma"><font size="3">  /* USER CODE BEGIN 2 */</font></font>% o- y# S. g% F' A' n. J, x
  44. <font face="Tahoma"><font size="3">        HAL_UART_Receive_IT(&huart1,aRecBuff,1);</font></font>( H- e5 N& O. k5 Y
  45. <font face="Tahoma"><font size="3">        printf("uart test is run!!!\r\n");</font></font>" D- B# w6 K0 O' k. _
  46. <font face="Tahoma"><font size="3">   </font></font>
    1 J% i' Q3 {9 x) s8 g2 c: T
  47. <font face="Tahoma"><font size="3">  /* USER CODE END 2 */</font></font># I) j) ?4 z( B6 n
  48. <font face="Tahoma"><font size="3">
    2 d+ u/ n3 w; k( T0 q  `* J
  49. </font></font>8 G0 ]; F8 x$ c0 e1 |9 Y; L
  50. <font face="Tahoma"><font size="3">  /* Infinite loop */</font></font>) u+ d5 N6 [! h' U0 P: C- @
  51. <font face="Tahoma"><font size="3">  /* USER CODE BEGIN WHILE */</font></font>, \9 k5 M7 G$ e9 O, p: t1 P
  52. <font face="Tahoma"><font size="3">  while (1)</font></font>) i% C7 V% s$ c& W
  53. <font face="Tahoma"><font size="3">  {</font></font>
      d, H, I5 v, h- X% J  J
  54. <font face="Tahoma"><font size="3">    /* USER CODE END WHILE */</font></font>2 W! k9 ^: a" |+ C) ]
  55. <font face="Tahoma"><font size="3">
    4 f2 r7 K( e5 T& j- ^4 j* N
  56. </font></font>
    & n; N* a% ~7 Q6 H$ C8 M
  57. <font face="Tahoma"><font size="3">    /* USER CODE BEGIN 3 */</font></font>" b: _  E* R7 H8 p. S, F+ M
  58. <font face="Tahoma"><font size="3">          HAL_UART_Transmit_DMA(&huart1,data,strlen((char*)data));</font></font>" {0 N  x+ ?, d
  59. <font face="Tahoma"><font size="3">      HAL_Delay(1000);</font></font>0 I9 A" u6 p5 L) \
  60. <font face="Tahoma"><font size="3">  }</font></font>2 z0 e7 a$ Q  n- j/ I  q
  61. <font face="Tahoma"><font size="3">  /* USER CODE END 3 */</font></font>$ O1 J- l! E/ n" ]8 O
  62. <font face="Tahoma"><font size="3">}</font></font>
复制代码
+ I+ U9 y4 F! x( N. c9 h
四、打开串口调试助手,观察现象,串口每隔1S输出一次数据1 D1 K, b' C( t2 j9 N
: S1 e$ X  X5 S2 f5 e% {# `
ADL	U77JW6HWT372QRY.png
' S/ K! T4 x8 [- Q. h" V$ }* E' ^2 _+ h- |8 Y( B- G
5 a3 W0 l3 j* j- f. f, p1 ]8 y) p
赞 收藏 评论0 发布时间:2022-7-3 16:00

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版