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

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

[复制链接]
攻城狮Melo 发布时间:2023-5-11 17:24
串口协议和RS—232标准) F0 N' G- k; _1 L% L5 G& [0 q( D
串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-4858 G* r2 M  V7 Z; ~2 V
RS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
& C' @# u" [3 e
2 m/ P+ M% o, E  P  E- K6 H9 MRS232电平与TTL电平的区别' o3 |+ E1 k' B; @; z% m; _* G
TTL标准:2 ~" J3 X  D, O1 h  N7 [
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。; [4 l7 h  I0 ^( m, ?2 Z0 {/ J( `
RS232标准:, V1 m! U3 g' [) `3 l
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次
" g) B% s* E+ N8 Z& j8 z3 f
  W+ M+ H  {+ y7 Z0 p  gUSB/TTL转RS232
( V+ k# K" y+ h- n )QO54~[Q~}32WBX(8K076[0.png , e+ r( M9 ^' O; Y
, }6 F0 x3 X* `' V5 J+ \6 y+ J
CH340串口安装
- f; ~! }" f1 Z& N- u, e
) F  g8 ^. u% t( J0 }& A! S- A' Y- L
3e2f978cc9cf45dfa55a1b2c4360e87e.png $ J2 T0 [4 t, \% b* @/ ~

* h8 W8 W( h- b; C/ y( n8 Y双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
, ]3 _8 r/ ^& b# x
& r- o% h* Z+ R
ad9072c2ac8640b4bbc660f23224da3f.png 4 n! |) w4 d, T# e  F7 L9 a! ^
& N8 i# Z7 m) P+ [9 ~
+ T  b; C# X6 g) K& H3 A, @9 U
安装stm32cubemx并编写程序% ^7 w& {; y7 B% a5 U/ V0 R, E
傻瓜式安装,把所有的框都选上
! }. g$ \% d4 N8 s) c安装完成后,点击help,下载依赖包
, }/ N0 g! N0 ^8 @- }! e( p
; a" Z5 H: ]8 M5 t/ I6 j: e/ ^4 D
ac4a84eda14b467f97955e2623e694d2.jpg   V. w; q% O/ E% A6 [
. K. M/ g7 U- K0 l( I
下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了) o5 }" N/ P) b( c: X: r) V
你们选择后,点击install now就行
$ ]1 J* Z4 h8 A: R/ A$ e% [3 o  N' K. Q. q2 q5 t5 t4 ?, _
f89d4eef535f44748450be85262698e4.png . t" }% R7 p( t* R3 \" T/ N( t
0 C: d# q0 o1 V+ S; A3 Y+ }- Z: P
下载完成后回到home界面。点击图中的地方,创建新项目  b1 c" K  B& b6 X$ s

* n6 ~, j9 D" t, K( A3 ^
93f884af97f5488abbaf366a2a72c61f.png 1 c/ t4 E3 ?, q$ g8 j

# L3 o2 d) ]' ]1 }( z# b0 r6 o点击part name输入自己的芯片,以stmc8t6
( n% X8 N4 B( q" R0 r, ?- e, r为例,之后中间出现的信息点击之后,在点击start project8 A6 o) ?: U0 K* v8 W2 l
+ T* r3 }* Q- u0 f9 z) \
023f017954964c87a095208538e87b15.png + T" B, B# [2 k+ k( P" N

0 V1 W& _% v$ G/ b% Y# I点击system core,进入里面的sys,在debug那里选择serial wire& b$ ^# u' b9 u' \6 h* R' c! Z2 a
& L; @" C4 Q1 j4 ^& X3 _, [& p
31f33bbac64b405fb096a49d1bc6fdbc.png
; J; p) R. w+ p  h0 B
. }4 N! [9 H  X: t* i+ p1 m! v
12e93895a07d479dbf373c6993c1f5fa.png % X. c2 x8 b# S7 F7 l/ g, ?

; s: Q5 X5 x0 M接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里3 \7 H* _+ `( p- P. `1 l2 f1 \, B4 Q5 @
观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上$ [2 r8 C$ t5 f5 b/ C

4 ~$ _( F( M* T4 m* J- f
f0fd547873664e48b74f41477911e965.png
! R. Q9 s9 Z5 i+ G. U% b8 p9 l

- \0 U; P' h' C5 r6 ?所以我们把hse那里设置为crystal/ceramic resonator就行了
7 d( p  O4 q4 f. j/ T6 ^; X3 g& H( t8 k4 K% a! G
070ccaee64e54cc492b4a8d522bcd31f.png , S( H: j1 X$ @( R6 P; `. |

0 n) ^4 S4 w( f/ y$ ~* [接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7
7 p' a- n8 Y" _: }0 {PB9 PC15
# a8 `7 h5 Z1 z- `
5 }: E. m, ]5 k0 S/ D+ ]
a27cf9e25a154d2d9615672c414ef150.png
& ^5 Z$ Y' ]+ t6 h" ^: ]/ B* ?1 ?. y

: J( }  r# j7 t2 P* O. O. q. h接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight
' u3 p4 H, l( ~/ K$ Zmode不用改
6 \2 a! T* X: q" }5 \' m! @5 u7 V. }3 ?& w' [5 C6 a9 S, L' g" q
59ead86d28ff4d7297bfa61923e85627.png 5 S! Y. r: c7 R4 C5 j8 \

! g0 f7 X6 W5 o4 g0 c点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM4 G# S8 x% n" A; ?' p, J9 \- I6 P

) p# \9 \- `0 E, {" T& K7 p! M
c881621917784142b2f5d6ef969610e2.png
5 p7 D4 v) w/ o' X
/ U8 p' t5 g. P2 o. j8 L  m
进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了# B) h, K" T( W" E
. y% E% H1 B3 x2 C
c67fe11176354f37a9c4fc47a948c098.png 1 U) i, N* K1 p: f, X9 Y

. R' e. X6 r+ g: _  o! W. N5 _打开刚刚生成的项目将main.c的主函数部分用下列函数代替9 s5 P. R2 d& D" M- m0 L$ J
  1. SystemClock_Config();//系统时钟初始化
    ) {: y0 M" `& Y1 D* [: g
  2.   MX_GPIO_Init();//gpio初始化
    9 x5 I* T0 i" K# v3 C' d8 ?
  3.   while (1)5 n* k$ i  P( b% `7 F
  4.   {               
    " W8 d) f* j0 m5 d" }& `
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯
    / `' _& w' Y; o: I
  6.                 HAL_Delay(500);//延时0.5s9 V& Z9 J, T4 d4 r
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯4 Y: Y; v4 J! j7 [
  8.                 HAL_Delay(500);//延时0.5s               
    9 i0 P, e5 e& P: S  K4 j( P
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
    & E4 O: d& @2 B  o6 n
  10.                 HAL_Delay(500);//延时0.5s
    . I3 B+ {) b4 a; g. ?5 I& w( d: J8 N
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
    $ h  E2 K% n/ R, S2 `
  12.                 HAL_Delay(500);//延时0.5s
    * v7 f* W0 J; c3 j9 P6 r; J+ y% z2 x
  13.                
    2 M' r- N" R$ e' H& L" C& a1 P
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯' x0 {+ l1 k! H$ N, U
  15.                 HAL_Delay(500);//延时0.5s3 j, [9 d7 D3 T
  16.                
    ; x  |  N+ x7 u2 s0 @* W( I6 C: ^2 H
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
    $ l; ~5 J7 i$ m$ q" r. B
  18.                 HAL_Delay(500);//延时0.5s
    2 h' i! K6 o2 D& U5 s- B
  19.                
    ( P2 q1 E3 M9 v+ w+ L
  20.   }
    6 o8 ]7 ?3 B+ T  E

  21. 9 o' h8 z( w8 X  x; C& Y
复制代码

* `5 R0 ~6 j1 t 22cb175110fa4a96af460c4e35d48ce1.png
* b, C: t7 T$ z0 h1 a* N
& N) v; i6 ]" }' d) M在烧录运行,串口要断电置boot0为0,之后即可编译运行成功
' P1 Y, R; ^% y! _: B! d

1 B/ I, m1 }/ q& o" U9 Q实现led灯的周期闪烁: U" c8 V# E( [5 l, R

2 D1 R) _8 B! C) O6 Z5 {/ u 8NHG0KIWU$JA0ZNY4{A)0@U.png 6 `( Q- u* q: w$ K
$ \+ U1 l6 D# G* S
进入flymcu进行烧录
1 d' q! E! X0 D' |  ^4 {- n( Y' u4 U# h+ ]1 [; D
044d3ca05114434394681e15df707b18.png
/ @- n9 [+ }4 |& g( {1 E

' U! @# a6 X1 Z5 S5 ~- R效果图如下
# R+ h: ]( F* E; P8 H5 g- W, Y8 n9 u$ [/ {5 q
ff89631870d6418989529cc56ddb27ab.gif $ Q+ t7 @6 s2 P4 v* B/ Y3 j
$ {& H" \6 N4 D1 Z" z
) u' P! A( F  k* P5 R% Q/ X3 d* u
用stm32完成USART串口通信
1 l* c( @* {: R2 }2 ]7 V/ L打开stm32cubeMX,进入我的工程,选择芯片,开始进入
7 B5 L3 |! R  w1 ^+ j; ^4 P3 H& s* c6 x/ S4 F/ [5 m1 T2 {
159a7c0032b442119a729d978a72be29.png : T2 Q( v2 K+ z* _

9 c6 L5 W$ s+ W- E# w" M接下来选择时钟配置
0 P$ a& U2 ~+ o
8 ]7 E% ?* N$ p9 C
4059a3e67e6145ada889513e1776e372.png
) Q6 ^" o$ K1 Q# V6 O) f8 O* u

0 o7 N9 p9 ]$ y7 k设置USART2,点击MODE,选择Asynchronous5 @/ I. z' o9 w& x

1 W* m9 I0 m9 K7 H) f
bf3046a373f245e891b5f9af35f3208b.png ( `, q  h8 Y$ F" t2 V

2 z: r/ d% ~! v7 ?1 W) |4 A& o接着点击CLOCK configurstion选择HSE,PLLCLK
2 M1 E- z8 `" Z# a) X5 [
$ _3 {0 X$ d! m/ W9 O/ l
bcc9107bf51a42ef9ba120a9d836a4f9.png
- |% ^7 v  _* Y" L) \) ~; \
8 s1 U; P$ y+ P7 f6 S# Z
设置中断,在NVIC SEtting中点击Enabled
8 u2 C  E9 O. {; w5 T
1 c" F" f, |* o9 h% |
564cac8a34734fd8ac9c1c9170d36268.png
4 b* o6 h% B: @- `! S" T

" H2 _$ q2 k! y: O7 y后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目
- W* U! b. c+ c' ?- Y  J3 r
) D/ m- |' S: j- d8 F
2486d31a915a43838fb1b172c7a72174.png " ]! v2 I6 D. [" N3 }
# Z" C6 T' {. J+ F; Y' B
5b4e5aa9859046309ae44797de05af6f.png
! ^; S* J% G8 J; a- m) W. @: Z

# ]) D% N& S' k& W0 l7 J后面生成工程打开即可/ o( m. `2 t/ A( B4 Z) d: Q
只需要把main.c里面的程序改为下列代码
0 [4 i$ d- E) h0 e* o
  1. char data[]="hello windows!\n";//发送的数据
      I* ~4 X/ e# J# E
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送        ( _* e' L5 z3 K5 O. A3 q
  3. HAL_Delay(1000);//延时9 b) B( q$ C/ |. t# n( P$ h
复制代码

  Z. f6 j7 v2 I/ A8 a* z# g ff40a9c53a444b94b52db953420f5e8f.png 2 C, N8 S5 y7 E  U( D7 g& b& s; n) `

/ J. H/ T3 M$ j2 N: {9 S4 N后面进行烧录
3 c3 e' F9 O' \6 K+ o打开串行助手打印出hello windows2 [' S* y, {1 S& x- [- P
2 }5 r+ O+ W. Z4 i- g+ c0 [
0e5d2290f35f4c6bbaec437ae636814c.png ! R" Y7 a5 b; w! V. }* L- D0 V! ~
9 ^+ N+ Q0 E  e! g% n+ N/ v
# {% J+ W8 y! [) |# Z- `
接下来进行波形观察
% u6 K6 _8 r+ C; O, p4 l, q* I+ F对keil进行相关操作' v' `$ z/ z0 f% v8 J/ [5 N
' X( ?) L9 A' s' B
e4af5a84177e4ca1a5502f1a52169b6c.png
$ m3 n' t( W- U7 E

) f( c* [6 l. |6 V7 t之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形8 t" ^$ j0 G3 X. s+ i  P* g
5 W9 r/ }$ N2 T! b& D' d
3b479d2791f74ef89814ac75615b5171.png
, _0 N8 X$ J  }

7 j: n3 k9 l) a/ V) {大约1s一个波形% w7 t. D: K$ ]3 A0 B* O
4 v6 v$ R& [3 t) m1 s9 r" Y
686dcd02ded24739b0e0e7e2248dd8d3.png 7 T6 Z5 [7 ~, j
% K! A) {/ q3 t, T' o6 Z
总结: I4 p5 c/ k& Q  ^, h
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验4 J+ o  u% T; |: B+ m% C9 C
————————————————
2 ^! ]2 r2 R. `9 w' A. y版权声明:&是梦都会空
" z, @& L: d0 J1 [" ~" H% U9 `4 h如有侵权请联系删除
' K! x9 b- s# }; J9 W( o% q
: `  Y$ {8 f& K& G  s' L6 b9 t% U3 e6 u. B5 d

0 a+ v+ E- J/ M* R5 z% v
收藏 评论0 发布时间:2023-5-11 17:24

举报

0个回答

所属标签

相似技术帖

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