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

STM32F412RE_LL_DMA_UART

[复制链接]
STMCU小助手 发布时间:2022-12-14 17:38
1.  CubeMX配置——UART9 i$ A0 [! i: ^

# o1 H, N& y  {: O" b- ~  z1 o 191f85c39c884f878fd6691d7a6a81d2.png
$ e9 }$ ^% M- j8 S; ?% W
8 j$ e0 s7 o+ T+ Q2.  CubeMX配置——DMA& P/ S: `+ F/ _  r/ ~* ?/ p2 }

1 r) n3 b  ?! N( @' A0 C& d& b f0021affdc994955a3ef5b7e67c4c18a.png 1 t9 p& n8 P+ w6 Q- T# k
$ O% a/ V: i- \& [
3.  CubeMX配置——设置LL库0 J; x) q. h+ _, x7 M, b) k
# \2 f& M/ y6 T% ^3 n1 Q2 G
4a2190d5a34b452892f673455f4a4216.png
% u* g: C; p) t  p
1 k5 S: B7 G0 A" Z& r* o' X# l: d4.  CubeMX配置——设置中断
, r1 n5 y  q7 s
  j1 l  F) Q3 }不启动UART中断* x, u* Y# O% r8 l: H0 i
! ?# l& f9 g$ `9 C
fa6641a028d84432aec4b33c484631af.png
, V0 j, v. x9 e8 Y- Q: k
9 L" b) G/ r& u3 s$ A 5.  添加自定义代码- K) N/ g! _# o$ v: M; \$ Y8 a
& _* C3 ~1 a5 {* z
在usart.c程序中添加代码,注意字段位置

) w; z7 d8 F' x$ D% |9 X
  1. /* USER CODE BEGIN 0 */
    & Z" i5 {7 f4 Q/ [4 a* ^& o  R
  2. uint8_t uart_tx_data[100];0 H3 u7 Z$ _! m2 T  |
  3. uint8_t uart_rx_data[100];
    ! B: R$ ]3 a/ b$ V+ a, O7 X- i
  4. uint8_t uart_tx_len;! G* `: V7 ?6 P# t
  5. /* USER CODE END 0 */
复制代码
  1.   /* USER CODE BEGIN USART1_Init 1 */, j5 V  V! ^: r/ G' Z
  2.   ! E+ r/ @3 h' `- ~, }
  3.   LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)uart_tx_data);
    ) {8 Z$ U* L7 q1 ]
  4.   LL_DMA_SetPeriphAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)(&USART1->DR));' T+ v. [3 {3 a  U5 T* Q% L, s
  5.   LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 7);& Z7 O1 Y2 l8 U: m& U6 P8 L1 _
  6.   LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);! X2 Y4 n9 s: B
  7.   ' q2 e3 g( ^0 @" r
  8.   LL_DMA_EnableIT_TC(DMA2, LL_DMA_STREAM_7);& ]0 a" }' W" K
  9.   LL_DMA_EnableIT_TE(DMA2, LL_DMA_STREAM_7);) ]4 P3 D4 W" l! N2 c3 q7 Z

  10. 9 R0 a1 W) a7 R- q) s6 c6 W1 E6 R! ?9 ~. W
  11.   LL_USART_EnableDMAReq_TX(USART1);
    5 \( E9 W* ~& B# z7 X" x
  12.    
    1 c3 l9 P( _4 i0 }3 R/ j" [
  13.   /* USER CODE END USART1_Init 1 */
复制代码
  Z8 v9 K2 k/ Z* c. u! i, O+ a

! r' F- ?. v3 d9 C4 K; m4 F在中断程序stm32f4xx_it.c添加代码,清除指定标志位9 U9 v) u! {& f% q
  1. void DMA2_Stream7_IRQHandler(void)3 u- l& q! o4 p0 _/ @. e
  2. {
    # a4 h6 X3 y% x3 G0 X* D
  3.   /* USER CODE BEGIN DMA2_Stream7_IRQn 0 */
    ' r' g: `$ M; W( x5 D, b
  4.         if(LL_DMA_IsActiveFlag_TC7(DMA2)) ; J1 L$ [1 H5 W1 a4 h& p5 k
  5.     {
    ; e  \2 w, G' Y$ z
  6.        LL_DMA_ClearFlag_TC7(DMA2);
    ; z& k  h" ^# }% z/ Z
  7.         }3 Z" @. D3 X+ d! ~

  8. 1 m3 ?% S5 `, {) t- K/ w
  9.         if (LL_DMA_IsActiveFlag_TE7(DMA2))
    9 j+ E3 Y9 P: y% n6 M
  10.     {
    % R9 N  c- q2 W) D2 k2 f- \
  11.             LL_DMA_ClearFlag_TE7(DMA2);      , d$ B( N. d5 I. k# W" i" ?% G1 N
  12.         }# d/ }8 @; F$ V5 s# V5 z
  13.   /* USER CODE END DMA2_Stream7_IRQn 0 */) D9 d5 f/ v; G

  14. 5 b4 R8 {/ {. {! Y
  15.   /* USER CODE BEGIN DMA2_Stream7_IRQn 1 */
    " M' o+ s4 q; Y7 B6 }. d+ a" Q

  16. 2 z* M: j' Y9 o. R# ~" o
  17.   /* USER CODE END DMA2_Stream7_IRQn 1 */
    ) [, E3 r# a4 O
  18. }
复制代码

& C. c* b& o, }9 l8 g0 S. }2 c/ T. k9 a6 \) z0 l" L
在主程序main.c添加代码,注意字段位置

7 }7 H) W! H# _
  1. /* USER CODE BEGIN 0 */
    ) _' I* w* g) X* m  V, c
  2. uint8_t Uart1_DATA[] = "12345\r\n";  S( `6 {9 u6 w
  3. extern uint8_t uart_tx_data[100];
    , B- ?9 i2 N  y5 r* g* S" t9 |& J% W% Y
  4. extern uint8_t uart_rx_data[100];( M1 O7 n2 d1 [
  5. extern uint8_t uart_tx_len;" @5 K) O: J4 _# N
  6. /* USER CODE END 0 */
复制代码
  1.   /* USER CODE END 2 */
    - D; @1 ]( V- e. u8 b  X4 q" p

  2. * D5 P+ s, a5 ]( ^. B
  3.   /* Infinite loop */
    / b- j* s, H# e7 T) t
  4.   /* USER CODE BEGIN WHILE */
    4 [5 I& ~/ J# J! }' t
  5.     LL_DMA_ClearFlag_TC7(DMA2);//
    + k/ [2 \) |8 o1 Y1 l7 Y

  6. * U5 \6 Z( Z5 x0 E$ U/ d
  7.     memcpy(uart_tx_data, Uart1_DATA, 7);
    " O* \6 I! W# C6 b
  8. 1 s% x  X6 U) `' [. R$ b
  9.     LL_DMA_DisableStream(DMA2, LL_DMA_STREAM_7);//- S& p6 _1 C0 k2 j- m
  10.     LL_DMA_SetMemoryAddress(DMA2, LL_DMA_STREAM_7, (uint32_t)uart_tx_data);//
    8 f$ D. Z# Q  y  d# V5 |
  11.     LL_DMA_SetDataLength(DMA2, LL_DMA_STREAM_7, 7);//4 \' H! _8 v2 i1 @. Y. K7 k3 B' ~: o
  12.     LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7);//3 X) F) L1 p2 s7 b% N6 R( ^" ?

  13. # t, U8 R7 x" h  _0 Z+ g0 K8 r
  14.   while (1): C7 K2 c1 ?5 ?6 L
  15.   {
    $ d6 R: ?! L" _- `
  16.     //HAL_UART_Transmit_DMA(&huart1,Uart1_DATA,7);( a# ?, a! W5 n" t8 G
  17.     //HAL_UART_Transmit(&huart1,Uart1_DATA,7,100);
    * E$ W/ Y, K+ E0 L& D" T
  18.     LL_DMA_EnableStream(DMA2, LL_DMA_STREAM_7); //å¯åЍDMAä¼ è¾“  l+ N( J) m$ u  L. G9 v1 m+ G
  19.     HAL_Delay(1000);2 ?/ Z5 _) C0 q
  20.     //__HAL_UART_RESET_HANDLE_STATE(&huart1);9 E4 O2 ]4 r9 ^% N
  21.     /* USER CODE END WHILE */+ _  h: n1 z4 L* D' O: H/ Q, \) ^
  22. 0 e+ }: ]5 U* p- q5 \- i! v
  23.     /* USER CODE BEGIN 3 */3 `* `! y& `( ?& Z: o4 M! k; L% u
  24.   }0 M( \0 D. Z2 q0 O# e$ ~
  25.   /* USER CODE END 3 */
复制代码
  b% L% j4 c! @2 G$ i

; H0 l) K( V  q7 o1 [7 g# X6.  串口接收到数据, P4 ^+ s) M% h5 z" O' F
1 y2 @0 y7 L8 f( u& g
cedf1e31e535428ea8239cef27e5a240.gif
2 J  B% J7 A0 J; l  E9 W$ b$ x# [9 ?. v+ R2 b( S) c
————————————————7 a  v- v" C0 P. l
版权声明:xyang18
9 @# Z/ L. M! R; z- U- N+ |
' P! O. p. T7 Y' c
' Z8 k9 i* j5 n4 b3 \3 T" y
赞 收藏 评论0 发布时间:2022-12-14 17:38

举报

0个回答

所属标签

相似技术帖

官网相关资源

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