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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-7 22:10
串口协议和RS—232标准
% S  L  c; j. T) t) z- j, [串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485
/ G, m* D9 O3 V" }* ]" m: RRS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
6 e3 |, b) z: {
7 k* h; ~4 S% s! s; fRS232电平与TTL电平的区别
7 S3 S1 m$ x7 i2 N  G9 X8 M+ OTTL标准:
4 ^4 y# P( x* V- w( r" PTTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。1 g& P& j* H2 O3 b
RS232标准:
7 h# w& D( x! w8 g4 c: ]/ ?  H逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次
6 m! X. W- P1 Y8 E5 W2 u4 H6 k+ w' {& S
) t. d( d' V: o% K  w& xUSB/TTL转RS232
- w# ?; H% B. F( K/ r9 ?
- L/ ^7 K8 U. l/ @! D2 B* _
6 d. P4 A. A# d9 r  O# L
CH340串口安装
" y/ C3 Q# m% G) v  }
  |3 B8 t( |8 n; F4 s7 a
3e2f978cc9cf45dfa55a1b2c4360e87e.png 3 P3 P6 ]/ ]' R( u

4 F! B- X, q1 ^0 {1 @- ]. I( m4 Y$ g双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340  V$ ]/ ~7 g4 U! d2 X- h1 ?# Y

& j5 _! d; e, B7 s* ^
ad9072c2ac8640b4bbc660f23224da3f.png * D2 o7 R7 L8 c

, `) }& n7 l5 J$ H2 K, i+ z' h安装stm32cubemx并编写程序
3 S& c- K1 D4 T+ M, m6 B3 Q% ?安装,把所有的框都选上7 ~- |/ P" ^: i1 b% c5 T+ [, a
安装完成后,点击help,下载依赖包

0 J9 t& o% S$ G
  Z( C% H. M+ B$ u+ O+ n
/ f6 n. t, G# o/ \& x( s
ac4a84eda14b467f97955e2623e694d2.jpg
, W7 i6 I: |' e4 h
% W. i% g9 }; g4 v1 k! M下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了( n# H, B2 S3 F4 @9 \6 r
你们选择后,点击install now就行

: @6 w4 H; J& |( L$ v7 C, g: N2 l: b, g. q" o+ l! W9 P. N% v
. t1 G. ^; o% a+ M! k9 ?
f89d4eef535f44748450be85262698e4.png
! }6 Z4 p. P1 v! a% R5 A$ T" ]% E
下载完成后回到home界面。点击图中的地方,创建新项目
5 P* d6 h7 e/ U: D

! U  l- g6 z; ^! u5 w5 m

2 g7 N4 C" B  A4 I" W$ h3 {6 E 93f884af97f5488abbaf366a2a72c61f.png
* L9 p! S' s4 X5 F
7 d" V$ _! a* a$ K9 h点击part name输入自己的芯片,以stmc8t6
8 ]3 |2 c1 g1 t) ]  i  @( _为例,之后中间出现的信息点击之后,在点击start project! @- \( H9 P* g

; p4 t4 K* o+ x" N; J8 N! B: |
023f017954964c87a095208538e87b15.png
) j# W5 R2 n  M0 }
) b/ g' V4 ~/ t4 v+ J* K点击system core,进入里面的sys,在debug那里选择serial wire, }/ W1 A" C7 ^0 k

7 w& e2 r% r) f( W( z$ P* D+ R: b
31f33bbac64b405fb096a49d1bc6fdbc.png . p* ?/ ^2 y! W: e

" T; o* x7 F% ]- k8 @1 { 12e93895a07d479dbf373c6993c1f5fa.png % \1 S% W7 W; O7 m4 s3 S" \, {
0 w9 b" W7 ?, E+ {. Z$ ?- \
接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里8 l; b4 D" z2 P) O% {* P
观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上) y) l+ I- A% e: G6 n4 S

) M6 O+ E( h! u- k! m* B

; R) N, W' o6 x, H; O f0fd547873664e48b74f41477911e965.png
  Z3 G5 }. }! `% {6 M; F5 H) Q

# Q0 Y& o, @! j$ E& J. v4 Z( v所以我们把hse那里设置为crystal/ceramic resonator就行了: D) g, G. a3 b

7 G* `- k8 J% {- n
% L+ Y5 \$ I9 p, C3 H& a" i5 l  {
070ccaee64e54cc492b4a8d522bcd31f.png + Z9 Q8 o: B9 D* s

1 p; t! c2 ~3 q( Z/ C% Y9 A  @" F接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7* j. a/ T/ m) \( d
PB9 PC15: H2 o, ]! k6 X4 w+ H3 j  {( H

/ C6 i: k& }6 ~7 j
1 q( L) X! f, t" v: K" ^! i
a27cf9e25a154d2d9615672c414ef150.png
( [, s# S0 b7 O  p! C

1 q9 J# \8 w. P% H% e- m接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight
, c- w& Y1 u7 j, a; }mode不用改
6 v- B! X( N/ k& e2 B& B7 S! U/ H) x; k) ~# A- r
59ead86d28ff4d7297bfa61923e85627.png
, |9 z0 k8 I* M: o$ R7 _7 y3 P6 {  ~/ ?: {
点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM
. |3 V4 e( ~: |5 Q$ c: F: @2 _, O( k/ R! J) f4 e0 e1 a

0 D% p$ I9 k/ i1 e% i c881621917784142b2f5d6ef969610e2.png
1 _, n. Z. c" j; [; y$ N
: c8 K( q5 V8 q$ K1 P9 @4 a' W- T
进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了% r& i9 Y* `# O1 P7 S6 X

) B- X9 W% D- h c67fe11176354f37a9c4fc47a948c098.png ( t7 v4 X0 F. a2 F( \$ B

; \7 Y  a5 l6 L打开刚刚生成的项目将main.c的主函数部分用下列函数代替( U0 s9 }: q1 t; {
  1. SystemClock_Config();//系统时钟初始化* K# o/ e7 j2 @6 A: ]# Z9 }8 x5 H
  2.   MX_GPIO_Init();//gpio初始化- V6 d, V/ x  K- Q) z) f5 e$ A4 s
  3.   while (1)
    , u) f5 M5 `5 v. Y5 n% o* _# @; n4 r0 d
  4.   {                * Y( _; M% j  r7 f
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯
    ! o; A  ^& L1 A1 d) D0 r# r0 l
  6.                 HAL_Delay(500);//延时0.5s
    9 U, H7 c8 `6 [5 q$ G
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯
    , x: z9 l6 S& A8 Z6 _5 A5 |5 q
  8.                 HAL_Delay(500);//延时0.5s                8 _5 F% f0 P1 d6 j, P5 y3 d  N- ^
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
    9 l6 H; ~+ `: _  C9 n& ~
  10.                 HAL_Delay(500);//延时0.5s
    3 O3 W, w! b! {2 m- }$ G- W+ Z  c( d5 P
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯% d. p/ Q' D& E2 H0 R" Z
  12.                 HAL_Delay(500);//延时0.5s
    ' q. j; m4 D& F
  13.                
    9 ^0 v, [( v0 F2 o
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯. b9 d% J7 b* b" O) p" o) Z8 w# ~
  15.                 HAL_Delay(500);//延时0.5s8 k3 F$ M1 z! n
  16.                
    : f0 P3 r8 M$ k1 [5 g& q
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
    9 @* j6 I9 }9 T1 I0 N  c
  18.                 HAL_Delay(500);//延时0.5s5 I" o6 ~& a9 O( f
  19.                 & h1 O" n. ]$ t7 q4 a) p5 f+ ?2 s4 m
  20.   }
      m5 @; a- J2 _& s, O: W1 `, b

  21.   V$ ~8 X( R; i
复制代码
! |% q. I; f3 q3 T1 N
22cb175110fa4a96af460c4e35d48ce1.png
, ^* a+ O8 H' O) w9 ~: L: [/ L9 X7 e/ [" Z: y
在烧录运行,串口要断电置boot0为0,之后即可编译运行成功
0 Y* [+ ?- B8 \; {5 c$ Y9 T4 G& F7 z5 u
实现led灯的周期闪烁
: Y& n9 [# b+ b3 b4 T: e5 Y' v3 W7 D: j" U8 s, D% x7 Q
KX(6`_HUGG73G7Z8FBCYPVH.png + x& ~# e) O; Q& N* K( z* Y$ O5 v
8 M; a. y5 E5 ^& M% g, z
进入flymcu进行烧录) `" b: [( X9 Y0 T

% D7 I- z8 \  |; ]. j  O& r; e$ z  d
" W; T9 o0 e& H' R: N/ k
044d3ca05114434394681e15df707b18.png / {8 s. }; w+ t  v7 N
! C+ i; Y) d& G
效果图如下+ I5 m' B8 g0 F
/ m/ U* _' c/ L) [) {( X! J) T8 [* v1 W
ff89631870d6418989529cc56ddb27ab.gif
4 \3 E( c+ E0 {/ W$ ~
  o" e( Y9 K( G* y用stm32完成USART串口通信
7 s8 B: D. t7 r' q$ \( _* u打开stm32cubeMX,进入我的工程,选择芯片,开始进入& X: _) A  \" ^9 b/ I+ C

  G4 d4 i5 ^) K" P% d 159a7c0032b442119a729d978a72be29.png
! V, a( o, p: d' n* a" h9 B8 @' M* ?9 B
接下来选择时钟配置
0 `) Y) ]4 @& I$ `, w4 v& d: i9 b
" r3 ?7 s5 v6 G
( e# q' F' m# S
4059a3e67e6145ada889513e1776e372.png 1 G$ j8 w2 j8 M9 n" [
, p$ y- m9 V  j, p/ @1 t
设置USART2,点击MODE,选择Asynchronous5 ^$ U: i$ U0 A  Z* ]) i& ~6 p
9 t8 {- D0 i. n2 k9 P

& J- {* n' [+ W  q% b bf3046a373f245e891b5f9af35f3208b.png : T7 m3 a  N1 n! J5 ^
" N5 H& z. e9 T/ q! U
接着点击CLOCK configurstion选择HSE,PLLCLK
, G: l; }- ^8 c9 D/ X, A7 n. |0 `

& K$ \! p, \" f bcc9107bf51a42ef9ba120a9d836a4f9.png
+ r7 ?' A& u" P- D

& W( V# G9 k  u( d7 x1 M设置中断,在NVIC SEtting中点击Enabled$ P' ]: O6 k( w- u/ G7 k- ?" |

. `6 A' r% w3 U( m" @
/ |8 {! q* E3 u) B0 {
564cac8a34734fd8ac9c1c9170d36268.png
7 O5 a0 m; p  ~- G8 L8 B9 ~* Y8 r5 ~
" G! a4 k6 A" M* @' L* n
后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目
2 s( X7 r9 Z+ a8 \1 t0 B+ z
8 P" B. r( i: j 2486d31a915a43838fb1b172c7a72174.png % M1 H3 h+ ~2 w$ a+ [4 ?0 K

6 d' L/ |' I6 _* q 5b4e5aa9859046309ae44797de05af6f.png 3 ~: \% Y: r# Y) O! K
& `$ |. k& \% B/ [- J
" K: J, c; ~  c( p! w
后面生成工程打开即可
5 o1 f  ^. U: a只需要把main.c里面的程序改为下列代码
4 S. h7 H2 U% U2 A& d; d8 U
) R. {$ q4 u" z6 x, h* T8 L
  1. char data[]="hello windows!\n";//发送的数据6 y: p. v) ?( J) [2 ~
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送       
    # p% B2 ~- g# E4 d- u. a, f2 i9 c
  3. HAL_Delay(1000);//延时+ s5 _0 w- C+ ]3 v2 v6 G( b' I
复制代码

6 {% b* a5 x2 w: U* \( N+ v ff40a9c53a444b94b52db953420f5e8f.png
- j, M# W  V8 y* o: ]. X. a0 L( r) k5 K) l( ]- @4 `3 {% s8 b
后面进行烧录" P/ R% O6 R% B
打开串行助手打印出hello windows
8 X/ C6 A, ~/ Q$ J2 M( r9 m9 t' d; U; b6 B9 _$ v
0e5d2290f35f4c6bbaec437ae636814c.png
! a; R4 l4 t8 r& _, |  v" d1 b0 E( C# v( T& ]7 B/ j
接下来进行波形观察
" X; |0 o! P8 d5 K对keil进行相关操作
2 ?" }- {$ S9 d* O1 w3 d% r5 C! S, p; [8 k: ?
e4af5a84177e4ca1a5502f1a52169b6c.png + [  S; w7 g9 Y
, J# Q5 D$ F9 G/ v# C$ w
之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形9 b3 c, O: G( d. t
7 u0 Z* O" S0 H3 e- Y& |/ I0 j
3b479d2791f74ef89814ac75615b5171.png
2 t! }1 X) h( ]8 W, K' L
6 {' E& w% S- m7 X9 P/ \大约1s一个波形: u0 Y5 n. z# S' C: f

5 M5 p) X9 {% X/ X  m! u2 j 686dcd02ded24739b0e0e7e2248dd8d3.png ; F' S7 _4 _1 A- e! O5 |9 P

9 j! T* H; R! V* Q5 {: i+ }总结
1 \4 ]4 l# b0 _
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验/ k5 `. t( K$ K7 D$ K+ \6 @0 C
————————————————
7 e! D* B7 ], Q4 r0 e版权声明:&是梦都会空
* {' q8 u% b  t8 L1 V3 u0 D如有侵权请联系删除
" [3 a6 X, ^# _% F4 u! S6 Z" E) D- a/ [4 i, A  Y* |2 t4 }0 {" l
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 手机版