) ]8 ~+ l# n1 h. w! r
最近可能不少人手上弄到了ST发布的的基于M33内核的H5系列Nucleo开发板,这里也用该开发板体验下UART通信,做些验证与确认。【提醒,下面测试过程中没有开启TrustZone功能】 有人在使用过程中,根据开发板手册描述,芯片的UART3默认与STLINK的VCP口相连,测试中感觉好像又不是。这里不妨一起验证下。根据该开放板使用手册描述,UART3[PD8/PD9]默认是与STLINK VCP的接口。
; D& f1 ~6 A' Q. Y6 W: h& X( ~
8 _' C4 k( x9 }# _基于上面硬件条件,使用CubeMx简单配置即可验证。
! w$ N+ o; s5 a% k
0 b$ u4 g/ A9 D% x' E- a
( [8 P9 k, N2 R, j0 m
! g' j, m" a, Q B1 p7 Q
, U% G7 x" K2 |" d创建工程后,在用户代码里调用HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer, Size, TimeOut)函数,在串口输出终端即可看到结果。看来一切正常。
1 x8 M- s1 {' L d( F
9 l& V& i3 R3 R7 z) `# X& A说明UART3的TX/RX脚【PD8/PD9】的确如手册所言,默认与VCP接口相连。
" w3 \3 `) [* n* T4 k" ` 上面是基于查询方式做了UART的发送,如果采用DMA方式呢?我们也可以顺便体验下。1 b; |) j6 W" Q3 N7 h8 Z
我这里使用GPDMA1的CH0和CH1,分别实现UART3的接收与发送。UART3的DMA接收采用Circular模式,外设到内存的传输方向;发送采用Normal模式,内存到外设的传输方向。源端与目的端访问数据宽度均为Byte。DMA请求使用标准请求模式。
- e7 g2 P% T, h! s) x: t! k, M% [2 X" _2 m0 o5 A4 F) d3 t7 l# i) i
4 }/ m# M1 c4 E6 `4 B. y2 u& K* i" g, f8 ~. a) I O
( V- L" y" s- F) P4 J+ f0 b: S
创建基于STM32HAL库的工程,添加、整理用户代码。
& J7 w& U; b4 Y/ v - #deifne RX_SIZE (16)' Q6 h, ]; B6 F/ `8 ^
- #define TX_SIZE (33)9 A9 }* X) F1 ^/ D
-
5 u" }6 Z, B& ?* G - ALIGN_32BYTES (uint8_t tx1_buffer[])="**STM32H5 UART Test with Polling**\r\n\n";! f; N" z; P- Z2 ]
- ALIGN_32BYTES (uint8_t tx_buffer[])="**STM32H5 UART Test with DMA**\r\n\n";* a# G: K* L3 r( h$ ^! |
- ALIGN_32BYTES (uint8_t rx_buffer[16]);
0 @' Q4 h4 c1 V% d) }' ]; Y) r -
( {8 g2 f8 `* g8 w7 _ - __HAL_LINKDMA(&huart3, hdmarx , handle_GPDMA1_Channel0);
% ^0 k1 s. x6 V
$ @, r7 D& D! N, P- __HAL_LINKDMA(&huart3, hdmatx, handle_GPDMA1_Channel1);
; v* i, s6 i; B0 M -
0 h" [$ f' i- l - HAL_UART_Receive_DMA(&huart3, rx_buffer, RX_SIZE);//For RX' j ]0 r* T' h, `0 a h: d
-
c' }" ]3 \9 B* y" { - 。。。。。6 M1 E. L8 J0 V% ~% W
- /* USER CODE BEGIN WHILE *// k* L! D# Y8 S9 Y X
- while (1)
& K4 c& C8 g+ f# { - {
3 h4 X; D* i( c- R - , h% M9 f2 s! ~* \
- HAL_Delay(2023);
) B# V& h( T! H- } - # f' D. n |6 t$ _, N6 w/ ]. O' ^
- HAL_UART_Transmit_DMA(&huart3, (uint8_t *)tx_buffer, TX_SIZE);
9 y, E* X5 h5 [. i |( B" n4 k - //HAL_UART_Transmit(&huart3, (uint8_t *)tx1_buffer, 37,0xfff);
* k6 i. n( r2 G( e9 x u - huart3.gState = HAL_UART_STATE_READY; I7 q+ b& Y1 g/ w D
- # h9 C) w- S; @& W9 |
- }
复制代码 稍加调试后运行程序看结果。下面左侧窗口为UART3通过DMA发送出来的信息,右侧为串口助手发送后UART3通过DMA接收到的信息。$ w+ y; [$ n: e4 u* `+ N7 g
) A( _9 r) k; h. l# @9 v1 g
: | z4 w9 p4 p- {5 c# H* a4 q好,基于STM32H5的UART通信的演示就到这里。内容不难,主要是做了些验证。这些验证过程及结果的确也能为初次接触该板或该MCU系列的人在遇到相关问题时予以信心,在调试受阻时能尽快地锁定问题方向。毕竟做开发调试时,信心和问题方向都是非常重要的因素。
) O, i9 @3 p. e' _' Y
转载自: 茶话MCU 如有侵权请联系删除
! l- e9 a& {* ~2 p . Q; m! X4 t, P' X& ]+ U8 w
|
学习
签到