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

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

[复制链接]
攻城狮Melo 发布时间:2023-8-4 21:57
微信图片_20230804215604_5.png
/ C) O# X2 E, K8 l+ u# d
最近可能不少人手上弄到了ST发布的的基于M33内核的H5系列Nucleo开发板,这里也用该开发板体验下UART通信,做些验证与确认。【提醒,下面测试过程中没有开启TrustZone功能】
有人在使用过程中,根据开发板手册描述,芯片的UART3默认与STLINK的VCP口相连,测试中感觉好像又不是。这里不妨一起验证下。根据该开放板使用手册描述,UART3[PD8/PD9]默认是与STLINK VCP的接口。
! H4 d+ j6 b. S" o$ o
微信图片_20230804215604_4.png
+ O& t7 _- N3 J
基于上面硬件条件,使用CubeMx简单配置即可验证。
' p7 x: _9 R/ @/ p! V7 Z! p

/ H/ p& s, [6 [* c. I( e
微信图片_20230804215604_3.png
& ^0 {1 F- }6 C8 \$ a: t* J7 X5 O
微信图片_20230804215604_2.png
1 F8 K- s4 }' g5 k5 ~2 E

- G, o$ v4 _8 t4 m$ F# B, G2 j
创建工程后,在用户代码里调用HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer,  Size, TimeOut)函数,在串口输出终端即可看到结果。看来一切正常。
( ^$ ?( M: @' H  W* _
微信图片_20230804215604_1.png

# D: D  [8 A* k1 r0 y
说明UART3的TX/RX脚【PD8/PD9】的确如手册所言,默认与VCP接口相连。
0 J, l1 L4 ]* q5 ^4 [
上面是基于查询方式做了UART的发送,如果采用DMA方式呢?我们也可以顺便体验下。
% w  p. }) f/ n* i  y  K3 Z* r
我这里使用GPDMA1的CH0和CH1,分别实现UART3的接收与发送。UART3的DMA接收采用Circular模式,外设到内存的传输方向;发送采用Normal模式,内存到外设的传输方向。源端与目的端访问数据宽度均为Byte。DMA请求使用标准请求模式。
  [. y' Y, z+ ~' R( o+ C! k
微信图片_20230804215604.png

# D2 _3 H: i; i8 z  {
微信图片_20230804215605_2.png

+ m) U3 F. Q2 X0 M
微信图片_20230804215605_1.png
* Z! j/ H  B8 `; x  |2 g

3 {( ?3 C( ?3 j2 z
创建基于STM32HAL库的工程,添加、整理用户代码。
, c7 I. L. G% X8 N- Z
  1. #deifne RX_SIZE  (16)
    - m; X. o% I+ {6 \9 B. r
  2. #define TX_SIZE  (33)
    5 o$ v5 J' X$ @1 o  E0 \
  3.   % e9 k* H( s3 c8 r
  4. ALIGN_32BYTES (uint8_t tx1_buffer[])="**STM32H5 UART Test with Polling**\r\n\n";6 Z& v. ~8 h: Q( A& D6 v
  5. ALIGN_32BYTES (uint8_t tx_buffer[])="**STM32H5 UART Test with DMA**\r\n\n";
    0 O" s, L9 w6 J  K7 S; c
  6. ALIGN_32BYTES (uint8_t rx_buffer[16]);
    / T" e* @9 a" W  V& }
  7.   
    7 l+ v5 G. W) r
  8.   __HAL_LINKDMA(&huart3, hdmarx , handle_GPDMA1_Channel0);2 |0 z# a6 W2 P( |( q2 @& H
  9. $ l' e; c2 ^9 s' N! Z2 W
  10.   __HAL_LINKDMA(&huart3, hdmatx, handle_GPDMA1_Channel1);
    8 R: H$ ]4 c( ]- y
  11.    
    % H. N9 |' X, f$ {
  12.    HAL_UART_Receive_DMA(&huart3,  rx_buffer,  RX_SIZE);//For RX
    $ K3 s! A$ }& y/ [0 v/ \$ y4 r7 P
  13.    
    2 X+ C$ D) i. S& a! I+ U. {' e
  14.    。。。。。
    ; Q, [# t8 M1 ^% l( ~# ~
  15.      /* USER CODE BEGIN WHILE */
    0 H9 S) i4 p; W) Z# J/ y
  16. while (1)
    0 b% u0 r6 C# V3 \* U9 |! J
  17.   {
    7 S" e2 U' w- g# L

  18. " ]7 g2 r* _$ h/ P
  19.   HAL_Delay(2023);
    + n4 |0 ?9 G& l! Q+ S3 s9 [6 j

  20. ) D' O; {* Y' p; {
  21.   HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tx_buffer, TX_SIZE);
    7 ~/ U: K" }! }( c1 {  L
  22.   //HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer, 37,0xfff);
    & Z( ?, v9 u0 d
  23.    huart3.gState = HAL_UART_STATE_READY;
    * m. \# v4 I5 W- |: ?
  24.     ' J3 Y1 t3 |2 Q
  25.   }
复制代码
   
稍加调试后运行程序看结果。下面左侧窗口为UART3通过DMA发送出来的信息,右侧为串口助手发送后UART3通过DMA接收到的信息。! q, y, \  C- a/ W& c) w  ?' l! B4 a

/ o2 E# I8 h' y9 U. Y3 c: P2 a
微信图片_20230804215605.png

7 H% @1 M- ^& m' p) o, P
好,基于STM32H5的UART通信的演示就到这里。内容不难,主要是做了些验证。这些验证过程及结果的确也能为初次接触该板或该MCU系列的人在遇到相关问题时予以信心,在调试受阻时能尽快地锁定问题方向。毕竟做开发调试时,信心和问题方向都是非常重要的因素。
, }) k- _' r& l* K' g
转载自: 茶话MCU
如有侵权请联系删除
: W% D: d9 i+ |$ X! V" T

8 N( P- n7 n' c0 Y; B1 o
收藏 评论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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版