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

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

[复制链接]
STMCU小助手 发布时间:2023-1-15 00:07
一、开发板平台简介:
+ m6 `3 K5 J$ k1 j; O6 t1、开发板资源简介) N: h6 a9 z( c
(1)开发板主芯片型号:STM32L431RCT6
$ r0 B" d* {; n( r* {/ H  y(2)开发板主芯片封装:LQFP-64_10x10x05P
  K9 `( O$ y0 h% M% k(3)开发板主芯片内核:ARM® Cortex®-M4/ v: C$ e, c, m7 m: y4 S
(4)开发板主芯片主频:80MHz3 p% G  m" P: V9 l0 \; u8 a9 j
(5)开发板主芯片Flash大小:256KB
8 P& K1 t( U" a2 |# I, ^. E(6)开发板主芯片RAM大小:64KB+ p' K+ D9 @# G/ R
(7)其他外设:请参考芯片手册( |' X1 O+ c* N; H3 U- Q, p6 ~2 _9 Z
( K- B8 Z2 {, K) J
bb91345227434ee7a43a34bf3fe366e6.png
) l1 m# q* o% d9 Q' C  s
4 ^2 X1 i3 X; i2 }

/ ^* V4 _/ M/ x9 p5 S) g 929c0cce04aa4115a8623703982bf3e1.png ) H& O1 N/ l9 H) T
2 j' [+ N9 J6 t
2、串口简介! B2 T! T& r7 J# B
         串口全称为串行通讯接口,即数据在通信线上一次传输一位,按先后一定顺序传输。我们通常所说的单片机串口准确来说应该是串行异步收发传输器(Universal Asynchronous Receiver/Transmitter,UART),使用TTL电平,串口需要RXD、TXD、GND三根线进行通信。
& Z! v1 H) A! R2 l; Q+ ?  V/ l        (1)我们选用的STM32L431RCT6开发板串口1已通过USB转TLL串口芯片CH340G引出,使用时,只需要用公对公USB线连接电脑即可(注意也得需要安装CH340G驱动),后期验证试验也试验该串口1进行。
/ x+ m7 v3 N1 B# m        (2)开发板上的其他串口已通过排针引出,为TTL电平,通信的时候需要注意选择对应的电平模块,如USB转TTL串口模块等。5 T/ A& _% Y  y$ d1 D6 t( Q9 U6 j
: \- `) c/ i! u8 l
! N: |* X" Y+ {, U
  二、新建工程
2 Z2 L$ A9 \( P; k6 m5 I0 S+ X% T1、新建STM32CubeMX基础工程
7 @. O8 \9 P% N. s" E" f( E(1)打开STM32CubeMX,点击“File”-->"New Project"# t) h* s* u( H& c! h& w* c

4 O( w2 c3 F1 N# B
$ r; O0 c8 N# Q  g% c1 v6 o
2399170347904e959c855fefd5877f84.png
3 `' Q, r1 \2 v! ?) Q( N2 K. X, ]
9 s. l) h: K2 {* z% M

/ \% u. W; ^* c3 h/ j(2)等待打开主芯片选项界面(大约1分钟时间)。
. D! ?) x( }( q1 x4 `* E& b$ w& l' r) `9 b$ B

* H' [/ Y7 [5 y% D5 | d74d2fdc60c9440483e2b7cf8d928e7f.png
1 G" C9 K% ~' L; L2 V" F2 ~8 X% Y2 p2 \: T
, L; p  \7 H/ ~9 N1 S% w
(3)昨天搜索框中输入(或选择)所需的主芯片型号(因为我们用的是STM32L431RCT6开发板,所以此处现在STM32L431RC),然后在右下角选择STM32L431RCTx(因为开发板主芯片是STM32L431RCT6),左键双击即可打开新建的项目。
- B6 e0 ], D- _8 b- ~; R$ E$ n" f' @3 ~& d' h* m2 |! ?- d

7 X! S& k: E! d6 N# o: m+ J* s 7b80345238d74bea82ce70e1a348f7b4.png
1 y: h) {/ z4 S3 d6 q5 r3 N( D0 [6 C; @

' h. L: a8 m$ p8 y& |(4)选择时钟源。
$ K/ h5 G2 f4 P3 w. |5 F(1)因为开发板上有8M外部时钟,此处选择外部高速时钟(HSE)。
' Q/ q5 Z5 g/ ^3 T" A- ~) ^(2)因为我们没有用到外部低速时钟(LSE),此处不做处理。! y) J0 m  j$ E5 G( B; E
4 f: H4 l/ w( E3 Q6 v3 ?6 S9 {

* A! K) ^# a; ^% z( t& q 72119b971f62410fa8344f7f9fb9f389.png
$ \/ n- s# I8 @! m7 W0 U/ b
  H  D! P6 J) f- ?, p2、配置GPIO控制LED" U4 g- u5 [( Y4 I, _' j+ m
备注:LED灯用来指示系统是否正常工作。: @7 l/ k6 `- [/ R
(1)查STM32L431RCT6开发板原理图得LED1控制引脚为PC0,则配置GPIO的引脚PC0。7 u9 G) O3 S' s9 j, F" s" C
鼠标左键点击PC0,选择“GPIO_Output”,表示设置该引脚为输出模式。
* y& H3 s% ]0 Z 492907c1e71149819adbaee4516a2af4.png
! V% W# L! Q' b- N
4 A! E& y1 o, D& [

! @- a; E: d7 F2 S* }/ g(2)根据自己的需求配置GPIO的参数,如输出方式、输出频率、上拉下拉等。因为GPIO控制LED的要求比较低,此处采用默认参数即可,不用修改。
9 o3 D' J1 w+ ]9 y# Z' ~) u$ P
% P$ J' R1 E4 t/ p- M* r

( Q# q0 o6 v; y 38ff4b80e1c5495ba3076a5158fd91fa.png
2 s/ }' h) `- E5 D* w* }
; Q6 S5 P5 \6 q; t0 j3、设置串口1参数) [4 ]; F" ]6 |4 ?
1、查原理图得知,串口0使用STM32L431RCT6引脚为PA9-USART1_TX,PA10-USART1_RX,引脚设置如下:
' q: f2 h6 v0 o9 q2 I4 |4 m$ g
4 h- ?5 N0 u0 ~' l
" E, \# ?# x/ ~$ D, x( A
497b8ee0243e446784e64a3c31e8a26f.png ' ~  n* N) U0 R# p+ l; p: X8 y! A

7 L& o+ p( y: q, C) \
9 A+ d( R+ L2 J  T' j5 |) a
(1)序号1用来设置串口收发引脚的选择。
# S* j8 K/ f* o, `) @8 t(2)序号2-3-4-5-6设置串口参数,如波特率115200、8位、NONE无奇偶校验等。/ A, L' ]' J6 H
( K$ W4 y4 r4 u% B6 v
( u6 J+ V* G0 _/ o
4、配置项目工程参数4 ?$ S+ r) w, a: p( ?( w; B1 M
(1)配置时钟树,用于系统内部时钟,以及各个外设时钟等。此处选择外部8M晶振作为主时钟频率,内部最大倍频80MHz。$ T( E( C9 e- N. {, `9 l
; G9 ]( C# ]* D
1 Z. Q( f( f6 a5 L8 Y/ a
2ce1933c10484d819234682f4abc0228.png
* M& G5 \5 Y* Y) N; C" j0 y" k9 \: Y' y9 p" [0 M0 Q
. [# J: @7 [  B
(2)完成配置工程。
$ f2 A$ W. \$ t" O* L备注:需要注意代码生成过程中的继承关系,如图所示:需要保留开发者自己编写的代码时,请根据配置设置,不然生成代码后会删除自己编写的代码(从这个方面也可以看出开发者备份自己的代码是多么的重要。)* K  I: w. [0 J/ a4 b3 C& ^8 D

' H6 s  ]/ [, G
" l' T- w) F$ q9 W" E) L& e* a6 ^
efdb616174f54925b6eac31109f227b5.png ( s/ S) Y. e/ p( f; H
) d& b: U$ n/ K+ q7 L" G
7 \, R; j$ C5 x2 ^& P, z( ~* ?
41c3f2716e4e4eda8f62fa3a1d871322.png & a5 p9 C; K9 m! i% i
5 z6 O# V. g& c! h( V5 |" u
3 d8 L6 f& I, f" Q/ r6 _# q5 H9 c' e
(3)生成代码。
  \5 a  I1 a$ e- R
  A2 L& F1 Y; g
" @3 ^+ u8 H$ v/ c
8eaa7d0babea40ee93f158481a6ee471.png
5 ?* y8 i! v$ r) }$ w7 N( i
1 f& o- d5 J  b* u+ u- p

0 M. v% l8 A# c* v3 k% C. J/ e 三、在KEIL 5中编写代码9 }/ {3 z6 ?+ O" c7 X
1、使用KEIL 5(MDK)打开项目工程文件% h5 s/ m. t& a. R1 N
(1)找到刚才新建工程的存储路径,安装项目名称,打开项目工程。
7 }/ g1 P7 A% g: j7 M0 f; X: r) @
1 b/ D- {/ y3 R7 L
3 y4 s3 V5 A4 B5 v4 _8 i; U
b1219ad7140c4bfea599e2d523473e51.png ( N. w9 ]2 V5 {' c& W( z

7 r2 Q* T6 k* @+ K, O" |
, I0 W5 N9 ~- U/ v
(2)添加每隔500ms,LED1闪烁一次的系统提示,用于提示程序运行正常。
/ f; H0 l6 V& A& k6 `4 O0 V0 W9 E5 a; D3 C- N9 x. s$ \

% {) I$ a+ D% Z6 ?3 T 6ab72ceaeb7a41af833842fe5ba6f34d.png & R0 ~) v/ X& v' i  [. P
( y& O/ i$ J& i. [/ ^- {
2、添加使用串口发送函数打印log的代码
- X) {' T4 t- A(1)STM32 Cube函数库的串口发送函数分别为:
. a3 Y: a+ j' m- \
; b* j8 N8 _5 U' N: }3 M
+ l* _' f, @" ~6 j5 V5 _( q4 F
HAL_UART_Transmit、HAL_UART_Transmit_IT、HAL_UART_Transmit_DMA。本例程为串口发送函数HAL_UART_Transmit的展示。
/ w. t$ d7 _9 e# S" a+ L
  1. HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size, uint32_t Timeout)* U1 [- {8 ^/ M/ m$ Q
  2.     - O0 ?2 H; E5 E; `9 p) k/ k
  3. HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
    : a1 p+ F" I: h! c9 D6 O
  4. . V. l& X4 E% q/ n; d6 j$ O
  5. HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)
复制代码
1 X: i5 {, Z& a
(2)添加串口函数发送数据的log。+ V% o% H  O4 o1 _+ z& H) `' l
8 y# K- ]& }# Q7 [# Z

  z  z# _( a) e% I1 V, D* c 6b0880ff9a7e44c18ba92b20895fa204.png - [; T) H1 M* R6 s; W
4 U; _6 z- I/ A2 j( w7 D

+ x6 F# c7 I/ B9 A! f
  1. while (1)# W4 H' t( q6 m3 d$ N* U( z
  2.   {2 d8 u' Q  p" }6 J( |% E+ B; }
  3.     /* USER CODE END WHILE */
    8 J/ l& N  n$ J! `4 i

  4.   i9 a3 B' T, F& B7 w
  5.     /* USER CODE BEGIN 3 */! Q; A8 g: O1 t
  6.                                 HAL_Delay(500);1 o" {/ d/ l! I% t9 [* P- T9 r& H
  7.                                 HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_0);                //控制LED1反转; X: k$ T1 R4 D3 z
  8.                                 HAL_UART_Transmit(&huart1, (uint8_t*)"hello world,this is Transmit function!\r\n", 100, 5);
    * E9 u& h5 Y  Q5 Q; [) c4 A: O: |
  9.   }
    7 f  ~, Y& P0 j3 Z# }  @4 ~
  10.   /* USER CODE END 3 */
复制代码

" Q4 _: J0 ~: V0 D

) j7 o8 }7 `7 v  I/ e( Z 3、设置编程仿真下载模式
1 [: S/ T2 f& J3 _(1)选择Options for target ...>>Debug>>J-Link/J-JTRACE Cortex,点击Settings>>选择Port(SW),可以看到搜索成功SW Device,表示芯片可用,可以下载。; y- ~" _! p9 _0 J
# c7 a1 S! o/ ?

0 Y& F/ [. V* E- ^ edefb6b9a2a14be3b1221ad6d5c7a8a2.png
3 X3 g3 `. k* H6 m7 t9 v+ o. w" U6 h8 _+ p& f* M
0 B" Q# J/ r& J9 z
(2)点击Download(或者快捷键F8),即可下载程序。; g) ]* u: `+ u% X# n. z" ^7 p( w8 t! E

4 ?9 k% V! \# f7 j8 o6 ?2 E
( N5 y+ e# `4 g$ `8 {% W. [  x
ba221842d5db40808aa129dd83c593d0.png
1 V6 P+ B, K& D) x$ L
  e+ M# @# R4 G9 y. P/ M5 x
7 E' X, w6 b+ Z. |6 w) F
(3) 如果下载程序后,没有看到LED1灯闪烁,可以按下述方式设置一下(Reset and run表示下载后自动复位和重启运行)。或者重新彻底断电再次上电(或按开发板的Reset按键复位MCU即可)。* q( A4 s0 y; G8 x7 E
& f$ g0 N! v' }& f! U9 w. f# z
$ a' c! E7 c1 U, S/ E
9f8aa1a4e8f04041bcf5cb183facd100.png % `) f$ `& {7 p- g! C

- ]$ V& @/ d1 ^6 G- v

, T9 G  H' k& X7 u4、查看串口发送函数打印log效果
5 b. |! \! |/ k0 P# E, s, u(1)设置串口助手参数为:115200、NONE、8、 1(和代码中串口初始化参数一致)。" d! ~) T  v1 q
(2)设置成功后,就可以看到串口打印的效果。每隔500ms闪烁LED1指示灯一次,且串口输出一个log。
* t3 D7 }: g* J* p+ L3 X3 D1 A5 \7 w
! r/ S$ e3 t2 J( ^; L- Y3 a2 b; C6 C

1 {  X- `5 `% o9 N 6750a28b29db430c8dc3a84b47c51b1a.png
0 ?8 g8 d' m5 T. i& \0 o
0 N& o6 E; k6 y* I. U6 P7 {( @————————————————
, k* u( x% t' G* A$ ~8 t& v版权声明:智能小屋ZYXC( u/ ~# R7 _6 f! [
9 `2 S3 R3 y& L  w( H
收藏 评论0 发布时间:2023-1-15 00:07

举报

0个回答

所属标签

相似分享

官网相关资源

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