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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-7 22:10
串口协议和RS—232标准
: @+ ?6 q9 _. g串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485: M3 o8 T9 y  N) Q
RS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
3 a+ e0 S1 w( ^8 f! X8 q' Q& V. u2 l) r/ t; m
RS232电平与TTL电平的区别
6 l' |( ~3 V" g$ _: C5 DTTL标准:
7 a* H# [& }7 Z" O1 |+ a5 wTTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。
# E. @" i/ y" A$ x/ ~RS232标准:7 f( T+ h4 G5 A6 G! D, h( q
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次2 U3 h2 C+ c# y

% H( V% y3 k! X, b. i# r, [USB/TTL转RS232
% c( Y' {5 R6 C: ?
* S! b5 E- z6 u& u. n: @* I) R
# g, p6 q" S5 q, d3 p
CH340串口安装
: _/ m' P( ~3 o/ ]% j9 M: k( M
# E! H( ^! u4 u; H& H
3e2f978cc9cf45dfa55a1b2c4360e87e.png
2 N( l! B- z& B, ^
7 O) v7 H' w, d. P& ^' n1 l; c双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
2 P% \* j% v/ S- y+ x* J3 _. p2 k: I0 ^" W
ad9072c2ac8640b4bbc660f23224da3f.png
% ^- ~3 k8 T; u
: p, y' h: J0 n. I0 f安装stm32cubemx并编写程序3 ?. Z7 n* K* h
安装,把所有的框都选上8 O) L/ ~$ L& M9 }+ D2 P
安装完成后,点击help,下载依赖包
, Q- t2 d3 A' E
) l2 K. @" G- W% |! G' w
* s/ r: B4 R& k8 b# q
ac4a84eda14b467f97955e2623e694d2.jpg
. o! `( S# g3 J8 H! C0 P' I
6 U) J8 g& {  m" _( f5 \下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了
8 B. z& L+ D  X4 C4 X你们选择后,点击install now就行

% b4 O! e( z' W, j; r0 F- M
' l# t+ M, V& ?& |# e& \( q% m" {
4 D" T! C( i- W) l
f89d4eef535f44748450be85262698e4.png
9 G6 D8 n: q- m3 _- I+ C' X! _6 l4 Q' F- Q
下载完成后回到home界面。点击图中的地方,创建新项目
4 j5 Q. J  u8 Q% n4 `& b

; D# ]- s* u/ W- j2 R8 I- e

: }) G4 x$ ~1 J/ c8 q 93f884af97f5488abbaf366a2a72c61f.png 1 W; F) F; f0 L' U1 M

: @  C; O( k' i* W点击part name输入自己的芯片,以stmc8t6! G* p/ j/ x: m5 l" J2 g
为例,之后中间出现的信息点击之后,在点击start project
/ P! r, o" m( n3 G) b3 m! x* O! P3 _1 N1 I) R/ N" M
023f017954964c87a095208538e87b15.png 5 j1 X9 R+ C4 X! M$ `

. f7 z, z4 _% r1 p7 d( ~点击system core,进入里面的sys,在debug那里选择serial wire3 j; A: X" _! H3 J  B3 h
0 q0 v* `6 _9 }0 P6 ]1 b
31f33bbac64b405fb096a49d1bc6fdbc.png
; n  B' D' z0 y8 Y8 f& s4 P& ~- i+ F7 G) l4 o, m* Y
12e93895a07d479dbf373c6993c1f5fa.png ( m8 {8 I  }  ~; {& h& n- z
' Z5 r$ n; S6 G
接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里
$ m& @) b; S. h) y9 ?3 P$ N% |观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上$ B5 d' v8 ^9 a7 U) j6 ?5 M( |5 A
4 S& e- f" j6 d

' k5 n. Y' B! b) ~) z8 c4 B& n4 }) m f0fd547873664e48b74f41477911e965.png
& M8 `( k" ^) b3 o: @3 Z; A
3 S- i" s+ G& `9 h) U/ A3 F
所以我们把hse那里设置为crystal/ceramic resonator就行了% y# P" o1 Z: U" @5 D

0 A' l* \4 i) x9 y, D  q$ M
5 ~8 [& L: K6 p
070ccaee64e54cc492b4a8d522bcd31f.png ; F2 `/ e/ f; r5 d) h  Y
9 M% @; t( Q' w# \; ^2 g
接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA74 ]% W# V! K8 E8 `/ m0 l6 f
PB9 PC15
. l' ~( h9 P. b, C( h4 d& ^& {' w2 U( s, e# Q

  E+ z% H& Z; V6 p a27cf9e25a154d2d9615672c414ef150.png 7 _0 m+ ~  }: D8 u' V2 X+ Z6 N
* @  M- P# b) M0 X/ y  C
接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight
7 b1 X7 p& S% X4 y4 M+ U2 b( _mode不用改( `. `2 \( v$ G8 S3 s) X
$ u0 Q7 R8 W0 B9 R" z- O
59ead86d28ff4d7297bfa61923e85627.png
/ b6 N4 x8 b: ^" M% L3 k* Q
& i$ G8 i& H& q, y" W' p点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM
8 Q. ~$ @3 W0 {/ F
) S2 q* ^$ c" g3 M/ |
' `9 y4 G0 n5 h% N
c881621917784142b2f5d6ef969610e2.png
! V; y% s2 {& [. x4 d5 j' L/ [8 v
" H8 ]) J9 g4 w
进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了
" F& w, @( z" E8 N" c
1 F$ N7 C! X3 q% s: Y c67fe11176354f37a9c4fc47a948c098.png + B- _6 z  k. ]0 g1 \9 j4 V

% [; s+ |6 p: @$ x" E打开刚刚生成的项目将main.c的主函数部分用下列函数代替" X8 M$ u2 m; m1 z" \! ]1 Y& O
  1. SystemClock_Config();//系统时钟初始化
    % u4 K4 z% D+ k' T; a' v' `8 M1 ~- M
  2.   MX_GPIO_Init();//gpio初始化
    / _4 W5 b/ E* U" x
  3.   while (1)
    ' D* v  A3 [! S0 E7 V
  4.   {                2 w$ R/ @# F8 X# B: @2 A6 K
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯6 r/ a& Y6 A; r* r& W
  6.                 HAL_Delay(500);//延时0.5s) M, l) e$ P, I1 ]9 [' m! e
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯* W9 W, k4 t6 _4 w2 S
  8.                 HAL_Delay(500);//延时0.5s               
      @8 L! r6 `% ~
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯0 U* v/ x, }/ P) D( }' o' r
  10.                 HAL_Delay(500);//延时0.5s
    ( E. c+ G9 X3 u8 q! ?) o
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
    . C2 |# k* n3 A: z/ O, O4 r
  12.                 HAL_Delay(500);//延时0.5s& f3 ~3 r! V- Z0 }3 v
  13.                
    2 |2 k: i8 I# a, o2 q/ N8 H' e
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯% C( _. O1 Z3 P7 w0 @- W& O
  15.                 HAL_Delay(500);//延时0.5s
    & Y$ D( o+ k3 _) K2 a
  16.                 * S% p; a$ ^- u9 r: k
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯& q0 t* w5 N! x+ ]2 y/ b5 w0 U
  18.                 HAL_Delay(500);//延时0.5s
    ; Q  E8 {) f% D& B
  19.                 4 a/ }5 U3 R% C
  20.   }
    0 }0 z6 T8 N. H, ?% ]8 }
  21. 0 I' A4 |' E7 \/ x
复制代码

& r! C- z6 _5 z5 T1 t8 V( } 22cb175110fa4a96af460c4e35d48ce1.png % f3 S" O2 {7 E' {7 s
" O" ?! q) Z$ H
在烧录运行,串口要断电置boot0为0,之后即可编译运行成功
5 {3 Q8 f& G7 v9 m5 r+ k' \
! Z, i& E! L; {1 O2 ?$ z: q实现led灯的周期闪烁- D; i- o2 d. N
, O$ Z8 O3 s( ?7 o# c3 Z7 e4 W
KX(6`_HUGG73G7Z8FBCYPVH.png 4 X" D  ^! b+ k8 b

! [/ i7 Q4 b% T5 \: e$ ~4 t) A进入flymcu进行烧录" I1 ^% j7 r' D  W

% ~0 |8 y) s( B9 s. S0 _
: t/ U4 \0 d4 h- r1 \. u
044d3ca05114434394681e15df707b18.png 1 L" W2 g- i& ~+ z3 _1 ?3 V
/ m/ E) f* O: [' s1 [
效果图如下
1 t( ^; J: ]/ d6 Y* {) `
% t2 \( y' R9 [# j1 [8 q ff89631870d6418989529cc56ddb27ab.gif
' i* f* Z; Y$ j4 U' O
& x' X# H5 g0 k: w2 ?2 J3 W用stm32完成USART串口通信7 p: ?# v1 ]/ f+ Y7 S3 T
打开stm32cubeMX,进入我的工程,选择芯片,开始进入
, q/ \& x+ @  w7 d# w2 h' N$ o4 V
159a7c0032b442119a729d978a72be29.png
1 W! V# w5 D4 K: V; Q+ U) q0 x
# S5 I* f7 L$ P& v) z! ?( W, F( X接下来选择时钟配置7 o; ]; m+ J6 o

/ }  y% K8 S2 D. K
0 h6 p' }% ]' |& [+ U; I( y3 ^1 t: H
4059a3e67e6145ada889513e1776e372.png
6 A4 D* ^+ I% _) G+ T# ~+ T. a
) D" I. O, J, `- U% Z* w0 {
设置USART2,点击MODE,选择Asynchronous4 m. h7 ]5 h5 w% C: D
- U6 e6 u# O- D9 m8 `2 c# ]
5 J  n, j- p% c6 F4 d: J
bf3046a373f245e891b5f9af35f3208b.png / Q: [4 p# S2 U; N

. L* d3 H8 o7 K接着点击CLOCK configurstion选择HSE,PLLCLK
; V, c7 ], v3 |* o9 q1 @- [* I3 C+ a. D8 U

  G6 t  U( r- V bcc9107bf51a42ef9ba120a9d836a4f9.png % t! _1 x; W" W! {: D
, V  z7 ?. @7 M& {" l% M, b
设置中断,在NVIC SEtting中点击Enabled
% S8 _! G3 e' ~( d: k3 |
' d& h6 r  ~8 t. S) B" T$ ^9 Y$ O

& V5 O* M" o5 E1 e 564cac8a34734fd8ac9c1c9170d36268.png
) B* i3 y. j3 Q# ~! c. s

2 h. e1 D, ?; T! R后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目9 c0 _! j1 g# N) m7 u/ ~" X: }
" }+ W. z4 P* o3 ?& w8 m: C% M
2486d31a915a43838fb1b172c7a72174.png   Z; v0 I& [) ~& z
6 W: {! ~( e0 V
5b4e5aa9859046309ae44797de05af6f.png
+ X4 j" G0 \# Y( R
7 W/ P6 f4 J  o8 |; U* P$ @7 r, d

* t$ B, m9 }0 ]0 h8 w% j  L" f后面生成工程打开即可
1 p% V' H* x5 V: h, I8 e0 T, U只需要把main.c里面的程序改为下列代码) R) T" s) V; A+ v; V

+ O3 B" i  R: S+ [" b% K% r8 _
  1. char data[]="hello windows!\n";//发送的数据% s+ x4 R( \/ p# v1 U2 r- m0 e: \
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送        ) B( [3 o8 ~: h% v
  3. HAL_Delay(1000);//延时/ h4 j. \7 }. Y
复制代码

9 y/ l2 o' `% m1 [! a. h ff40a9c53a444b94b52db953420f5e8f.png
6 V/ u( @3 L- T) j& w+ a/ k' t0 m8 b; i
后面进行烧录/ s' R; `8 I; Q- j1 d
打开串行助手打印出hello windows: a( g& r8 N& c  t- \4 h
# |5 A* |9 z" j, J! m
0e5d2290f35f4c6bbaec437ae636814c.png
5 j2 ?  |( ]" |, a& C6 x  |! l2 y# j/ a1 c: ^
接下来进行波形观察
. Q4 w% i, q, D( Y4 G- X1 E- E对keil进行相关操作, {3 S$ u+ t$ Y, u& E* P
/ L& D+ B/ l' g% B+ A  X7 p3 @
e4af5a84177e4ca1a5502f1a52169b6c.png % ?- E4 X/ c2 Q6 ?6 ?6 a

$ c0 v' O) w. Z5 J6 D之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形
- i3 C* ?* a8 q- }; f. C
* f9 c4 O) A! d4 @; |5 f 3b479d2791f74ef89814ac75615b5171.png % Y1 g, ?$ ]* Y4 L/ X
( z  R  a# i% p7 [3 Z
大约1s一个波形& r8 p) s/ G4 K  |4 s

# o! B( O. W8 f$ A 686dcd02ded24739b0e0e7e2248dd8d3.png
$ E4 y/ |$ t5 C0 [0 K
, X1 @) e8 g0 n9 I$ l总结
6 e: F0 R" {+ b
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验. p5 X5 B& {( P' M
————————————————
; _  A# a0 s! |* a" h* a版权声明:&是梦都会空9 t) I2 J3 W+ f! Q6 o) e8 s1 S
如有侵权请联系删除
$ D5 c* G, K1 Z/ B% }' L- a1 c( P$ C; o" d: A8 R
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 手机版