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

【实测教程】STM32CubeMX-STM32L4之研究串口通信(串口发送函数)

[复制链接]
STMCU小助手 发布时间:2023-1-15 00:07
一、开发板平台简介:
, U  b$ B1 Z8 v) j5 N1、开发板资源简介" p, i' n* g3 J( C& c, U
(1)开发板主芯片型号:STM32L431RCT6% H( A  {7 t3 M. t: U, B1 s& u
(2)开发板主芯片封装:LQFP-64_10x10x05P
( N% ?' x) h4 \9 Y& x(3)开发板主芯片内核:ARM® Cortex®-M4
  N  @! p/ K& ]# ]- }(4)开发板主芯片主频:80MHz
( S, d  \# G" j" `' F8 `(5)开发板主芯片Flash大小:256KB1 [+ c" T& `$ K7 q4 j
(6)开发板主芯片RAM大小:64KB8 f, U/ Z! Y3 O0 r; V1 h: ?
(7)其他外设:请参考芯片手册4 {, W" |+ ~& f& g8 |

) L' I( X# f2 Q/ C! P, S( A5 W bb91345227434ee7a43a34bf3fe366e6.png : s8 @: T) X% G6 M: O# ^: {* b
0 K* C2 Y2 F6 X# [2 V: b1 l2 y0 l( N

# x) ]4 o, r  D, ^3 C: }, Q9 y 929c0cce04aa4115a8623703982bf3e1.png
6 Q+ Z/ k$ v, n/ ], S  M( ^& G6 U5 }% w# L( f3 |* v: h: e5 N, X
2、串口简介
4 y4 S6 I* F9 s$ v5 q$ @3 p         串口全称为串行通讯接口,即数据在通信线上一次传输一位,按先后一定顺序传输。我们通常所说的单片机串口准确来说应该是串行异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),使用TTL电平,串口需要RXD、TXD、GND三根线进行通信。5 F. J+ V6 u( e: j
        (1)我们选用的STM32L431RCT6开发板串口1已通过USB转TLL串口芯片CH340G引出,使用时,只需要用公对公USB线连接电脑即可(注意也得需要安装CH340G驱动),后期验证试验也试验该串口1进行。2 O% C! R9 b5 p4 B& S
        (2)开发板上的其他串口已通过排针引出,为TTL电平,通信的时候需要注意选择对应的电平模块,如USB转TTL串口模块等。6 M$ X& ]6 F! v1 V) M; \3 I
1 c7 V: W8 a7 u! S& M
& a$ `6 `2 q  g6 e; \4 ^
  二、新建工程% x. Z" M$ P% n7 {, A& i
1、新建STM32CubeMX基础工程
! T0 x7 j4 \- S, C  i8 K(1)打开STM32CubeMX,点击“File”-->"New Project"
5 z) y. Q" b% l
6 }$ A2 H+ q$ Z! G5 D% x; a1 ~

8 E4 `% p" E" k2 k& h+ M 2399170347904e959c855fefd5877f84.png 2 C2 O, j* C# O. `3 n( ]) `
; ^. G7 X$ o. _3 d3 O9 d2 D( N
2 [( ]. Y$ R4 C* ^# R
(2)等待打开主芯片选项界面(大约1分钟时间)。+ [7 _, v1 N0 E+ D* b
- B- ?* B' ]9 j
1 y' a6 z/ }  q. ?( _6 |
d74d2fdc60c9440483e2b7cf8d928e7f.png 3 a4 r, T4 x4 B

2 c) Q1 i7 f5 N
: e7 D$ R: |" e1 i- r
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处现在STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。! o! S, s5 X8 {9 W* X* ~$ I
8 \( g) A, G* F3 w0 d6 j- w

5 ^$ q0 R& k; V 7b80345238d74bea82ce70e1a348f7b4.png
6 m2 i$ N9 P- H0 E. e' N+ \1 t- U0 J( p7 |; Q8 v1 |! L' E# |

% `# C0 S8 `7 ~. |% b# ?. {. A(4)选择时钟源。8 b4 ~0 X5 J) T" e* F; P
(1)因为开发板上有8M外部时钟,此处选择外部高速时钟(HSE)。8 n# j$ D+ i* Y
(2)因为我们没有用到外部低速时钟(LSE),此处不做处理。+ L6 a1 {4 |+ \2 E; l+ ^4 i

, X4 [# Z4 u5 l6 H1 Y* p

% u' K9 x' u% `" b 72119b971f62410fa8344f7f9fb9f389.png
. b! A9 C8 |0 ?4 j6 K9 y( H7 P
7 t7 I3 W. d# v3 X- ?2、配置GPIO控制LED3 ^1 Y$ G/ y3 b5 d; H
备注:LED灯用来指示系统是否正常工作。
9 G- e. ~) o3 |* ~(1)查STM32L431RCT6开发板原理图得LED1控制引脚为PC0,则配置GPIO的引脚PC0。( _8 c0 n( E: ^0 C3 z
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。: W9 G, y) O* g3 g- ~
492907c1e71149819adbaee4516a2af4.png * k$ {/ n, E2 i# R; W! ^% ~4 v- ?
% H9 I& I- Y7 ?% b  X; ]/ U
# b+ I& ~: ?& @0 d% @# N
(2)根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。, E# o' Z& S5 a! _& ]2 ^- F6 u
2 ~; B9 z$ X; W  X" c, V
7 B3 F7 ?% [* V5 ~$ V& N6 h, ]
38ff4b80e1c5495ba3076a5158fd91fa.png # [  n$ a  D+ W6 z1 g
" g0 l! V1 g# X" s3 Q: {  L& K) V
3、设置串口1参数
; P, O; `) S6 \4 z0 j+ Z8 h5 d! y1、查原理图得知,串口0使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:
2 }! X! Z- z5 ?$ t9 N6 e
1 w1 S" X: r, G% q4 B

) j! v8 n4 o; |. ^% m; g6 a6 j, z 497b8ee0243e446784e64a3c31e8a26f.png & K* P& R1 E1 h7 A, U

! \! L) L- i) i) K# H' \& x# z2 D
) Y$ _7 @. X0 j$ G3 r+ w5 _; X
(1)序号1用来设置串口收发引脚的选择。1 G' }. T6 m8 ?0 X1 G  E  ]
(2)序号2-3-4-5-6设置串口参数,如波特率115200、8位、NONE无奇偶校验等。7 X3 E% {: x5 c9 {+ x1 e* T; H  k

; d. W' {9 D# ~, [) _2 T

4 G- D" N# q7 ?' z3 ~7 c 4、配置项目工程参数
$ {2 G( y5 U5 l* L(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。. {. ?7 a- l& K* m8 C. F) E
' }) J  G, P# V# w, z
$ C% L1 [: ]$ e% f) g( k
2ce1933c10484d819234682f4abc0228.png
' W+ G# S& u; ~- u) K  @* i
: n! T" d  i& [7 A# ~* j; L
) n7 y; J( K8 s6 ^1 h2 ^. l6 \  O$ M
(2)完成配置工程。
: U5 B; R+ u/ ~" [8 c( ]: p备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)/ d' g) U' f, ^

, L$ A' x: q+ H0 [# C% }3 t, P* P/ i3 F$ o

5 S1 l- H0 \# c# N6 M2 |9 l efdb616174f54925b6eac31109f227b5.png ' S1 k; D# p5 g1 j8 S

# B& g- P+ O1 Q& }$ [+ c
5 H& }9 V  r4 r# p# f
41c3f2716e4e4eda8f62fa3a1d871322.png 4 J7 u9 O* l( g9 C' A
* s( }; u) C0 D  A/ C! F

7 [; R: b* p, S/ K' }+ a3 ](3)生成代码。
: C* t- U5 C$ B0 R; M; J: D( ~
0 w1 X( J) ]' H; @5 ^* L( b3 n
8eaa7d0babea40ee93f158481a6ee471.png 4 W5 J) H: X/ [4 {  r
7 C; v  q$ l9 V$ N* y* k4 J
. T9 S; V& q# G* E+ \5 o' N5 I
三、在KEIL 5中编写代码
1 k2 p/ A6 c; l1、使用KEIL 5(MDK)打开项目工程文件
/ X- H0 G  q, x2 Y! k(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程。
9 v  }0 o9 t% t6 T' D
7 y# N+ I6 C$ g4 z7 M
  A- v6 S3 `& J* q- @
b1219ad7140c4bfea599e2d523473e51.png 5 c; c1 q2 i$ c! F) U, d) a
8 N3 x7 V% _  \4 Y

  y3 n/ V! T/ m. D$ C+ @1 E(2)添加每隔500ms,LED1闪烁一次的系统提示,用于提示程序运行正常。0 Q9 b7 K) z+ ^2 p1 p- n
2 Q% d2 s1 g9 L# v
  }: B2 [% m2 o7 k
6ab72ceaeb7a41af833842fe5ba6f34d.png 8 E4 j4 `, {# A- a+ n

6 a2 J* F% \8 G$ y2、添加使用串口发送函数打印log的代码
/ K8 b9 Z  o; j" [(1)STM32 Cube函数库的串口发送函数分别为:
  p2 f6 ^* @9 t) A  L, N3 e/ ], {+ z% e1 K5 U# b
6 Q  \1 y) b" n7 d% C& n
HAL_UART_Transmit、HAL_UART_Transmit_IT、HAL_UART_Transmit_DMA。本例程为串口发送函数HAL_UART_Transmit的展示。
/ c/ h, |5 N2 B0 G: B0 t
  1. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)* x9 L/ l1 \5 v' p6 G% w: u+ @
  2.    
    # _, \7 P, g1 b9 t
  3. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
    # ^/ `( x: p2 m  n
  4. . Y2 ?! s3 ?6 Z$ E3 {( H0 v8 V
  5. HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
复制代码
. y$ k* Z' `. `4 F3 l1 E5 C
(2)添加串口函数发送数据的log。$ s' |$ C( c6 E1 b/ z; `
  h8 K5 l3 Z- T
& H2 x, u- i4 l* G7 s; l+ x
6b0880ff9a7e44c18ba92b20895fa204.png
0 l3 `& X  U' M$ I' C2 f: e0 z( V; c. |- a  J
, z. c* f6 G  a; {! U
  1. while (1). e$ z" z; j: J6 X4 L
  2.   {* ]8 ]$ o, T4 u! X3 J! w# r
  3.     /* USER CODE END WHILE */, y& d& @1 |: a9 J3 |7 i; c- Q

  4. ) z3 C+ H% W7 B6 ?
  5.     /* USER CODE BEGIN 3 */
    # m7 ~4 p/ A7 B
  6.                                 HAL_Delay(500);
    # |: z6 b" s( M% N6 _
  7.                                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);                //控制LED1反转
    ' J, ~1 Y! t6 @7 b2 ]' u
  8.                                 HAL_UART_Transmit(&huart1, (uint8_t*)"hello world,this is Transmit function!\r\n", 100, 5);
    6 ^& l7 a9 N' J3 v+ S
  9.   }
    : A: U3 k5 d8 [$ K' a$ `
  10.   /* USER CODE END 3 */
复制代码
% [; }0 Y9 n) ^+ P4 L( x

' c( C! P! G( K# a1 d5 M* k 3、设置编程仿真下载模式. _7 V* C9 u% h0 k8 y8 a
(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
4 l' @+ k& o, t- \- J6 P3 p* Y- _2 `' B( \+ E
6 e. s8 B7 V# A5 [2 n/ P2 T
edefb6b9a2a14be3b1221ad6d5c7a8a2.png ' \; u  S' p+ T6 p7 d! @# I; E

' y0 V% j1 ^( L% a9 F+ d
9 J$ D1 s: ]% Y1 w; P# {& }
(2)点击Download(或者快捷键F8),即可下载程序。
! \) m+ I/ G- R  j
, W% o2 G* c" g0 R+ l7 W) F
, M+ Z* ?) i$ [+ K) f3 x1 d
ba221842d5db40808aa129dd83c593d0.png
' c5 [' ~3 v5 H6 z6 @8 y
. _) D! W! L+ b
5 _6 C6 W' H$ e# D( _9 V3 b6 h
(3) 如果下载程序后,没有看到LED1灯闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
) A$ w6 [9 L7 T) R- }, N1 ^7 }/ A
- p) K5 x1 ?" S) d/ R1 t# L( s

2 ]: ~& ^. \1 ~; J: @+ S# Q8 r 9f8aa1a4e8f04041bcf5cb183facd100.png
) F: g+ }4 u" O6 Y
# F3 o  Z5 e, d$ R4 F5 `" l

( A3 `$ m  z5 Z9 x& ~2 K4、查看串口发送函数打印log效果
1 T( G$ H0 h$ ]% D. o% @) S6 R$ |(1)设置串口助手参数为:115200、NONE、8、 1(和代码中串口初始化参数一致)。& z4 Y" B# D: b& |  O5 }, k
(2)设置成功后,就可以看到串口打印的效果。每隔500ms闪烁LED1指示灯一次,且串口输出一个log。
6 x% I) H& ?7 u$ w! e! B; I. ?: l

* m" S- ^1 _/ ]$ `) C( W  W 6750a28b29db430c8dc3a84b47c51b1a.png
  ?  w% y: G. F% N- F: D6 {* G/ P
3 C! d; R$ P/ d9 {————————————————
8 V: ]: Z$ z1 Q; \8 M版权声明:智能小屋ZYXC0 |9 u! J& E6 q0 Z! G4 q

' m* p1 l' O. w0 L' i& u: h: [$ P
收藏 评论0 发布时间:2023-1-15 00:07

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版