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

基于stm32串口通信和LED点亮经验分享

[复制链接]
攻城狮Melo 发布时间:2023-4-7 22:10
串口协议和RS—232标准- `: ?* J8 ~: R/ @8 ^$ W
串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485
8 E# F5 d: `! e0 k! t( _, \1 n; i5 jRS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
5 A  Z9 q* S6 {! X+ t7 ?5 d9 W5 Q
6 f" ~2 j, r3 G  dRS232电平与TTL电平的区别1 A1 D& x  R, w. Z3 H! M
TTL标准:- }" W: N4 @+ Z7 k8 Z
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。
! F/ ^" v# Y9 \" WRS232标准:% H: `/ g3 F7 y
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次6 v3 w7 M: y8 |
0 y( X. K: T" f6 w
USB/TTL转RS232

1 c: C# @: Z7 m" d
9 d+ ^- @$ ^' {3 d) _/ {( j$ n( a" `# P3 [; o
CH340串口安装3 F7 ~) S9 |  j$ |1 y0 S0 @

5 }) u8 r5 ^* t& V
3e2f978cc9cf45dfa55a1b2c4360e87e.png
- }4 z* D/ p4 G& f7 `- w
! m- p! _5 b; q: ?5 {5 z" t双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
) Z! |% ~! ]  A4 q8 L0 x$ d/ t( x& d, c. c. ?5 j0 ~
ad9072c2ac8640b4bbc660f23224da3f.png 0 E" h/ t7 k% C4 N5 |5 C- b% G

; B! I6 i- R; z, z9 E7 U! U+ r安装stm32cubemx并编写程序6 |) H) L, a3 x4 ~  W+ K- [" G
安装,把所有的框都选上9 S4 C4 @# B; ~0 v4 j, B
安装完成后,点击help,下载依赖包

. G  [9 v' U# a) o( X7 a
) O7 X7 e1 J" v, X0 b5 q! w  J

# h) m4 w0 H# s5 i- K ac4a84eda14b467f97955e2623e694d2.jpg
. ^' h8 H( S6 s% a) I; ^
4 a; v- u3 @/ u) R0 ~6 N下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了/ B1 T, B$ t0 c. Z! _9 ^! h4 b, z
你们选择后,点击install now就行

9 w# y2 T) h) z5 [& a
5 E' `1 Y5 Q* T: }6 c0 g

1 E! o( A9 w# g! H f89d4eef535f44748450be85262698e4.png
7 F! F/ y4 w6 J8 A+ Z+ F( n7 t) P; w$ d
下载完成后回到home界面。点击图中的地方,创建新项目
" l+ }/ t+ ~+ s3 D  O) T0 E4 B
& j: s8 m0 c4 ~5 {

! _' J, b& N1 b+ I: }7 P 93f884af97f5488abbaf366a2a72c61f.png 5 A$ X8 v8 S. i, ^) M$ l- B

) [+ p- \  I; r5 b$ d点击part name输入自己的芯片,以stmc8t6' S: d: B! ]/ W5 x- d
为例,之后中间出现的信息点击之后,在点击start project# R$ D6 T1 D! [1 K' j
6 f( e5 [6 g  f: b0 M2 l1 ~( n- B
023f017954964c87a095208538e87b15.png - S" ^- N4 [. v- H

. U- x7 N6 a' O. ]" i2 [点击system core,进入里面的sys,在debug那里选择serial wire
# Q& @& J* I1 f
" o5 u" [: ^2 T; t
31f33bbac64b405fb096a49d1bc6fdbc.png   e9 W& K. Q* P8 _- z9 \: X
) C1 }% r# a5 \2 x& u$ t) y2 ?7 N
12e93895a07d479dbf373c6993c1f5fa.png . l9 X& O" E0 c' s; O
, b3 o. i- w7 C" v; A
接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里
! I# R! d. I5 @+ N观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上
/ e2 s/ }7 r0 [) [6 y% Q. O0 o9 K8 S  }& s7 W

, @7 ^; j) }: ]; W f0fd547873664e48b74f41477911e965.png
7 m: x; l5 I/ ~' g7 M) w" t

7 o% w# h7 |' [6 f5 E所以我们把hse那里设置为crystal/ceramic resonator就行了
; }3 c4 g% |# d4 ]
. O& ^# i3 q& ~9 u! D  f
. F: {; v. `; Y, O2 T, i$ R
070ccaee64e54cc492b4a8d522bcd31f.png $ w2 P& k2 W! _; t/ z' A& @

7 _& z8 Q& f( l3 O+ l9 p接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7) ~" ^4 @( s( L6 {7 F3 Z5 ^
PB9 PC15. j* t: ~8 i% X! P* t5 g8 _

' {& g) A3 A- ^6 h# G

0 D( ]4 b1 I4 w7 t- i) F a27cf9e25a154d2d9615672c414ef150.png
( B. Q; P4 \* k  h
6 c' t4 P' f1 v9 b; Y& S+ B
接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight
* w9 ]+ B) a( H# {* Z: M5 S2 rmode不用改$ y. r) r; m3 m$ `' ~
) \  r: o$ y7 G; U: R8 Y
59ead86d28ff4d7297bfa61923e85627.png ( F# @3 E+ D) I6 q, d/ N
: M8 A& h1 I4 s) B# N; ?0 n
点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM
, s! m- G, s) D' L2 d0 Y* E4 \4 F9 U

% \( L  N7 N6 P% `& u# f c881621917784142b2f5d6ef969610e2.png / C5 i( G2 A. d5 C

6 a2 Q7 `: d; L5 L6 ^进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了' c4 |$ B1 W$ n1 L5 G6 G

, B3 Q  U% O1 @& T" v. m c67fe11176354f37a9c4fc47a948c098.png
$ I* V7 L$ w' U; U8 E* U, Y( ~7 |" v& }6 v* \4 e8 d
打开刚刚生成的项目将main.c的主函数部分用下列函数代替9 @3 N* Q+ e: j8 Y
  1. SystemClock_Config();//系统时钟初始化
    ; F8 B0 D4 q8 I/ w  }
  2.   MX_GPIO_Init();//gpio初始化
    - x  Z% ]0 ^* C8 n) K
  3.   while (1)" v  |$ \# `. e' h! n, W1 c% w0 z* {$ M7 l
  4.   {               
    / g+ B) ^  Q% a* s8 B
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯
    ( U- Z( i$ K$ e( X1 Q
  6.                 HAL_Delay(500);//延时0.5s0 ?2 L7 H" }# Y6 `! q: j
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯
    9 t/ s3 ~, K5 d, W( _- A$ R
  8.                 HAL_Delay(500);//延时0.5s                % g. g+ p( b" L* @+ V
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯/ E0 [+ t# L- x: C0 Q/ `
  10.                 HAL_Delay(500);//延时0.5s* e, ]7 f$ t, q9 g. T( _
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯" k. |: r% l0 Z9 G* w' Q! ?( ~
  12.                 HAL_Delay(500);//延时0.5s
    . }" I3 O$ d  u, N( j5 c: n; |
  13.                
    % g( x. h9 x- Q) |& C
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯- s: j9 O* q- d$ r6 k7 _7 _, k5 K* S7 g
  15.                 HAL_Delay(500);//延时0.5s) m4 ?9 M8 i( h
  16.                 . y/ t& Y* Y- t) G; Q8 Q
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
      D" b- c" e+ L8 ^( u9 @
  18.                 HAL_Delay(500);//延时0.5s, v( j; v. m+ b+ R  c
  19.                
    + l; t5 |3 ?$ @0 Y9 l( u
  20.   }
    $ K- C: Y7 G+ d+ I0 s
  21. 7 C7 E9 F* W( w  U) I: I% E4 ^9 c3 X
复制代码

4 s6 L0 V. R& A! f2 c( R! N" ^ 22cb175110fa4a96af460c4e35d48ce1.png
+ U% W: S9 r; d3 K8 X: J
1 p: h# |2 d4 F: a% b; A  i在烧录运行,串口要断电置boot0为0,之后即可编译运行成功
' w1 m+ _, F& X) {+ z7 t9 f5 P
, _) m9 d& R8 T5 C2 J  ?! x实现led灯的周期闪烁( b) q3 d2 `  g6 h% t( h3 B
( m& l6 D* i! y! g
KX(6`_HUGG73G7Z8FBCYPVH.png % u( A3 Z. H5 i2 x; ^: P  z. t

# c* _; a! P7 o7 l, j% Q' A进入flymcu进行烧录
  L2 x- D2 m6 ?3 Z5 g: i1 r2 Z6 g$ H7 Y& t* ?! m# C/ W: N

' u6 c1 e  E$ A6 [ 044d3ca05114434394681e15df707b18.png
, H/ L) s* A, g4 ~3 V" F

4 J8 J# L8 m# r3 K3 b) `% Z5 R效果图如下
* C3 L9 \9 S2 k7 X$ n' L9 @' r+ @- E0 |9 x. }
ff89631870d6418989529cc56ddb27ab.gif
2 V1 j5 o" v# ]* L2 T: ~% U  V( C* W* B$ ]1 R. R4 x
用stm32完成USART串口通信
, H6 `, a# p4 e3 y$ K& O  |3 D打开stm32cubeMX,进入我的工程,选择芯片,开始进入& \1 D- X4 Y1 c! {! G
! O' M- n8 R) P) [
159a7c0032b442119a729d978a72be29.png
# C% `% ]' T# G1 @4 @/ V) G9 z. a7 B, _% R
接下来选择时钟配置
8 `' H3 B3 c+ S
% {/ f' a6 P" K" X* j  \! y; Q
0 D% @# F2 y  E% Y/ E# \7 f+ ^
4059a3e67e6145ada889513e1776e372.png
- k3 u; ^( i3 M' _

8 n" h" c2 _( G3 J! X5 a5 n设置USART2,点击MODE,选择Asynchronous
: A+ Y. j5 t/ E6 U7 i# Q
% M8 P5 }; i' F$ G' @

/ q, @9 A. e6 v2 h+ w+ z: `, o bf3046a373f245e891b5f9af35f3208b.png
* f0 x5 S7 F5 y5 ~0 g1 l: C
6 b& ~- |; ?: H: b
接着点击CLOCK configurstion选择HSE,PLLCLK
- s3 j6 r" s7 z; ]3 C9 v1 H
7 `+ c$ a# o; |# l$ \. O, J
8 U8 N) }& H% [$ e
bcc9107bf51a42ef9ba120a9d836a4f9.png # H0 U4 e- `9 n+ F- y( B
3 e  |" @9 R" @
设置中断,在NVIC SEtting中点击Enabled
; k' F  g% d+ ^6 }% h6 j) R9 R5 G, W  z5 D' Q# [
( ^5 n( |- ~4 I2 ~$ I
564cac8a34734fd8ac9c1c9170d36268.png
3 t0 q  N  a% Y
8 U9 p0 J! v: V4 ]& d
后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目' D1 }" C( J+ l

5 H: X! k! U5 j* u. K' o8 y2 i* q" U* b 2486d31a915a43838fb1b172c7a72174.png $ I0 F- _  T: N$ S
! `6 q; E: }7 h
5b4e5aa9859046309ae44797de05af6f.png   w, j; `( ^7 m; X

1 b; @& s8 ]$ f. _9 _
: m  ~1 s. {% [& l& H6 m0 z  H8 w
后面生成工程打开即可4 j" p2 D" j# x$ \: J0 E: R
只需要把main.c里面的程序改为下列代码/ i  ~* T3 T$ Q0 l; D

/ ~' M) m7 b$ e; Q1 }
  1. char data[]="hello windows!\n";//发送的数据
    , l4 u' ~- l( Y
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送        : L$ \- j6 O3 T: v
  3. HAL_Delay(1000);//延时% w7 }# E- u. S4 Y; [
复制代码

* u) @5 F7 v# t  ^ ff40a9c53a444b94b52db953420f5e8f.png
/ L  h$ v% E* w5 A! T( G! U* o3 p7 E( d( T, P& q
后面进行烧录
3 b, B5 s$ n5 `" W打开串行助手打印出hello windows
1 Y( y9 X! C  f0 }5 p6 q
( x  z! ]. a( F( `% d$ K0 p 0e5d2290f35f4c6bbaec437ae636814c.png ) q8 z" Q6 @. I; B
8 e9 Y$ k: t' n
接下来进行波形观察1 v' t! h% d- M$ _
对keil进行相关操作
) q( c2 K% l. h+ y. `: W2 G0 W9 V, v; j2 J% s, q6 L& W
e4af5a84177e4ca1a5502f1a52169b6c.png # X1 ^4 f& F, s9 G  j2 C; N& O, J+ U
2 V5 |2 e# C5 t8 w0 d4 Z$ O5 n* |
之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形
+ T% i* P4 B2 F1 ?7 u5 s2 G- N2 @1 S
3b479d2791f74ef89814ac75615b5171.png 5 ?, _/ |; M* ^" U& s" n) i
9 u- A0 s$ ^: f8 q0 w' d- u8 u& Z
大约1s一个波形
3 V9 z( X. P# J6 U3 o4 h2 ~5 B& H
686dcd02ded24739b0e0e7e2248dd8d3.png 9 \. v8 V* z+ q! g  i9 N: h

9 O% C1 C" I3 z, k7 z; n总结

- ^4 Z( y" P$ t& x通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验
- {) r: q" W4 F4 J  c————————————————& j: ]4 E* {. o& x+ ?6 T
版权声明:&是梦都会空% @8 j7 V! K* T# x. z5 x$ k
如有侵权请联系删除9 }* H3 D; A7 t/ H* ?: }% K
2 \6 H+ b$ d9 s% f  R
IDFO{}CUKF@7B2YG%`DVKED.png
收藏 评论0 发布时间:2023-4-7 22:10

举报

0个回答

所属标签

相似技术帖

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