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

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

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

3 P: J; ^5 b- t
微信图片_20230804215604_4.png

& X1 P6 M( z$ N& q, d1 T
基于上面硬件条件,使用CubeMx简单配置即可验证。: N$ {, e, [  l3 j4 c
. Q  r! V1 c/ U
微信图片_20230804215604_3.png
* @! y2 z. h9 W; c! s
微信图片_20230804215604_2.png

; M0 `) S: L) R! }% X9 K9 l4 M5 W
5 {4 l5 V( W' Q+ y
创建工程后,在用户代码里调用HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer,  Size, TimeOut)函数,在串口输出终端即可看到结果。看来一切正常。
% m. _- a2 Z  P, {- m+ y
微信图片_20230804215604_1.png

# f4 o" Y: j6 Z9 W, [% K
说明UART3的TX/RX脚【PD8/PD9】的确如手册所言,默认与VCP接口相连。
" _( J; d$ [) E* a
上面是基于查询方式做了UART的发送,如果采用DMA方式呢?我们也可以顺便体验下。. C; M2 X4 K0 c; n: [9 B+ A1 t# c
我这里使用GPDMA1的CH0和CH1,分别实现UART3的接收与发送。UART3的DMA接收采用Circular模式,外设到内存的传输方向;发送采用Normal模式,内存到外设的传输方向。源端与目的端访问数据宽度均为Byte。DMA请求使用标准请求模式。

# e( c% p7 m; U, }: b) t
微信图片_20230804215604.png

; f: h" Y8 L% W# J' R
微信图片_20230804215605_2.png

4 [( P: E" J! A5 @+ k+ |
微信图片_20230804215605_1.png

8 q! C7 Q, G. G/ U) W1 Q: b9 Y7 w- w3 I, @/ [9 H! l
创建基于STM32HAL库的工程,添加、整理用户代码。
1 A- B; h0 a, X0 D8 C, S
  1. #deifne RX_SIZE  (16)
    ; p3 Z2 |" @: n) y; j* h
  2. #define TX_SIZE  (33)
    # |5 `* d; B+ m4 X) Q0 f3 e
  3.   # ?+ `# F9 R1 i# X
  4. ALIGN_32BYTES (uint8_t tx1_buffer[])="**STM32H5 UART Test with Polling**\r\n\n";/ b* O4 f+ j0 G# _
  5. ALIGN_32BYTES (uint8_t tx_buffer[])="**STM32H5 UART Test with DMA**\r\n\n";
    4 G+ Q, y! f. p0 U5 w: H- K
  6. ALIGN_32BYTES (uint8_t rx_buffer[16]);: O/ B& A6 w, A$ M' {' v
  7.   8 L, E; u: `5 b* b$ ?
  8.   __HAL_LINKDMA(&huart3, hdmarx , handle_GPDMA1_Channel0);
    6 D  x6 g5 o/ i+ f( `, i
  9. 4 t1 ?6 I* `" [! B0 u; v3 _
  10.   __HAL_LINKDMA(&huart3, hdmatx, handle_GPDMA1_Channel1);
    , L3 K3 x: b5 w9 ~8 l# \% w, t+ N
  11.     : T% k+ X# I3 b  ^
  12.    HAL_UART_Receive_DMA(&huart3,  rx_buffer,  RX_SIZE);//For RX9 j" \4 _$ c7 f. U5 f" x
  13.    
    1 S' M; U# `# C5 ]0 y2 m
  14.    。。。。。+ `/ e% q8 R# B+ Y4 }- c: `* u9 y
  15.      /* USER CODE BEGIN WHILE */
    - M7 G, A; Q5 v! O" C, v/ ]& f
  16. while (1)" d* D0 o" H- l2 {$ ?" U2 q
  17.   {% a4 d+ h- \; y3 T; Y9 T
  18. ! N6 W% v% L6 X
  19.   HAL_Delay(2023);8 b' f; ]2 D! R0 w& S; |6 W  V
  20. 2 m0 q2 ~$ B5 w& ]# W
  21.   HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tx_buffer, TX_SIZE);; f# d" Y7 @  d% o
  22.   //HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer, 37,0xfff);% A0 b6 J: q3 H0 }
  23.    huart3.gState = HAL_UART_STATE_READY;
    8 h( R5 q% t* E6 U9 o
  24.    
    . {3 c7 Q$ R$ {* q
  25.   }
复制代码
   
稍加调试后运行程序看结果。下面左侧窗口为UART3通过DMA发送出来的信息,右侧为串口助手发送后UART3通过DMA接收到的信息。
9 V5 l/ L7 f; o
  E2 q  H0 Y! O/ }3 {+ M- p
微信图片_20230804215605.png
1 t0 s6 L- i! z1 Z5 i  s
好,基于STM32H5的UART通信的演示就到这里。内容不难,主要是做了些验证。这些验证过程及结果的确也能为初次接触该板或该MCU系列的人在遇到相关问题时予以信心,在调试受阻时能尽快地锁定问题方向。毕竟做开发调试时,信心和问题方向都是非常重要的因素。
; T' ^' t8 i  S+ ]4 \' Q  g
转载自: 茶话MCU
如有侵权请联系删除

7 U* O$ O5 D6 b7 r' o
' M+ b- Q& e( O# s% |* M' C
收藏 评论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 手机版