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

【实测教程】STM32L4之串口Transmit打印实验

[复制链接]
STMCU小助手 发布时间:2023-1-14 18:53
一、开发板平台简介:
1 v5 ]! d' t# C1 c/ I* f1、开发板资源简介

7 S9 e- V: G2 K) H- y" l(1)开发板主芯片型号:STM32L431RCT6# F$ j/ w% E  k; q: g: ]% C$ a* w! U
(2)开发板主芯片封装:LQFP-64_10x10x05P5 o& w- ^0 _% |" X+ {8 W
(3)开发板主芯片内核:ARM® Cortex®-M4
: F3 r% ?$ x3 E5 s7 H) q(4)开发板主芯片主频:80MHz
2 u0 l2 G2 F  G; W(5)开发板主芯片Flash大小:256KB
# l: @9 B" U7 }- B5 f. S3 S0 ?4 @, h(6)开发板主芯片RAM大小:64KB* N! f6 ~$ n( f5 x; F' x
, M7 M/ m- @! ]0 `% M3 R
4 ~5 @% F) N6 Y$ ~
bb91345227434ee7a43a34bf3fe366e6.png
8 {) X5 M3 q% w
3 z& T( o! w: D) y
929c0cce04aa4115a8623703982bf3e1.png / m  a; k1 _4 x$ m- j% B1 O+ W
1 D( h- ^8 `6 M1 C$ O% L3 X$ C4 ?
2、LED灯资源
1 _! a( {2 A' N. E(1) STM32L431RCT6开发板共5个LED灯资源,其中一个红色LED为系统指示灯,指示开发板供电系统是否正常,如供电系统正常,红色LED为上电常亮状态,硬件原理图如下图所示:" n' }. B' Z' _% V% Y

. o: X1 n9 p& n) a: h  d, X4 Z, x
0f177691c5814f16a508bcfa747f87ac.png ! O8 ~. @+ v$ k! h% ^" N
$ {/ f+ e/ E: Y2 M, [, q' ]; g
(2)其他四个LED灯为黄绿色可控LED,高电平点亮、低电平熄灭,计划用LED常亮验证看门狗的作用,硬件原理图如下图所示:
4 k8 Y/ z4 ^" X2 I  ~/ x+ U" E- A0 M- m0 C& k' \
e923ad767b8448b7ac37c4ed693724bd.png
, l% _; [, R# s9 ^
# q2 V* e* \5 I​3、串口printf打印工作原理1 w; _8 m& j7 o8 v4 `# }3 j
 串口全称为串行通讯接口,即数据在通信线上一次传输一位,按先后一定顺序传输。我们通常所说的单片机串口准确来说应该是串行异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),使用TTL电平,串口需要RXD、TXD、GND三根线进行通信。
8 a: B) s: ]# u7 ^7 ?
     (1)我们选用的STM32L431RCT6开发板串口1已通过USB转TLL串口芯片CH340G引出,使用时,只需要用公对公USB线连接电脑即可(注意也得需要安装CH340G驱动),后期验证试验也可使用该串口作为debug串口。
% X, R5 |. l& @0 v
$ R6 `6 f: E' ?; v3 R. `$ u# @     (2)开发板上的其他串口已通过排针引出,为TTL电平,通信的时候需要注意选择对应的电平模块,如USB转TTL串口模块等。+ x: J% }0 D( e
7 }% e9 z4 G8 J" \. x
TTL转CH340串口,硬件原理图如下所示:
& I; W% e* \" v+ ?" x8 Y" o
* f5 S+ y. n6 K. T' }$ d
4df1b489cb944c26b55013001061675d.png 6 Y, G( P3 q( a' a7 O' x
0 \3 T) h+ `2 f( p' r9 m0 ^, |5 M

) k' N' a2 c. n) G* T! u( [' |  二、串口Transmit打印实验过程
) {9 e+ y. i% W2 V# a1、新建STM32CubeMX基础工程

7 r4 b2 K' d1 |% a: R: p  Z(1)打开STM32CubeMX,点击“File”-->"New Project"
* Y6 P5 i6 y( c- I) F" Q$ [: y
* ]% f0 n. U! y
2399170347904e959c855fefd5877f84.png $ s' I  Q! U3 X0 m3 `0 v) ~

0 L) ^" {7 h0 U" A5 q( l* Q+ P(2)等待打开主芯片选项界面(大约1分钟时间)。$ b2 K6 `4 |' h$ X4 V. u% j
2 W( c! ?: C) k2 M6 E9 M
d74d2fdc60c9440483e2b7cf8d928e7f.png ( {# X. P$ G/ e& f* J* P2 j# U
4 J& |% y4 s. X' N
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处选择STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。5 w0 E$ i# ~) e7 ^2 f

, f1 a8 F: b; _6 ^1 n
7b80345238d74bea82ce70e1a348f7b4.png   F0 t7 \) k% @
8 e5 u+ p4 D8 |" h& D% Z; B
(4)选择时钟源。/ E9 ?, ?9 \: e" j
4 W! f) @2 D2 J; j$ P! x/ A/ q' J
        因为开发板上有8M外部时钟,硬件原理图如下所示,所以此处选择使用外部高速时钟(HSE)。) ]2 T* I) w  V- h. g

" d) Y: |4 O  h5 O. \
3f65707eca104663a3dede6d25dfa961.png
7 _: C+ \7 `  d% _

" a1 e  W( V( g0 h. g. Q        因为我们没有用到外部低速时钟(LSE),此处不做处理,如下图所示。0 e" c; @& ^8 H$ `* F

, I# F/ E" }6 ?1 F% Y* h  a5 H+ X
72119b971f62410fa8344f7f9fb9f389.png
! x! O6 L0 R3 F3 D" L! j3 E/ y  K7 L: O* V/ M( T# f$ ~$ F7 b! m0 Y
2、配置GPIO控制LED. z) u" g" ^. }5 o! o& B
(1)查开发板原理图得,LED1、LED2、LED3、LED4的控制引脚分别为:
' ^& t" t: j$ S* p  g: k% J0 K! o  y% V$ n3 Q: \
LED1——PC06 Z) {' s. O, h' {
LED2——PC17 u1 b  ^  `9 K, O6 {) o/ i
LED3——PC2/ o: G6 v' i% K/ Y, r0 X
LED4——PC3$ p! |) ], F- S6 y, y  n8 I# Z

1 ^) S+ \( ?- |) i1 q7 E! H: k(2)配置LED的控制引脚为输出,输出频率、输出方式默认即可。2 S- q5 K. K( B+ C

) {% v+ S  q) S鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
" p- C1 c. ^7 ?0 n. ~5 l6 v1 c鼠标左键点击PC1,选择“GPIO_Output”,表示设置该引脚为输出模式。
% ~; L4 }" j$ r9 l, a( ~鼠标左键点击PC2,选择“GPIO_Output”,表示设置该引脚为输出模式。
4 e1 h( K* g; ~7 `鼠标左键点击PC3,选择“GPIO_Output”,表示设置该引脚为输出模式。/ i; T" ]& r# U7 I. q: V7 {

) x7 m3 A+ _" m' u4 G  d$ Q2 Z& a
492907c1e71149819adbaee4516a2af4.png 3 A, d, h) t2 r; B9 w7 h* F) `; _

5 X  }& k+ q+ n  g/ ^9 U
c75d3f10ba2e427d9c1a10fad9bf5471.png
; v9 R! Y+ y( X0 C: X9 n2 X1 _4 [( ^/ R/ g1 m
(3)也根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
" r4 e4 Y# T! Q" V. m" s: R
" {5 t5 c, }3 e4 n2 A! M
38ff4b80e1c5495ba3076a5158fd91fa.png 3 ^) g# z" L9 Z$ A/ T; ~. V
% \7 J2 F( g& `  e. x& }) K) f9 c. f
​​3、配置PA9、PA10为串口2 {. F/ b1 B5 F: @& ]+ p9 l
查原理图得知,串口1使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:
- V' g) {/ E( d1 N
& X2 W, z( t) f7 z
497b8ee0243e446784e64a3c31e8a26f.png + P& V9 R  s5 ~

$ ^/ e9 s  w% W1 p* N' k7 @9 y (1)序号1用来设置串口收发引脚的选择。
0 @! s% R* k2 ~(2)序号2-3-4-5-6设置串口参数,如波特率115200、8位、NONE无奇偶校验等。
* D! @1 C4 r& m+ |: g2 O3 K; i( h
3、配置项目工程参数* h8 S7 z1 H7 K0 d
(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。
5 r; j$ a0 b; J" v
* [% C" ?5 ~* V& O
f3ecedd9323f4463b69539906b3c1199.png
1 h5 K2 T* L) L% t8 M# {2 y( k7 W9 X1 V: X) G7 S* f4 D
(2)完成配置工程。0 T* P1 r: W% `2 o& X
备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。). e& J: d" |7 C+ D( ~1 p

5 p3 t6 m; b$ F; n( S9 B5 S0 k$ [1 V
efdb616174f54925b6eac31109f227b5.png + @$ y$ V, h$ r/ e8 ~2 p- z
​​
3 W# Z0 G6 Y. _- J. _9 H 41c3f2716e4e4eda8f62fa3a1d871322.png
4 J$ i/ S8 b5 P# N+ h! u
) ]" y, g2 |2 R! L, _; ^
(3)生成代码。3 E; \+ B  q1 i+ u; j( f/ m. o
备注:使用Generate CODE生成工程代码前,请确保文件路径无中文,否则会生成项目失败。
" o% ^+ N6 N, j. S' ]( _0 t2 ?; M% w3 |) O) Q- @8 o
8eaa7d0babea40ee93f158481a6ee471.png 2 b8 n5 S2 T: R8 S( z) L: g
​​" a: i- r. x) d
(4)工程代码生成成功。
! |6 h0 m! j0 ^8 x$ P1 P$ Z& N  i; `& u) C# V. s
e8f46d59a1fb4af589feb613fdff17b4.png
- h+ U6 c# M: F0 ?, i( R
  m$ R1 A  E* K' E3 r
三、在KEIL 5中编写代码( S1 ~( y& \$ r$ y" v
1、使用KEIL 5(MDK)打开项目工程文件' Y8 d* a/ u; w# z! m6 {+ |9 n) w; r
源码使用说明:使用前必须把项目工程复制到无中文路径的文件夹下使用。$ }4 k& ^- |4 O) x
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程.uvprojx。8 I3 x! y) ]9 S9 F9 z  V( g4 p- z

0 Q" e+ b  l8 c
20929232f4e647c28257c69fb217c0c0.png * f+ [5 ]* m* Q6 ?& \( [
& L7 {* F% F) G: D2 K
2、添加串口Transmit验证程序

+ ?. s- K' l  E& a" Y(1)main.c文件中,初始化LED1、LED2、LED3、LED4默认为点亮,并在while循环中添加控制程序,如下所示:实现每隔500ms后LED1、LED2、LED3、LED4点亮和熄灭之间反转切换,并且串口每隔500ms打印一次。9 x) V2 z- o7 K9 ~; T; P  i

$ E+ Q6 P/ S' Y0 s3 _  o备注:自己添加的代码需要在 /* USER CODE BEGIN 3 */和 /* USER CODE END 3 */之间添加,否则STM32CubeMX更新代码时,会造成自己添加的代码丢失。/ x1 k) R6 [0 i) z: X
% ~& H6 c" J/ ~+ u
dfff847f2bd84e648d7cc7889951d0f6.png # O) K/ E2 e0 d- ~8 B( W- T

, }8 P5 C: D+ y6 Q
a583fb91001e471cab343790ed9dde30.png : D5 k$ I6 v6 h6 g- E: e
+ m! Y0 P, t0 O  q+ l
(2)main 函数代码如下所示:
/ V. y1 V1 B) s
  1. int main(void)$ C2 V" v/ t1 I2 J* Y
  2. {
    ' B; w3 r* v- U* C0 [8 K9 U
  3.     /* USER CODE BEGIN 1 */
    8 m' r2 P6 D, K5 C
  4.     uint8_t transmit_str[50]= {"hello world,this is transmit function!\r\n"};
      z/ F9 o# w. R0 H! ~/ d% B
  5.     /* USER CODE END 1 */
    , A, y; }0 }- y0 u- ]

  6. , V, V  U- U4 a- s% h
  7.     /* MCU Configuration--------------------------------------------------------*/1 K5 D" G5 z. N/ }: O4 J

  8. 3 L4 t. s1 w& Y; s* n# o
  9.     /* Reset of all peripherals, Initializes the Flash interface and the Systick. */% ^& ]) b1 ]1 Z# x7 I
  10.     HAL_Init();
    ; q6 W, C7 e! f  S" r7 G: Q

  11. : Q' U( b: c' E$ c
  12.     /* USER CODE BEGIN Init */9 ]! I( P2 `$ V, f* F0 Z6 p

  13.   L/ l3 ^" \7 h3 T1 Z# m& P5 J5 |  J& k
  14.     /* USER CODE END Init */6 j& T8 h0 L1 }: D; M, B6 A

  15. . u+ l% d* u2 c" W/ y3 b
  16.     /* Configure the system clock */, P& C% U" q  \9 _0 _* W) A; S. m0 H
  17.     SystemClock_Config();
    8 R3 C5 ^2 M$ @  i* r, g' d3 b, E

  18. & \- q* l. m/ }& G# [& R1 ^
  19.     /* USER CODE BEGIN SysInit */3 S% ?$ f8 ~% ~* f  P
  20. 7 k1 ^4 m# K- W" W* Q* M" f4 ?3 i
  21.     /* USER CODE END SysInit */
    ( K$ N  y& p" Q! {# F9 D. J& }5 X
  22. : r' s/ |8 N: L6 X% ]
  23.     /* Initialize all configured peripherals */
      F+ O1 x; N( w5 B, I
  24.     MX_GPIO_Init();
    ; a, O1 D6 \4 Y1 R- b
  25.     MX_USART1_UART_Init();! d) j1 f+ v$ D$ M3 h2 _
  26.     /* USER CODE BEGIN 2 */
    ' w8 w7 N- h+ y7 [( H( y
  27.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);                                                                //初始化LED灯,默认点亮$ n) `- a( h8 D/ ^, g) x1 L
  28.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,GPIO_PIN_SET);                                                                //初始化LED灯,默认点亮3 P! I4 z2 L) {& G8 w
  29.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,GPIO_PIN_SET);                                                                //初始化LED灯,默认点亮
    # f3 e  g) x$ b1 `) D
  30.     HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,GPIO_PIN_SET);                                                                //初始化LED灯,默认点亮2 J7 e7 n( [+ M- k

  31. 9 z3 f6 y2 W, p- J) ?
  32.     /* USER CODE END 2 */
    2 j* j+ v  ?7 c% k: ~4 d

  33. ) b5 [. [6 p/ J
  34.     /* Infinite loop */
    - k& D+ S* c+ I% C$ E
  35.     /* USER CODE BEGIN WHILE */
    0 O4 @8 ?, \: K7 ?3 d8 F/ `' Y
  36.     while (1)
    * i# D( w% R; z) q9 d8 Y9 K
  37.     {! N/ x; H# _0 M' X. K. }6 C$ Y
  38.         /* USER CODE END WHILE */
    8 ?- u; e1 K5 Y

  39. 1 i% B3 W3 i) b( _
  40.         /* USER CODE BEGIN 3 */
    & N9 W# C9 n4 g* p
  41.         HAL_Delay(500);
    " w- L2 p  o: }4 w
  42.         HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);                                                                        //反转LED点亮熄灭切换
    7 J& N- {: I3 d6 C; I$ M0 E3 [; c
  43.         HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);                                                                        //反转LED点亮熄灭切换
    ( m: |( J% p8 H
  44.         HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_2);                                                                        //反转LED点亮熄灭切换/ ]+ b: ^6 q- x3 v
  45.         HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_3);                                                                        //反转LED点亮熄灭切换
    " b8 _. J7 \+ ?3 c" e& D
  46.         HAL_UART_Transmit(&huart1,transmit_str,sizeof(transmit_str),10);        //每隔500ms打印一次
    6 L0 h( T3 u% E2 W. {# X: E5 n
  47.     }( \9 g1 ?- d6 F% c+ ^% q) u5 S
  48.     /* USER CODE END 3 */7 [8 W$ \8 m* U$ L5 Y
  49. }
复制代码

. v6 g, i! r, a8 E8 A3、设置编程仿真下载模式
7 B. ~- }! D" q+ f. [: l2 {- v(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。
2 I9 B- x3 P) s% J: G0 r7 ?5 W; w5 Z4 }& S2 a( B& |5 D% L
edefb6b9a2a14be3b1221ad6d5c7a8a2.png
' c& T9 s- a' D2 n
# ~7 Q/ B, n$ a9 m(2)点击编译,完成后提示“0 error(s),0 warning(s)”。
8 J& K, ^) d7 h8 [6 Y" b4 R7 K3 V4 {% s9 `& S
e0b7e3e353b345a7987fe5f821de2dda.png
$ k; J) V- C+ H2 b5 g
' r  ~% l. o3 N(3)点击Download(或者快捷键F8),即可下载程序。
* _; o1 q; F9 {3 o, o5 a
3 }. m& S7 t: P' v& Q
eb3f250f19e44862a7df80c2492fcd01.png
! b9 L4 E* x& B- Z8 s5 T​​; o# r  P4 k- ?' R6 l$ r- R
(4) 如果下载程序后,没有看到LED1、LED2、LED3、LED4闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。
1 f8 t, z' P6 h1 s3 i$ Z0 U6 N# ?5 t$ {4 z8 f
9f8aa1a4e8f04041bcf5cb183facd100.png
! F# |; L6 J" {# X$ T9 L$ O# } ​​
7 H: Z9 {" |/ N1 l4、串口Transmit打印实验效果展示6 z& A. x& w: e/ A* _# o$ ~6 N' |
        程序烧录到开发板后,即可看到LED1、LED2、LED3、LED4初始化后每隔500ms闪烁一次,并且打开串口助手后(串口参数:波特率115200、N、8、1),可以看到Transmit每隔500ms打印一次log数据。: j  b9 @9 T( H! U) S1 o" [1 e

) S- ~3 d; I5 \$ f1 ~0 V 39a873987262466bb13106b26e781cfc.png
  G+ m* B* s+ B$ X
9 m% o$ c& A% q2 Y6 W. u. Z/ D! y————————————————/ e' E; z- z0 `- K
版权声明:智能小屋ZYXC* _1 @# ]2 }5 ^& k/ Z% [

( ~. ]: _  v) x
4 t# P. ^. ~! W
收藏 评论0 发布时间:2023-1-14 18:53

举报

0个回答

所属标签

相似分享

官网相关资源

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