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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-7 22:10
串口协议和RS—232标准' g' c, [+ Z4 n% y4 A
串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485+ M( {2 A* N) d
RS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
: {. S8 j) p/ D/ ^7 y' y
% G& G" ?2 B: |3 q: {RS232电平与TTL电平的区别
" q4 x) U+ B" b/ U: V& \TTL标准:' y: B3 |( g% E% i
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。! \9 l8 Y% i: T1 D1 x( C5 H& M
RS232标准:
/ J2 s1 n/ y# r5 r' b- Y逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次; p9 P" P& ~0 }; c9 e9 j

* N- c; q0 f7 I1 cUSB/TTL转RS232
6 F- [' x( z, J; p
! G1 p: Y1 v/ ]

* Y: L! q( a  ?6 CCH340串口安装
, h% r' b9 ]# {) s( R! \6 y) n3 H2 S/ O) [! m
3e2f978cc9cf45dfa55a1b2c4360e87e.png % d4 h% R6 b3 J

' C. v1 H4 Q) W" U. y8 j双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
, F& Q+ F, t- T
; E0 z" }) O2 h( p: F/ d
ad9072c2ac8640b4bbc660f23224da3f.png 0 V; q) @" D  Y7 e
6 H% I  Q1 Z. z3 K3 Z# i: A
安装stm32cubemx并编写程序8 a; E7 v! a# m% p5 b' J. Z6 A7 y
安装,把所有的框都选上
2 k! H1 u( V, q& m' f安装完成后,点击help,下载依赖包

' t; D- I, f& y* k) ]" A! l+ q% m0 _" u5 a
& ?$ O! ]7 {; c8 w% O. P3 O
ac4a84eda14b467f97955e2623e694d2.jpg
. K. V7 {. i# d0 m1 u9 y. I) n- n
. _/ N( y5 f$ U0 x$ o3 n  r下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了
5 i  C. @7 f" e) {你们选择后,点击install now就行

* _* h5 z) X4 \  i5 O
& H; y) _. ]; h4 ~# i% `

- w+ `! x+ k+ t3 D$ m# ]" j% J f89d4eef535f44748450be85262698e4.png
4 G& z& Q0 X& \; m/ _' s9 i' ^) u  z
6 J* k# r# F# q7 D: k+ @) R: P2 h下载完成后回到home界面。点击图中的地方,创建新项目
; F! r( F* Z, }$ o4 p6 n$ o
4 B/ k" r* f& ?) |
0 B4 N! G8 i7 h% V8 s
93f884af97f5488abbaf366a2a72c61f.png   d/ x+ Z# u4 \6 b6 ]" d$ _

! `* e. J+ d. j8 A点击part name输入自己的芯片,以stmc8t6
( v& R6 X: G( J7 l! ^为例,之后中间出现的信息点击之后,在点击start project
* z: r& z8 r; w. g# G0 S5 W3 s! T' g, j( i- F
023f017954964c87a095208538e87b15.png 2 x9 o- o! s/ {8 B4 `! L

- M7 H/ Z7 P; z' y点击system core,进入里面的sys,在debug那里选择serial wire
: h" i! P! }. v
6 i, t9 G  z' ^+ n  S3 [' S: z
31f33bbac64b405fb096a49d1bc6fdbc.png
* U% q9 B3 o' j9 m, U6 R5 N% B+ u
12e93895a07d479dbf373c6993c1f5fa.png
. P3 r' u! T! x2 G3 d4 T4 u2 p" u1 Y0 ]9 ^
接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里6 W1 \" [. R2 G
观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上3 ~! |( d- Z6 G# j% |; {9 n0 s$ d

3 e( A( c: q) j' P3 E- L/ B* p
0 g/ w2 o# R& g3 m! p
f0fd547873664e48b74f41477911e965.png " i5 x3 h5 K1 F. i' a$ @4 u  v

- v' {8 P' k0 B" V所以我们把hse那里设置为crystal/ceramic resonator就行了9 g- @2 @* h: }" J* N" W$ _

/ Y  a' x" y) ]& v' L2 o# ~
2 w% l; B4 l. c: g
070ccaee64e54cc492b4a8d522bcd31f.png
! G; |2 ?; N7 m" f7 t( O
5 @7 H$ x7 b+ }- d
接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7" b* q3 Q$ G. @1 l( c( h
PB9 PC15- d; _, @7 j. T) z8 X

" o6 `9 _+ L  _

9 s. f" ]6 z# b( Z( j a27cf9e25a154d2d9615672c414ef150.png & e! C0 Z" b6 @2 }6 F$ U

+ v+ \" D3 v3 v/ o+ [. V' Y接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight# H6 _1 [5 d! D- b
mode不用改( l! y' ^" Y; }% V% Q" {. _
! a$ S& Y& \& M" ]; X8 {
59ead86d28ff4d7297bfa61923e85627.png
  V8 ]) d% j) j9 H6 D( U. r8 w5 ]: w% R" a
点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM
& R$ W" Y7 V0 f9 b( Z9 _
3 ]* ^$ p' N2 C# d" o1 l

7 \: x- q3 _& T/ \, r* V# ^) ^( N c881621917784142b2f5d6ef969610e2.png
) D( N' G2 g  u6 T% S# ?$ @1 `1 ^
  H, J2 F+ Z' N8 A
进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了  q2 H( Z6 f7 \$ S/ e7 e

$ q0 V7 |8 F5 ?+ W% l! ~0 K c67fe11176354f37a9c4fc47a948c098.png
5 a( V9 L: ?% R3 P' ^( G1 v" y6 q, }/ o( e3 ~; L0 ?( u
打开刚刚生成的项目将main.c的主函数部分用下列函数代替; h% g/ K! Z9 Q, y
  1. SystemClock_Config();//系统时钟初始化
    ) ]- U2 G. ^3 L- C
  2.   MX_GPIO_Init();//gpio初始化
    : _2 v# D! z/ t: K& N
  3.   while (1)+ L/ l- G: ~0 u' U: W; v9 E1 {
  4.   {               
    - K4 e* p, o. \  W7 u2 a- I
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯6 P5 M1 i& L2 t4 [+ @6 C( X* b
  6.                 HAL_Delay(500);//延时0.5s
    : _& K$ f" j& m9 N; l4 C
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯
    ' n/ f' g& D) q
  8.                 HAL_Delay(500);//延时0.5s                5 j3 m3 j/ M3 _% n/ n2 T# r+ f# |
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯1 H" W' v, y( H. M
  10.                 HAL_Delay(500);//延时0.5s
    0 }) e! b/ D, {5 o) Z9 {% J1 L
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯# ~0 ~5 u1 L0 U% Q0 n2 k
  12.                 HAL_Delay(500);//延时0.5s9 J7 t' I0 g. E! e/ A5 ^
  13.                 5 F* F  X# \8 n8 V+ W: F9 x# T
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯+ I/ m& B; h% Q0 O
  15.                 HAL_Delay(500);//延时0.5s
    , R5 s* v$ t- r
  16.                 . `; ?+ _/ t* h1 e: @; n( ~/ l/ C7 p
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯/ e# S# z- l2 Y& B; `
  18.                 HAL_Delay(500);//延时0.5s. m/ W& V) b! O  M
  19.                
    % {7 D4 O% ^$ Y: f
  20.   }( K9 F# S9 a; ]8 W
  21. # ^0 a* ~0 H' g9 t
复制代码
( f8 ]( A$ A: U
22cb175110fa4a96af460c4e35d48ce1.png " D1 u' Z6 F7 Y  w# [, S9 A
9 e+ K/ w1 H! k3 [; W
在烧录运行,串口要断电置boot0为0,之后即可编译运行成功
8 C8 G' B' A! `
0 V6 K# e. p! ^/ I- o* X  p实现led灯的周期闪烁2 U! h7 l. Z6 Q9 E, Z
6 t1 y: M& r; U
KX(6`_HUGG73G7Z8FBCYPVH.png
) Y& H4 Z* d2 _/ n
) J( ~0 }7 m& A3 v进入flymcu进行烧录
: p9 z! m9 y. M" A7 A/ P% \9 y: }  a0 c/ e

) Q9 }4 p& O9 @" a1 _( {/ T0 r 044d3ca05114434394681e15df707b18.png
) M, B( P' V8 _$ X* h* ?7 z3 `$ S

% y& G* i$ x  \/ }0 d5 ?, \0 [效果图如下1 K' u0 @# o- A! `/ u& R) `2 s
/ F7 r6 P% k% c1 m# N
ff89631870d6418989529cc56ddb27ab.gif ) ]9 u1 z# e2 ~/ Z

2 D* {8 Y1 G: _; e1 {* t# s- l# t9 B用stm32完成USART串口通信
' L" f+ ^( K, B$ w打开stm32cubeMX,进入我的工程,选择芯片,开始进入) J# z1 @+ R$ S$ `
3 s) G4 i) |8 D) K
159a7c0032b442119a729d978a72be29.png ( i$ o2 A5 p" f: `3 R7 b

# D% I0 r) O* J接下来选择时钟配置
% b- L) I4 r2 C9 t6 A; p9 ]+ Z. o8 i  D
7 L; x- ~- g8 a+ r4 z
4059a3e67e6145ada889513e1776e372.png
7 v- b8 ~6 u; K" F
! J9 K0 N! G" j
设置USART2,点击MODE,选择Asynchronous
; A4 W2 P! l3 A% E$ }6 z& m' V1 `. x) Y2 a
0 I1 ?8 Q* F( P$ q1 D' H
bf3046a373f245e891b5f9af35f3208b.png
3 L# i2 \( G4 d0 L1 R; ]+ [6 A

4 H  ^- M' `; j) `$ J1 C接着点击CLOCK configurstion选择HSE,PLLCLK
( `/ m1 p8 L9 }. ^. C9 l. n1 Z
: k# K4 l+ c+ U2 X' a1 N

( }( Q5 I1 p8 D( ]9 n bcc9107bf51a42ef9ba120a9d836a4f9.png 2 h0 z( g% ^7 c- @5 v6 C, I0 X7 m' d

8 z, v/ Z# i2 L* e4 f设置中断,在NVIC SEtting中点击Enabled+ G5 t* n, y# x+ I' N% o1 a1 S$ l
) Y+ `5 G$ H0 C

3 x0 @) }( I" d* N0 d4 k2 L 564cac8a34734fd8ac9c1c9170d36268.png & C7 a2 z9 t9 w: \) ^8 Z/ |$ K6 T2 d, E

3 S" _. ]& v: m: U) w# h; {后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目/ g0 ]2 ^) {- w) ]; y" _! M' j
2 U, f, W0 s- s0 l; W
2486d31a915a43838fb1b172c7a72174.png
7 Y, B7 j: h% M. {# Z3 A6 T
4 h* h" S4 ~# @$ b! j: Q 5b4e5aa9859046309ae44797de05af6f.png
. D1 ]5 H. u( q/ X% _- y8 T& O8 u- Y$ O
/ B( D! y/ k4 D7 b
后面生成工程打开即可
1 }( ^6 o3 x9 R' s只需要把main.c里面的程序改为下列代码
7 Q; z7 `3 l. A
; ~) x0 Z! t9 _& `% R$ _; w; T
  1. char data[]="hello windows!\n";//发送的数据
    + B8 o8 k% Q" n/ X/ i
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送       
    1 j0 w( `7 {6 W" G5 E3 y3 [0 \7 ~6 S
  3. HAL_Delay(1000);//延时8 E' m6 _# }+ B2 e4 G
复制代码

0 I4 B/ {3 ]$ H2 B, ` ff40a9c53a444b94b52db953420f5e8f.png . C7 E1 B0 P, d$ V" Z5 t

  e  K) r* e. ?- }6 y后面进行烧录( {& R9 j2 _0 D- I$ [* p7 P
打开串行助手打印出hello windows) j; u2 c+ @& m1 y' _& U1 M7 D# S
9 X5 s" y. o# F; p
0e5d2290f35f4c6bbaec437ae636814c.png
' Z* i3 l) ?! W9 b9 [
7 t; m( G" I% h6 O+ M- j& p接下来进行波形观察
+ ?/ c1 s, `: U. k对keil进行相关操作, s8 g* \. m2 j% H5 _5 L/ q- n
: O0 F/ p5 h- t' N, b6 a- j
e4af5a84177e4ca1a5502f1a52169b6c.png : p+ ?# h( k. W$ @3 g7 }
& Q9 K) w1 z' K  R9 O7 G
之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形/ r. y3 h4 v5 n, ]/ ]
% X, U/ {. D( U1 S; F' E* G' V# R9 n: E
3b479d2791f74ef89814ac75615b5171.png
( A# A5 x4 h4 [/ q0 |4 u+ \5 H; K$ o& J  J3 U
大约1s一个波形, B& ?! y  T; L. S
  |" t# }, e. _
686dcd02ded24739b0e0e7e2248dd8d3.png
. e7 b. Y$ W) g/ r" E+ d$ }, `8 ~' b' P$ d$ v& z; s, U" R* _
总结
( H2 n0 i8 Q' R
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验  w" G3 {! D$ Q# `" L% H$ Y% s, ?: ]
————————————————9 p9 M$ M8 z) ]' }- P' n6 F
版权声明:&是梦都会空5 d4 }4 F( r# U$ K/ V4 o* U4 h
如有侵权请联系删除
  @+ ?5 V9 F' ^. K7 R+ q% D$ w2 k2 f* g4 ^# U2 I7 W6 _- I
IDFO{}CUKF@7B2YG%`DVKED.png
赞 收藏 评论0 发布时间:2023-4-7 22:10

举报

0个回答

所属标签

相似技术帖

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