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

STM32G0-HAL库串口控制

[复制链接]
STMCU小助手 发布时间:2022-10-26 23:44
STM32G0-HAL库串口控制
- d4 }4 B% V; U5 |* v今天分享的是基于HAL库进行串口的配置输出以及重定位实现,使用的开发板是STM32G0B1RE,和F1系列的芯片使用方法是一模一样的。0 E/ ~4 S) q. \9 m. o% D( F) O4 H

( V; x2 E6 k9 E一、打开CubeMX进行工程配置 这里使用的是串口2
, B1 R; y. ?% g% [0 z具体的操作步骤就不重复了,就介绍一些关键步骤, v$ {, M  }+ X/ W/ V. Q0 g$ e$ ?6 c
从配置的结果可以看出 串口2 使用的是A2->TX  A3->RX
- W8 h/ a6 Z8 }! \/ L1 i+ Y1 O; x' e
  `  m) u9 E: C  n6 S& Q& i) x4 N 92e3ecda7f954070a36abe11fd34f4b2.png
" `2 N7 ]8 J2 n$ R6 W1 C8 @5 Y0 h
; u; z2 V0 y# l* e5 f这里我使用了串口中断就行数据接收控制LED的亮灭,所以不要忘记将中断使能打开。
0 i9 _6 f  C1 y1 T8 |7 k/ B. |7 i$ o. K+ y* h6 P
7a749a584551400ab390d9f0fd0a57f7.png
4 ^- s/ y' T" r$ m9 H
; S7 W# Q' a2 `4 G6 F时钟我还是默认的 没有做修改,将这些配置完成后 就可以生成工程了
- z' e9 T4 s+ h2 k7 E; J
5 E! ]) S" \' s  d. C) Z6 I代码编写
" u& P/ U) P4 D* q2 {
1 [7 c  N/ d1 C( L, Y
  1. //常用函数5 G: ~  B4 i0 p9 t+ S$ e

  2. ! F! a! g0 k$ }7 L( o
  3. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
    . j+ K) _% N$ u( }& z4 a& B. ~
  4. HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
    1 K5 q; w. @9 D; A4 _! _9 y* {
  5. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);3 T* z+ Q) c& i0 Q) ]
  6. HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);' |. s% C. s* C+ s8 Q6 H
  7. ; e: {7 ?( o4 I3 ]% @4 o
  8. //接收回调函数6 j/ J8 ^9 M  @5 g
  9. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
复制代码

, G: Z9 }" l8 f  n/ U4 [我们在进行配置的使用不要忘记配置接收中断这个函数HAL_UART_Receive_IT,要不然在回调函数里面中断接收可能不能正常使用,这句也相当于是串口中断使能。
" R: e4 F: e6 ~) l+ g' f$ s
- w+ \9 R* B; G( n0 V串口回调编写
/ B: h7 Q$ E* {8 |! H" N, N6 G6 `4 a) E3 M! s2 Q

  1. 5 g, Y# T! ^' \. _* H
  2. void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
    3 X! k% ?( W- M- h  G) O
  3. {
    ( y5 e9 P* O6 Y- l4 A; T
  4.         if(rxdata == '1')  //点灯LED4
    6 K; T! {8 [/ [9 k9 C% t
  5.         {
    / I. l) [7 F) |
  6.                 LED3_Open();& {4 S! r! G/ ]( y* ^& B7 J  y! k
  7.                 HAL_UART_Transmit(&huart2,&rxdata,1,1000);5 z. l$ _5 F+ h) F; t
  8.                 HAL_UART_Transmit(&huart2,(unsigned char *)"\nLED OPEN\r\n",10,1000);
    ( e9 D  F, p/ i6 i9 w
  9.         }
    6 p4 k2 d+ g% O& W: E. ^2 k. @/ K3 S; F
  10.         else if(rxdata == '0')* @3 n4 p) A' l6 j4 v% R- l
  11.         {
    9 a- {0 d$ f. `) E  R
  12.                 LED3_Close();
    8 R2 b7 [( g1 ~3 j
  13.                 HAL_UART_Transmit(&huart2,&rxdata,1,1000);
    5 k8 O5 Z2 m2 k6 A9 T2 K
  14.                 HAL_UART_Transmit(&huart2,(unsigned char *)"\nLED CLOSE\r\n",10,1000);
    * B* M0 o% _1 _: _8 y' A
  15.         }
    $ O1 D5 q8 S1 B) v, N) ?9 \
  16.         HAL_UART_Receive_IT(&huart2, &rxdata, 1);        //使程序可重新触发接收中断3 @4 [5 [# d8 {1 p; Q0 d% Q, g9 j
  17.         }
    ( F1 s9 p% l9 p7 W% n
  18. }
复制代码
# B' l" B8 q7 Q# T9 _
printf重定位- U9 Z) w3 E) ?7 j
% {) x) A8 Z% T0 _6 w! f- _0 [+ ?/ F$ O0 r
  1. //发送字符串, H! B0 ^# t  d' [9 q' h
  2. void USART_SendStr(UART_HandleTypeDef *huart,char *str)
    ( W5 G9 A" M) L5 C4 L! c8 T6 ^
  3. {
    , `5 B. V. ]$ l
  4.                 while(*str != '\0')
    * p) f: g/ |+ l1 I  q
  5.                 {* b$ e2 L0 b6 |) F
  6.                         HAL_UART_Transmit(huart, (uint8_t *)(str++), 1, 1000);
    * u( a( I7 g$ r
  7.                 }
    ' t( U4 s% j) C2 H3 N
  8. }2 k4 @9 x: G, D0 v9 Q

  9. # L) @5 `5 t# W/ r3 z* ?$ r8 j
  10. # ]5 \# D- S! f+ D  {  x" O4 c6 a9 {+ J  ~
  11. //重定向Printf函数
    5 Y3 [: t& S. _2 m8 \5 a
  12. int fputc(int ch, FILE *f) + G+ q" ^; r1 {6 m& a' E
  13. {, {! t" D7 x5 ^! Q

  14. 6 o: P# P( P. F
  15.         HAL_UART_Transmit(&huart2, (uint8_t *)&ch, 1, 0xFFFF);4 j( b1 ]- t# n0 s0 g
  16.         return ch;- H3 n3 g' [0 Q$ P
  17. }7 ~, N4 K" T# o3 K/ p# x

  18. $ x) J& g8 U0 d9 F2 t

  19. 9 G3 m* h! Y/ ~. l" r- N- E
  20. //, T9 ^2 I6 R4 U
  21. //重定向Sscanf函数
    ) r  ^8 z+ y& e& C7 R7 |9 E: \
  22. int fgetc( FILE *f)
    ; [6 |, J: e5 {' k  X6 K8 v
  23. {: l9 r5 @8 |. d* O3 {2 U4 C

  24. + ~# Z3 i) {# _) \# z* K
  25.         uint8_t ch = 0 ;
    " o/ Y+ G5 q9 p8 r5 C
  26.         HAL_UART_Receive(&huart2, (uint8_t *)&ch, 1, 0xFFFF);
    $ t/ J4 ]) I6 [5 f* Y1 s
  27.         return ch;
    5 [5 ~6 R. W9 D1 S6 Q
  28. }
复制代码
8 P+ ~0 i; m, B* G# |
主函数功能测试% ]2 n' f+ q2 D8 m( W; D. _# q

* i& p: H* N  l7 [( N c7380e7ad65e46c9a125d335aa76232b.png 0 }/ s6 q( O0 ~; G
7 b; L6 {# |7 c0 A) D- \1 ^
注意:在进行串口重定位的时候需将Target 里面的Use MicroLib勾选上不然使用不了。
6 I/ `+ o( ]3 E7 ]) ~4 z) T& _; [7 G9 i7 w2 ?* c% P) X
2a1a0572122a4490907d8e222d2156dd.png 3 c/ r. [- }; Y" s/ ]2 T* i8 u

2 X' V5 p# p' b实验结果
* }4 y1 a2 n0 b& S7 R
: y9 J8 Y5 f  |) O 2e9a5bb632034a90a416326bd5b00b38.png
. l* M2 O+ Y& j  `- d
# \8 b! H! B: W9 X. l7 C" @8 u————————————————
9 a. g8 Y9 E" x3 M- R: L版权声明:@slow-walker$ C- v8 a% U; ~  v# G/ K6 p: V

9 n0 D4 O( }) F. l; t) V0 T9 \( Q; `! K
赞 收藏 评论0 发布时间:2022-10-26 23:44

举报

0个回答

所属标签

相似技术帖

官网相关资源

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