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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-7 22:10
串口协议和RS—232标准
& u* s3 |* C3 s# r3 Q! r串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485
- s  a. U- [) c$ GRS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
: \5 d9 D: c$ _( V/ J7 b. a3 f1 K' b( {  z
RS232电平与TTL电平的区别
& j2 ^" F: C% D1 S3 OTTL标准:- _3 c% l: |' D( u; Y; S; g! S$ k- Z
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。% E* Y$ F" c6 x' z3 z& u1 }* M& v6 I
RS232标准:
. u* g4 p$ P9 I, J, j9 I1 V5 R6 R# x逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次
+ `3 Z4 K* D' {/ L- r
4 V8 \; n5 Z- L# MUSB/TTL转RS232
' n+ b7 k, z  }  h# H

" f0 C& |1 o$ W5 a3 [
$ J/ h: A/ I- y* B0 oCH340串口安装
3 S+ U. |: ^; ~; z' H  H! v$ K. i5 L, }! }# j  z
3e2f978cc9cf45dfa55a1b2c4360e87e.png
4 G# |$ q5 O' V1 E5 Y( G
$ F: ^  z& w6 ?" l; K2 C0 M2 i! }双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH340
  S: O) T- G4 d7 B: d
+ B) p2 z' e+ }8 r+ G% |. A
ad9072c2ac8640b4bbc660f23224da3f.png 9 r% M* X: y, `, `8 D

( @: a" h6 Y  C: a1 I6 [安装stm32cubemx并编写程序# i" ]* h6 _& G/ z# s+ N! [* Y
安装,把所有的框都选上- F+ F% w" l7 ~" B) `
安装完成后,点击help,下载依赖包

" i' m& M3 `+ j! {+ J8 c2 O1 t6 {8 n6 D+ V; \7 x& `

4 x0 J3 K& P1 q+ s ac4a84eda14b467f97955e2623e694d2.jpg * K$ x4 j) v( N/ W- u7 p" f

0 ^6 j: H0 t1 L5 A( J7 r% j# u下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了
' ]% I; e8 I$ Z$ t# U7 U你们选择后,点击install now就行

  N7 W6 q8 P( f8 t& _( X! V# c( Q9 |. i' H+ D4 V; h
- l$ E& z& a% _- s, U
f89d4eef535f44748450be85262698e4.png
# c: L6 k- y/ H& t; a# {/ O$ s8 t" C- {, K
下载完成后回到home界面。点击图中的地方,创建新项目

6 c3 {1 c2 S$ L( ?' {2 }5 I* D4 a6 z4 w5 o) y2 m$ i5 Z' W8 B( Q

) ~, V& E2 a0 i* o, j 93f884af97f5488abbaf366a2a72c61f.png 4 N9 b* l: P" y8 U0 n5 g  b$ P; t! n

2 g% r% o* d4 T' @点击part name输入自己的芯片,以stmc8t6% _- P  j2 w; p+ ^# D
为例,之后中间出现的信息点击之后,在点击start project
7 d, I- J" Y6 d) a# e& h9 g' M, y7 F4 p6 Z1 `6 u
023f017954964c87a095208538e87b15.png
6 ^9 F7 X( s$ O' Q0 G5 \  ^; b" X& I
点击system core,进入里面的sys,在debug那里选择serial wire5 @$ x% h# q' i% `9 P8 v; e
+ G; z4 R1 v; V0 f1 T& d9 z9 B
31f33bbac64b405fb096a49d1bc6fdbc.png : `- t* z( h" s7 y  I
0 S% N8 ?7 E; z, L
12e93895a07d479dbf373c6993c1f5fa.png
" T& ^( H2 W, d1 W6 i4 o3 |3 Q! G
- w! ?2 ]; M: D$ K: f) O接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里
# Q& {% ^$ B6 p观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上: F$ O2 {. s3 U1 R2 q  F( M0 Y& ]
, M/ C) a! f- J* v5 s5 y

' h$ ?6 u# P! T# Y, [6 w f0fd547873664e48b74f41477911e965.png
% ?( p8 Z& d, a% G' `3 ^

* u& U+ s+ D5 H1 j& c6 p所以我们把hse那里设置为crystal/ceramic resonator就行了
( l, b6 P( z  I/ z6 X0 {/ D* t6 e6 \4 E0 w9 _5 u
$ Z# R0 O5 D9 U# z' d
070ccaee64e54cc492b4a8d522bcd31f.png
, c, ]* o+ O1 l
3 U- I6 F3 r) L0 O
接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7
( R% n0 b5 s8 G, T* xPB9 PC15$ i# t0 t% F7 [" F1 |- T
6 e8 H9 [2 e+ m$ }

3 z! F' y; R" {) M" o' g a27cf9e25a154d2d9615672c414ef150.png 6 K8 O8 g5 T$ Q9 b8 c: b

" F: p- S% l9 V  Z0 J' Q( m' K接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight: M8 |0 d- q- G+ `" O# @
mode不用改
  ?# d: X+ z2 K! t$ U9 W7 n3 o! `
* A' [- f2 m3 j 59ead86d28ff4d7297bfa61923e85627.png
9 `! e: [" r: |; v5 h8 U$ {. a( V6 E% x, e% b9 X5 G
点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM3 j! a6 b. N; I* Q
+ J/ _6 a  m. N
9 W: [  Q; [( H/ v3 N2 f% @
c881621917784142b2f5d6ef969610e2.png
- z9 u% j4 d9 K" C6 X1 o! t3 k

' T& _- f9 R( J6 B& ~进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了
* A* ~7 R$ W: o
! }6 X# z6 L1 u4 }, m c67fe11176354f37a9c4fc47a948c098.png * O2 x! t/ a# r5 o

) ?7 v3 n" Z/ t6 T! N; F5 O  E# X打开刚刚生成的项目将main.c的主函数部分用下列函数代替
' H4 L3 m7 k$ @1 t9 }1 W% j
  1. SystemClock_Config();//系统时钟初始化# R8 b: ?' C$ ?* b
  2.   MX_GPIO_Init();//gpio初始化7 z4 J: [: J) {" l! K
  3.   while (1)
    ! o6 T% i& b; P
  4.   {               
      ^/ {$ O0 T9 h9 X  @. h- n
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯
    + A; h- q' b8 g6 ^3 j
  6.                 HAL_Delay(500);//延时0.5s% H. Z  z7 z! v' p, ?# c8 S6 M
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯
    3 |  n$ b1 D/ f% d' s( C
  8.                 HAL_Delay(500);//延时0.5s               
    * L' f* V* {; J% o1 Q9 w, V0 R: ?
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
    2 h4 g4 A9 P4 g' P" C  x$ q
  10.                 HAL_Delay(500);//延时0.5s
    % G0 x  |# A/ K+ }! t
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
    3 u8 F- E! V! z2 n
  12.                 HAL_Delay(500);//延时0.5s
    & H- e; T! ?% _7 N: g
  13.                
    ; k' V; ~( p" C) T5 X
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
    ( h8 [" G  ^& W6 D. e8 W
  15.                 HAL_Delay(500);//延时0.5s
    . ]# W; ^. v! e3 Y/ l, X+ s' b
  16.                
    ) ]& F6 D7 Y4 ]! ~
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯9 p+ y! t2 w" `
  18.                 HAL_Delay(500);//延时0.5s
    " a# ]6 `7 Q0 `9 ?% z4 @7 y
  19.                
    ) b* {+ T, q  C; `
  20.   }
    ; G! S( W2 K5 {: E: @% d

  21. 7 g* o! m% q# x, O  N- N# e
复制代码

" [: B( L% K) n" v$ \ 22cb175110fa4a96af460c4e35d48ce1.png
: }' m  X% _- I; O+ C5 N( U# T7 m5 Q; U2 C2 l& y2 J
在烧录运行,串口要断电置boot0为0,之后即可编译运行成功+ P( B! A( }; Y- F

' A/ _7 y/ k% g" i9 K/ C实现led灯的周期闪烁+ O1 o; k+ k1 r) R7 d7 g$ r

0 p% X. y2 z0 d  f# }4 ` KX(6`_HUGG73G7Z8FBCYPVH.png
$ M) g8 ?1 u; B! e
3 e2 k0 Y) w9 R  Z1 r# f% y进入flymcu进行烧录7 G  M: A& m4 k( s$ J: b
7 B$ k* _0 w# n9 [! F9 W) b. J
2 X8 J6 H; Z8 v/ v
044d3ca05114434394681e15df707b18.png : Z# q$ V, g' @8 |) D; J

, q& |$ k% ]+ k& i" Q6 f9 {9 T效果图如下
2 f; s2 z! f3 B! ~& ^* V$ b0 E8 O  y8 ^9 T8 U, a
ff89631870d6418989529cc56ddb27ab.gif ; c* D; J, k+ j* L1 y
+ h9 P, f) w- C2 h( o( r
用stm32完成USART串口通信, V7 B+ r; T4 Y4 d  n8 ]$ E
打开stm32cubeMX,进入我的工程,选择芯片,开始进入
+ Z/ b+ L6 n9 ^- M) s
# d- S' m, p& D1 f 159a7c0032b442119a729d978a72be29.png
1 k6 L0 ?/ X& x( W  N, l$ c+ W2 _- x
; L- T, G: S1 Z接下来选择时钟配置
. [( v; T# _$ C2 |5 R, c3 o
; x/ a% f9 e" z) O
% s/ L$ K2 O+ {# {6 s  J1 z# S
4059a3e67e6145ada889513e1776e372.png
0 G7 Z; P( I! ~& ~

$ _9 u- y0 t6 ^3 X* T3 z设置USART2,点击MODE,选择Asynchronous
3 }& \! V. m% [/ _4 V( v/ j2 i
" K- l9 I. k! f* {4 U+ o  ?" ]
: w* |0 L# W# k& J4 u) s
bf3046a373f245e891b5f9af35f3208b.png
2 |& q" K0 n- f$ l* n
+ ]7 r+ @' [% i& g
接着点击CLOCK configurstion选择HSE,PLLCLK5 \9 W3 x; \5 L4 M* W2 e

9 F9 w  K+ V; Y3 y' i- e
& x5 b% r% Y4 M8 @7 ~
bcc9107bf51a42ef9ba120a9d836a4f9.png " X3 F# B4 z7 v) a9 r6 x

( G0 X. e8 z- J, N/ \设置中断,在NVIC SEtting中点击Enabled
& n1 I! a) k" D4 B' z$ X
  T# K# B+ O* K+ n/ \# h

$ U/ `1 [3 [; l. S" G, r1 k 564cac8a34734fd8ac9c1c9170d36268.png
. E6 k3 _+ C& i6 B) V5 f

. M) f! M- g% l1 E) t8 P; {后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目
2 q: P4 n4 I8 f4 @* \1 g. A$ f! R# F6 U) a2 E
2486d31a915a43838fb1b172c7a72174.png ' T* W& C9 N, p  n6 C! I) U
4 Y8 C$ g! E- s
5b4e5aa9859046309ae44797de05af6f.png ' M" m9 l* b4 q

) X: L) S5 U0 o& [& Z
# g2 J; x0 A' X7 b
后面生成工程打开即可3 W0 b1 A, O8 t& O) J' f
只需要把main.c里面的程序改为下列代码% b0 s1 q/ I) A

2 P4 E4 ^* J5 ~/ T: z
  1. char data[]="hello windows!\n";//发送的数据
    ! o* ~7 P2 l0 x+ ?- `( E
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送       
    / t' ~# L1 X: `, o* ]
  3. HAL_Delay(1000);//延时  z7 D1 \+ f* d- H
复制代码

( Q- e" }; z& `) h9 f ff40a9c53a444b94b52db953420f5e8f.png
; x: q% k# A% V# r; d7 B- @
7 o8 u7 H7 d! A' e后面进行烧录
, n2 V  K: T5 s: [; ^4 a打开串行助手打印出hello windows
7 M$ C( [; y) `3 n/ {3 @6 _
0 e% \9 [, S: @2 [( f0 W 0e5d2290f35f4c6bbaec437ae636814c.png
: ^0 e6 Q) o& V
2 K4 @' E6 W% r% D3 }, I9 R接下来进行波形观察
! [  J" }: C& L& N5 Z6 H对keil进行相关操作  [# j3 y0 Q& r" d

: p' \7 I& L5 E5 }- k e4af5a84177e4ca1a5502f1a52169b6c.png ! `. u4 ^8 e7 D0 e$ [

; }' Y9 R; P0 l, U# k之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形7 }$ s( T/ l8 ~

  j/ q" t1 b3 k 3b479d2791f74ef89814ac75615b5171.png $ W5 z4 R. S; A# T3 h

# `5 {# h- y( X- o, j: Q" \& b! O大约1s一个波形
+ Y6 `+ K( O$ A* F) Y
3 a! i+ D2 q$ c9 L' H 686dcd02ded24739b0e0e7e2248dd8d3.png
9 Y. S9 R* R% z8 [- x; T- k2 k3 w  e8 a! C: i  P
总结
% T, T- H( q0 p: ~7 g* x
通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验
: O. L8 n% P2 _( X————————————————
8 J8 a8 j3 W5 f" U5 s. U版权声明:&是梦都会空
$ ]9 j1 v3 I5 d; P如有侵权请联系删除
* O  F3 W  w8 `  O4 z6 c, B9 o
& v9 O8 {4 a8 y7 ]% G& e' ^  Q" g
IDFO{}CUKF@7B2YG%`DVKED.png
赞 收藏 评论0 发布时间:2023-4-7 22:10

举报

0个回答

所属标签

相似技术帖

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