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

基于STM32H563演示UART+DMA经验分享

[复制链接]
攻城狮Melo 发布时间:2023-8-4 21:57
微信图片_20230804215604_5.png
& @+ l) R4 \$ U$ i$ }* K5 T
最近可能不少人手上弄到了ST发布的的基于M33内核的H5系列Nucleo开发板,这里也用该开发板体验下UART通信,做些验证与确认。【提醒,下面测试过程中没有开启TrustZone功能】
有人在使用过程中,根据开发板手册描述,芯片的UART3默认与STLINK的VCP口相连,测试中感觉好像又不是。这里不妨一起验证下。根据该开放板使用手册描述,UART3[PD8/PD9]默认是与STLINK VCP的接口。

$ O" Z; s* [4 P4 Y. b  J
微信图片_20230804215604_4.png

' F3 M/ E( a4 q* r0 n9 |" }
基于上面硬件条件,使用CubeMx简单配置即可验证。, z" `) }7 S$ X1 O8 S
6 q) \, O# C. Q7 ]; Z
微信图片_20230804215604_3.png
! K" d( P( u* G
微信图片_20230804215604_2.png
, n: t# z8 d* G  s. r+ @
7 h& i0 ^0 K; e  z" E' z% o1 J9 `
创建工程后,在用户代码里调用HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer,  Size, TimeOut)函数,在串口输出终端即可看到结果。看来一切正常。

3 M+ F8 ]% E, K
微信图片_20230804215604_1.png

+ N( p2 [5 H6 ]  D
说明UART3的TX/RX脚【PD8/PD9】的确如手册所言,默认与VCP接口相连。4 _' A+ [% {5 `" d( B! I* {
上面是基于查询方式做了UART的发送,如果采用DMA方式呢?我们也可以顺便体验下。
6 j. c6 o, a4 e8 m) o
我这里使用GPDMA1的CH0和CH1,分别实现UART3的接收与发送。UART3的DMA接收采用Circular模式,外设到内存的传输方向;发送采用Normal模式,内存到外设的传输方向。源端与目的端访问数据宽度均为Byte。DMA请求使用标准请求模式。

/ {+ x; r) i% I+ }& j: Y. h
微信图片_20230804215604.png
+ s# X" H4 B4 y
微信图片_20230804215605_2.png
' t, t& V% X8 |9 `$ o& K
微信图片_20230804215605_1.png
0 m/ U7 o. R& ]7 w

8 R5 n6 K* O1 Z% N) w
创建基于STM32HAL库的工程,添加、整理用户代码。
2 N! v# _/ K' K" o
  1. #deifne RX_SIZE  (16)
    1 {% J' W3 s1 G# Q+ I- S
  2. #define TX_SIZE  (33)
    , j2 w( m. U  |* P+ T4 Y( I, J
  3.   
    ; L8 E* Q4 x# k( n; b
  4. ALIGN_32BYTES (uint8_t tx1_buffer[])="**STM32H5 UART Test with Polling**\r\n\n";
    7 Q0 [: I; E2 N- s! C$ L& u
  5. ALIGN_32BYTES (uint8_t tx_buffer[])="**STM32H5 UART Test with DMA**\r\n\n";
    1 r- S. x* @: ~
  6. ALIGN_32BYTES (uint8_t rx_buffer[16]);
    0 _5 I. W# Q* {8 g* ~
  7.   
    % y' v* S" w% b8 d  r1 L- M* G' H
  8.   __HAL_LINKDMA(&huart3, hdmarx , handle_GPDMA1_Channel0);; X, B+ Q8 ]5 S4 `- D% S
  9. ; H# a# O/ ^4 ?( X2 j& J
  10.   __HAL_LINKDMA(&huart3, hdmatx, handle_GPDMA1_Channel1);; ~* h$ p/ ~6 x3 s
  11.    
    : a9 w, x7 V2 C7 o8 x  ~$ ]
  12.    HAL_UART_Receive_DMA(&huart3,  rx_buffer,  RX_SIZE);//For RX2 C0 c4 N" D, L3 u- C  c
  13.    
    % O7 N+ N3 Y3 r- g2 Z
  14.    。。。。。: ~, k  k, F) U
  15.      /* USER CODE BEGIN WHILE */% b0 N& S! U* l0 z
  16. while (1)
    1 x1 s: O* }4 o3 y/ U) U
  17.   {5 R8 _; w/ _$ e: Z
  18. 2 \7 B' w; L) @3 F. L/ j4 L
  19.   HAL_Delay(2023);
    9 v+ a" A9 M# m8 a( x! p

  20. / O& _( t# Z+ u) p. w1 g4 S
  21.   HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tx_buffer, TX_SIZE);
    * d3 i- c2 S& s# e. }- F" y/ y# \
  22.   //HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer, 37,0xfff);
    + b3 x/ l# e" I2 m6 r
  23.    huart3.gState = HAL_UART_STATE_READY;8 s) T1 R) u" I1 r& q' d# a
  24.     0 s4 ]' I4 x/ H7 G
  25.   }
复制代码
   
稍加调试后运行程序看结果。下面左侧窗口为UART3通过DMA发送出来的信息,右侧为串口助手发送后UART3通过DMA接收到的信息。* G4 a- e- P$ Z7 Q) {) c* Q. R* d, b3 A
, }5 F( _, E8 M5 q
微信图片_20230804215605.png
* r" C4 i2 r& S9 S9 X, F
好,基于STM32H5的UART通信的演示就到这里。内容不难,主要是做了些验证。这些验证过程及结果的确也能为初次接触该板或该MCU系列的人在遇到相关问题时予以信心,在调试受阻时能尽快地锁定问题方向。毕竟做开发调试时,信心和问题方向都是非常重要的因素。

+ ~4 l# @& n7 O7 N( {) w' q; e
转载自: 茶话MCU
如有侵权请联系删除

3 O/ u# z$ P, h& y9 p

" }! u* b; }# z- x
收藏 评论3 发布时间:2023-8-4 21:57

举报

3个回答
JasonQT 回答时间:2023-8-31 08:42:00

学习

556 回答时间:2023-9-1 08:55:57
[md]学习写贴
tongyu 回答时间:2023-9-1 09:38:53

签到

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版