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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:24
串口协议和RS—232标准
! d: o& j& o+ i9 n串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485
0 b: v0 g& Q+ z: d# qRS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
  F! R' f  ~- y( B- i  M* p1 m
$ Y6 Y% \- [9 x) T0 g4 ?RS232电平与TTL电平的区别$ e6 q2 J# x5 L# |( k+ f  A
TTL标准:3 v2 B+ m# G+ q+ L
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。! f, W: N  l- [* D  W
RS232标准:
4 k1 V' B/ b, k逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次* Z/ H+ m- `( Q9 [6 b+ R/ U

6 y! j; V4 A2 K$ o6 |2 mUSB/TTL转RS232: c0 W: y/ |2 ]8 V8 @
)QO54~[Q~}32WBX(8K076[0.png 4 ?7 Z( @" z6 C4 @% b

2 M3 H* R  y. `  Q2 P2 CCH340串口安装+ Q4 b% a* }: W2 ]; H, h: F5 e
/ z- \. D: j( A- M1 X% p! O: q
3e2f978cc9cf45dfa55a1b2c4360e87e.png ! a3 c6 b8 O. F& e: ^

; G$ z& p: O1 Y! g3 e' j) e: s% H双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
& W  v4 L4 U6 t1 h' r# i5 }2 o7 y* c+ u# K7 I; R7 ]+ W
ad9072c2ac8640b4bbc660f23224da3f.png . l/ M( s6 x3 h3 P  x0 C6 Q
0 W8 H1 J, {: r* y& f

+ J+ P! h# Z/ ^) ?3 h安装stm32cubemx并编写程序( E. ~: A. C' Y1 G; d& V+ C
傻瓜式安装,把所有的框都选上
" a" N4 T$ Q* X0 |# O% Z1 ^2 v7 ^, U安装完成后,点击help,下载依赖包( n* g. Q7 `! W* G8 x- g

/ e8 Z9 s$ B2 H% R
ac4a84eda14b467f97955e2623e694d2.jpg
" R) i: n$ \' k

% j7 Z' H: f; y  p! {下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了$ O9 {! S3 k' r$ A: N. v1 Q
你们选择后,点击install now就行' V4 G) i+ F$ r" n5 m8 l5 q

, K4 I$ b! W" O* j" u, N  v+ J
f89d4eef535f44748450be85262698e4.png / b' m6 I, ^- y
. D' U9 \9 |' w* F4 x8 o0 L5 A
下载完成后回到home界面。点击图中的地方,创建新项目' j4 u/ |, R. Q$ O  a, \8 W# }

6 _% x" Q0 N1 f/ [
93f884af97f5488abbaf366a2a72c61f.png - g+ ^) u* _: Q
7 t+ _- @# B+ w* j
点击part name输入自己的芯片,以stmc8t6
+ M4 m5 X. M& S3 l9 i为例,之后中间出现的信息点击之后,在点击start project
. O. S1 D& }; V# {% D  @  ?( @0 H& ?0 l! m$ ^. ?' m5 Y/ G/ p* L  O
023f017954964c87a095208538e87b15.png
0 ^% j& U9 T8 B6 c! Z0 S

( h. E- k. Z+ }, a点击system core,进入里面的sys,在debug那里选择serial wire% `8 Z1 K1 m; d1 H+ F. I

- I$ \2 f3 h- ?" C/ B, g9 A
31f33bbac64b405fb096a49d1bc6fdbc.png
3 X" h( ~9 D1 f
( _* N- o. O+ h8 L  B8 `. k) t
12e93895a07d479dbf373c6993c1f5fa.png
# S9 I5 |$ b, O8 N9 ?$ U5 t

( F- k4 T' k+ c接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里4 o3 u( p+ M' I) ]9 l
观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上
( \% D) S' h; \/ D0 w" D1 |/ r2 M; N; ]/ f
f0fd547873664e48b74f41477911e965.png
  n5 B( r2 H1 X2 Q

( G. ^. u3 J' |所以我们把hse那里设置为crystal/ceramic resonator就行了) X0 \' d& g5 w( H  c* W6 F

( P5 ?; [. {1 [9 s4 x) n
070ccaee64e54cc492b4a8d522bcd31f.png ) O# p( _6 Q: k# V. f. c+ b

5 M& `# K! J! W% c2 D6 t接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7
) J, t/ F+ Z+ W- T1 {PB9 PC15
0 u3 S  ]/ @% _3 ^8 B! ?
- O0 Z' m+ B5 o' m+ [
a27cf9e25a154d2d9615672c414ef150.png - b5 L+ \# _. {7 s6 n+ c7 }

( @  [2 Y# L: O$ V6 i3 K接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight& e+ X+ ~/ B. h3 f/ a9 z. V
mode不用改
$ r: |+ B2 c! z; S" @
# {3 C# }+ q  X8 Z
59ead86d28ff4d7297bfa61923e85627.png 8 h4 ^7 G  }) K  a

4 u/ _' L9 v- ~( ]5 f- I点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM! p% J, K- a6 j
: Z6 y7 w. q0 [1 G. V# K0 W5 p
c881621917784142b2f5d6ef969610e2.png
1 r1 ]1 o( {% L5 U2 E: l; E* }9 V
" a' j: @# W+ y! t) Y' ]4 o: H
进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了$ w) h9 e2 C3 g

! @) }6 h. k2 r/ }
c67fe11176354f37a9c4fc47a948c098.png ) `9 ?  A0 h6 _) q4 D& J
% o+ X# f! W' @3 u/ R' x7 X7 \' i& E3 u
打开刚刚生成的项目将main.c的主函数部分用下列函数代替
$ _$ a8 I* z. D# ]% z+ p7 p
  1. SystemClock_Config();//系统时钟初始化
    # z# N- R4 `, p! f
  2.   MX_GPIO_Init();//gpio初始化
    3 e* N  W# _* j  Z6 s/ y5 l8 D: Y* F& q; m
  3.   while (1)( a- y8 b& p3 G5 \
  4.   {                0 ~. x7 M- a/ c. v
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯/ n6 F2 ]* M( p3 R; ~8 D8 p8 x( a
  6.                 HAL_Delay(500);//延时0.5s1 W5 S3 \# i( R+ V8 P" l, ]/ V6 o
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯) U2 Q$ S! R$ }% |9 z' q- ]. R5 T
  8.                 HAL_Delay(500);//延时0.5s                0 r1 g  d2 D6 @5 x
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
    7 W1 o; D. p2 n
  10.                 HAL_Delay(500);//延时0.5s' a& v1 v: R& f3 Z: Z
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
    7 K4 Z: i% H3 Q4 M! }# ?" s- y7 w
  12.                 HAL_Delay(500);//延时0.5s" d1 b* E! _% _
  13.                
    " J9 e7 N6 {$ K* V, e1 b2 K; Z
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯9 j7 u: Q- [8 ~3 `- B1 @
  15.                 HAL_Delay(500);//延时0.5s
    & `8 ^/ P9 I, E& W7 L0 R
  16.                
    ! T% e, a% _! A! w, I
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯5 G- l( P) d" T. e1 p! H
  18.                 HAL_Delay(500);//延时0.5s
    6 J1 p$ ~  d- {2 s5 Q/ {2 p
  19.                 0 O) r" z# p7 m% l2 O' u+ N
  20.   }
    7 G- S! o' s/ [* N$ ~, }0 Z
  21. 4 U2 X  F$ w" v
复制代码
1 @8 P" H0 S' _- B
22cb175110fa4a96af460c4e35d48ce1.png   v# |+ v' ?' b& d' z7 ^4 |

# I; V7 O7 x1 J: M在烧录运行,串口要断电置boot0为0,之后即可编译运行成功6 U/ r* [5 x. N4 X! ?

+ Z) I# i1 M2 k$ R0 S实现led灯的周期闪烁) ~! w7 s( M6 @1 I8 x
: Y6 l; H6 E6 _0 n- u
8NHG0KIWU$JA0ZNY4{A)0@U.png
% Z8 ~$ v6 M8 @: _- s
4 X# J! |- B) t0 ^( g4 Y8 @进入flymcu进行烧录
" b7 S  Z4 n+ E. j# I1 X; f2 y( r  s0 X4 H- `
044d3ca05114434394681e15df707b18.png
: S" ~  B7 N6 q& c# p( w% S0 D6 G
, i" i8 i) P$ q: s4 V- Z% A: |
效果图如下
/ n( z! i: L' U3 c1 f/ H2 a
1 G) c9 d( }$ G/ L' E1 p
ff89631870d6418989529cc56ddb27ab.gif 3 K0 X6 z1 v: S: ?- u6 H+ k

9 ~; X+ I8 b- Z# x' V) Q
' N6 p, W! m! w- E# z; o0 x4 C: G) a: C
用stm32完成USART串口通信1 ~6 Q: u& _' G! _) Z- v& A% l
打开stm32cubeMX,进入我的工程,选择芯片,开始进入% @$ z7 W8 E7 [9 a

; L! A$ ^* X5 e, K
159a7c0032b442119a729d978a72be29.png
4 T6 z8 F  ?5 s5 M% R
$ o& t  j  _, D3 Y  h
接下来选择时钟配置
6 U3 G) O1 [: E0 k" }' }8 ]& `+ i- r6 k: Z
4059a3e67e6145ada889513e1776e372.png
$ @" I) F0 @% q+ Q" q

, N4 D; v& ]1 |2 o0 ]设置USART2,点击MODE,选择Asynchronous5 ~4 A/ d5 D- ^2 m% k
) e, W1 P( S3 Z% _2 S9 p& W, u
bf3046a373f245e891b5f9af35f3208b.png 8 ]% U  t8 C' {, F' A" b/ n

# m- L) S$ X$ K0 @% e6 ?& E接着点击CLOCK configurstion选择HSE,PLLCLK
6 j! s8 ~! H( X5 ~8 Z$ l# ?- M5 J3 b& Y7 U8 f9 S; L# y# G" C$ k9 j* {" ~
bcc9107bf51a42ef9ba120a9d836a4f9.png
  J7 E8 C; c6 t) ^

7 H& O7 K+ Q: ?4 J+ R7 J设置中断,在NVIC SEtting中点击Enabled, s  W! a0 L% o! V3 E; [

" }7 Y3 ~  o' B$ Q- m
564cac8a34734fd8ac9c1c9170d36268.png . _8 Q( |& a4 m- p* B0 s
9 n8 b4 c5 f" h" M
后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目$ a9 s9 {6 R8 @
' l; a" a% G! W1 ]9 r
2486d31a915a43838fb1b172c7a72174.png
  C1 L1 M# x8 o
6 P% S# e# o, o# A, L- M( ^6 g
5b4e5aa9859046309ae44797de05af6f.png 6 C  {* ]. J* J' J8 C  _
2 m) h: s9 T# m. N0 m# T" T0 X0 F
后面生成工程打开即可. _; N( D' o- D4 t; O$ [3 b# W$ m
只需要把main.c里面的程序改为下列代码. d: C" q  Z3 D- O" k
  1. char data[]="hello windows!\n";//发送的数据
    ! b$ Y, |) R4 M( S/ g! E7 J
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送          W3 c, M0 i5 J$ z9 v$ K0 n
  3. HAL_Delay(1000);//延时  p9 v) K+ Z; }, L) X* H1 u) r9 w
复制代码
0 H. n9 F3 Q% x0 S$ Y
ff40a9c53a444b94b52db953420f5e8f.png # T: K3 e0 `! S2 H4 U

9 Z5 d; p7 ~+ A# L) v后面进行烧录
0 m6 s9 a2 |3 w; o打开串行助手打印出hello windows
5 x7 |# _8 ~: h
& H! E  u5 W' Y& a' W& {
0e5d2290f35f4c6bbaec437ae636814c.png
8 |, u& `( z2 C7 O9 k. \4 r+ `& Z, G) t. ?1 s8 K: D) z$ u
, k; I5 N, B- \9 t7 e
接下来进行波形观察
# _) }% Q: f# Z6 t* G& C, [6 l7 j对keil进行相关操作
, r& r) p9 V! p; X+ f0 J- a7 T& P! j% K! c1 {# H. z% K
e4af5a84177e4ca1a5502f1a52169b6c.png
! `5 ]6 P- h0 H* J$ Q' g  J
# ^3 P6 H3 E3 p. ?; I. L; q
之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形
8 V% w) ^- _# X/ r  h9 n- `
" M5 l$ H% |. L  _
3b479d2791f74ef89814ac75615b5171.png
' K" o0 I* r9 n/ E
. n3 p1 b+ X2 ?. V& R  v
大约1s一个波形2 n) `. l/ y  O  e. _# U1 S' v; y

* z  M# c& U1 a" I. G7 e$ w) g
686dcd02ded24739b0e0e7e2248dd8d3.png / z+ f5 I5 J$ n

% I; V( v6 u4 n' _" B总结; c% J5 s, K" K; ^
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验) _4 H# z1 K- o1 n3 V. j
————————————————
3 Q. r; f+ A1 ]/ }版权声明:&是梦都会空; E* a$ S' R. z2 @
如有侵权请联系删除
4 p4 }) t2 O# N7 J0 F: ?
0 Z% q. b! {9 f/ f: x
, @' E) A4 g: A" L! k
3 K1 C5 W. m" ]  H8 _7 o( Y7 r) B; y. [
赞 收藏 评论0 发布时间:2023-5-11 17:24

举报

0个回答

所属标签

相似技术帖

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