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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:24
串口协议和RS—232标准
* s( V6 @5 H1 ]# \) U串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485  E" v( W% J+ y# F2 G
RS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
/ o, i, A5 w# y6 P  ^' @' n
% a7 o1 e# ]% a2 S7 IRS232电平与TTL电平的区别
' ^1 K# _/ T; y, j" F) |+ a/ RTTL标准:2 n0 S0 x0 ]: t1 S7 {5 a% Y
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。
) I3 U/ h3 Z/ [2 j+ FRS232标准:
  j  z" o/ |9 P& x逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次
1 v( L- {9 J/ X5 T! ~
1 ?6 x$ H% \' G. m  r& }USB/TTL转RS232
' W3 z0 x7 a* I5 ?- X )QO54~[Q~}32WBX(8K076[0.png 0 D6 Q4 E" E- o+ Q& m

: k& r1 o1 i9 d, x9 zCH340串口安装7 S. @; L4 }4 M2 O. s
5 j( g- e* @+ @% k
3e2f978cc9cf45dfa55a1b2c4360e87e.png
8 L$ W. l) U1 V# {

7 u; E! i. s# j2 {& k0 O双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
' @. }7 ]  G; ~" h0 S* o, v
+ F( D1 i. [1 g! N* i
ad9072c2ac8640b4bbc660f23224da3f.png " i/ P% [' v3 S7 ~# c: s

2 B% I" J: P2 V  s4 D
- Z% |/ o: `# b4 X# {
安装stm32cubemx并编写程序) Z# o# H' S) ^4 Z
傻瓜式安装,把所有的框都选上
4 C3 r7 j6 c" p" G( a安装完成后,点击help,下载依赖包
5 Q* F' N% A, c2 v2 W- H3 x  D2 M0 E" |
ac4a84eda14b467f97955e2623e694d2.jpg
+ ?, x  _; Y5 b  S0 U$ e. l

/ P; E8 h1 r) d1 l/ N下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了/ A$ f; t( b' a" d6 |
你们选择后,点击install now就行
; |+ z0 G) q$ p( J# |5 ]: ~& q7 S; G# @6 x4 ]
f89d4eef535f44748450be85262698e4.png + @" @' y- d4 J2 ~

" `- F: v. ~  L下载完成后回到home界面。点击图中的地方,创建新项目) g6 R3 E- Z# q6 j7 L; r; J$ q# U3 \7 q
- P9 D8 I+ g7 q5 h8 p
93f884af97f5488abbaf366a2a72c61f.png
9 e( `4 \4 x4 C& T9 i( |) X0 R

" d6 E. C$ K5 [/ A点击part name输入自己的芯片,以stmc8t6
: W9 O, I$ Z6 B为例,之后中间出现的信息点击之后,在点击start project
9 S; w! v! K3 F5 D' w1 Z! T
5 l4 |7 w- |8 c8 H9 r; c
023f017954964c87a095208538e87b15.png
/ W4 H! m, e8 E) V  z3 l# \
4 m, ]- ~2 {" e, {; a
点击system core,进入里面的sys,在debug那里选择serial wire8 w8 y9 G$ w  j1 K2 t5 r4 D
" S+ \2 R2 }3 @1 S. J  _
31f33bbac64b405fb096a49d1bc6fdbc.png
& C+ |, z) ?. k- I6 u4 C. t# u! z& _6 v
12e93895a07d479dbf373c6993c1f5fa.png 1 P; u9 N: q1 K; [$ U& S. k5 }
- O$ D1 P9 B. k7 ]" ^
接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里8 Y& j0 v- c# D4 M, o
观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上. ~, [% i7 p- O. G
& {- R9 d& \9 h9 r7 s
f0fd547873664e48b74f41477911e965.png 6 t" ?% G. P2 \- R

+ d  l& t, L1 W8 E" O/ m, b% j, l所以我们把hse那里设置为crystal/ceramic resonator就行了
3 d5 g! u3 S0 z  u9 J$ c  K
: C4 v2 l! x/ u$ @# @( _
070ccaee64e54cc492b4a8d522bcd31f.png
; i3 M& ^1 U5 ^- h) `" h7 E

" y$ s& |- C; H% G  b. e- b接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7' Z: k: d% t1 i' c
PB9 PC15
; p( ~* [4 x& v! a
( d# Y1 H! k. s# T7 G7 d0 C# a- B
a27cf9e25a154d2d9615672c414ef150.png
6 {5 q$ o1 S6 n0 g
' d5 w1 Z$ q  D. e8 I
接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight
* p; k7 g& ?* |mode不用改4 B' Z: h% `5 n5 C4 P  q+ F$ K% ]

0 Q$ d  s+ N% k% n& i
59ead86d28ff4d7297bfa61923e85627.png
+ y, i# k2 u; P& e
& w$ b' x2 m! x8 Q5 u" n
点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM( d" z3 m; o$ ]/ @
, M5 K& X! I. a2 x5 o
c881621917784142b2f5d6ef969610e2.png / @: u8 H# ^( y* k
! ~8 h' n1 i  a* e) k
进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了
5 {/ Y) F3 B5 D# R+ {+ P4 ?! S( H/ J. F! u$ d! u$ @! N
c67fe11176354f37a9c4fc47a948c098.png
1 ^, q# L* f5 t8 e7 a: B/ J1 Z- w
8 D' }! M" f! K( q/ m, @1 o0 q2 ~
打开刚刚生成的项目将main.c的主函数部分用下列函数代替/ C- U, X/ ?) l2 f8 f0 p3 y
  1. SystemClock_Config();//系统时钟初始化
    6 E8 l5 b* J( {5 R4 N- r+ G4 D
  2.   MX_GPIO_Init();//gpio初始化
    * l4 r. ^" r# }& Q" J
  3.   while (1)  x6 C( I3 A4 i5 v# ?
  4.   {                * k9 ~% L+ G* G# }
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯- V" a* y) h8 b# _1 B# ~
  6.                 HAL_Delay(500);//延时0.5s3 \) ^3 g0 ?2 K, p+ r. j4 |
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯( l- y" e& {7 g# B5 f
  8.                 HAL_Delay(500);//延时0.5s               
    5 o6 I+ v! o! C% r& s+ M
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯$ V, y0 ^0 I6 a9 w
  10.                 HAL_Delay(500);//延时0.5s5 Z( ?$ p3 f2 F4 r0 ]' U9 \, ~
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯( p8 N, n* g; P, w& J* G! [
  12.                 HAL_Delay(500);//延时0.5s
    ( u5 j8 D9 i6 R0 z" t
  13.                 2 }" @! U! m0 f  n/ D
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
    + c4 {# b3 z" v: m0 Q
  15.                 HAL_Delay(500);//延时0.5s
    2 }* X$ m5 ?) S  e* C; m/ u
  16.                 & p8 m% k2 F7 v( k1 I3 B2 [% I& }
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
    . U$ s* T  I6 }% ^) f  g; t8 Q; J  B
  18.                 HAL_Delay(500);//延时0.5s
    , D! \5 g$ [1 G! m) X; `. s8 I8 T
  19.                 8 Y/ j% R" q  U5 t
  20.   }9 X: X- r. f: d

  21. ! P  `  V/ Y) b: n( K0 z6 ^1 P0 y( l
复制代码
5 ], W5 ^# H+ r5 L% K
22cb175110fa4a96af460c4e35d48ce1.png 6 r- X  n; b, _4 L6 H4 N
' A3 K2 Q7 ~# P
在烧录运行,串口要断电置boot0为0,之后即可编译运行成功  |' ^3 u! p+ I5 g
  e+ Q( b" f* f2 S4 k" |: K3 E* ~5 s
实现led灯的周期闪烁; u( V# a  F, h* k! f

' R" a* D* m0 q  ]6 s' f" w 8NHG0KIWU$JA0ZNY4{A)0@U.png
# D% p4 F7 Q# a0 u2 _! b1 T2 L3 r+ }1 D3 t/ R1 [' `9 n
进入flymcu进行烧录0 d5 f  B1 i  ?! {3 H
% H% I. J2 O. P5 g  K" q9 ?, j
044d3ca05114434394681e15df707b18.png ' Z3 l) Y0 ^# K
0 J9 ~: F( k' p+ G
效果图如下
. k0 q1 N6 Z+ ]+ O6 S% c& K  |. H
ff89631870d6418989529cc56ddb27ab.gif
. O$ W& E, J# B, z! |0 Z3 d5 j! G2 b5 ^! t4 A% w4 _' }( z

$ O0 X4 @; u2 k9 ^% K( v' G用stm32完成USART串口通信, g1 J, o9 I* ?; p) K9 z% @
打开stm32cubeMX,进入我的工程,选择芯片,开始进入% R% n7 X2 X( t6 ~+ |! ~# F

" b- N+ C) f" V6 R2 B+ ^* l/ \$ c
159a7c0032b442119a729d978a72be29.png
* a, R3 G% R: k% @; }/ Q+ N# P$ d

0 x! I& }; [$ x# V8 F接下来选择时钟配置$ S5 j. ~0 V+ j6 u' f

3 P0 B7 ]* F9 h  u
4059a3e67e6145ada889513e1776e372.png 1 @; S, F8 B- Y  i4 @% H; y
" [( U1 X) N/ |4 E: L( I3 u2 T
设置USART2,点击MODE,选择Asynchronous$ P6 ^+ V+ x9 X) M+ q  B5 |

2 R# R4 e. x- [$ J
bf3046a373f245e891b5f9af35f3208b.png
2 X& L8 h8 T: Z  ^7 h
4 P! L: \( ]4 u* m: b
接着点击CLOCK configurstion选择HSE,PLLCLK: \0 E  I2 R3 |0 p- ^8 N5 ~  R% D4 T

( S* f" q* |9 R6 G
bcc9107bf51a42ef9ba120a9d836a4f9.png
$ O+ N+ r/ x& f8 g

3 W- _. y8 w0 ~; l/ @' K( {设置中断,在NVIC SEtting中点击Enabled
: H4 D, r* g1 n+ y$ h
+ g2 u+ E6 l. q4 j* l
564cac8a34734fd8ac9c1c9170d36268.png
! ^4 I7 Q+ d0 L( \. p% i

- A" p, j" q3 G7 `1 S: f+ Y$ }后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目$ I+ R$ e6 x$ t$ z$ f& E. B' d
% _, |8 _5 D  W
2486d31a915a43838fb1b172c7a72174.png
! e, r2 R. c+ a! A4 j. K; @
5 |) L2 \! M4 E  S  Y. Y
5b4e5aa9859046309ae44797de05af6f.png
& I! @' ^5 |+ K* ], G, l/ p* l- z4 |

9 i9 ]! y6 E9 w+ {后面生成工程打开即可
& P- J# w: z0 j7 m( I只需要把main.c里面的程序改为下列代码
1 h' Q! n* R5 O, k# T
  1. char data[]="hello windows!\n";//发送的数据
    # ?9 }3 ^% d; H8 m# @+ o7 V4 \9 `
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送       
    9 a# c9 F- O" T/ I
  3. HAL_Delay(1000);//延时
    ! ~  [; f3 a9 I5 [- u0 S
复制代码

% ^# K- |9 l5 ]' \; X+ X1 ^+ q ff40a9c53a444b94b52db953420f5e8f.png 9 g- ~9 R* }' F8 X  p" z

2 m* y' c, B+ m2 M, a后面进行烧录
% X, a2 w3 {: o+ _& [打开串行助手打印出hello windows, g# Q0 T& W& U' D3 ?0 T/ S# M

9 {6 T2 A7 W2 r8 O) @
0e5d2290f35f4c6bbaec437ae636814c.png 0 K1 ~0 `& Q; U
. F3 A4 g+ G, R+ T

2 ^& l( u% d: I- I. \接下来进行波形观察" z2 ?# P: u& ^7 b# B
对keil进行相关操作
3 f. a7 f8 J& [, C; _$ f& u- L
9 }; p* x& j2 c
e4af5a84177e4ca1a5502f1a52169b6c.png ( V8 u) P: ~* _: A6 M) \

( r4 E) h' j, z$ t$ j( [- r之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形# C* a4 t) ~3 n1 B- D

: k/ _5 ?' l$ R8 k! y: h6 a7 q& S
3b479d2791f74ef89814ac75615b5171.png
2 L) x* r+ ^- [. J5 D. W- J
* r6 P/ ^, Q& |$ e& J, U2 Z
大约1s一个波形. a. x( h1 l9 ]

4 Y) a( d! g2 A" f. T$ c  t! Z0 I- Q) u
686dcd02ded24739b0e0e7e2248dd8d3.png * Y; |3 X! F5 w' k7 @/ S9 ?
9 t/ n5 x5 l8 `! f9 @: h- _% V
总结: a% {7 ^( ^9 F* I* _) V1 k
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验% ?5 u. _% E! B# p+ N  o9 J6 c
————————————————
9 M7 t1 ^; w5 I. B0 n版权声明:&是梦都会空" y' F: ^7 d( B" [4 i8 x1 N
如有侵权请联系删除8 k% [! A" y+ b5 w/ f! }4 P

* p  B2 z, S" ^1 b& z3 d9 `4 ?; B$ {( A9 |& a4 P
& y7 y7 s1 X! J' m9 L
赞 收藏 评论0 发布时间:2023-5-11 17:24

举报

0个回答

所属标签

相似技术帖

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