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

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

[复制链接]
攻城狮Melo 发布时间:2023-4-7 22:10
串口协议和RS—232标准8 m5 D; o5 W% J* |0 e& ?
串口通信协议:是指规定了数据包的内容,内容包含了起始位、主体数据、校验位及停止位,双方需要约定一致的数据包格式才能正常收发数据的有关规范。在串口通信中,常用的协议包括RS-232、RS-422和RS-485
+ h, D3 m8 G. z# @" GRS—232标准:RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。因此,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成rs232类型,再交叉连接。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。
8 V" L) l. h! H  n2 I: e
4 J) L: ^  s: D# O. u' r9 D! YRS232电平与TTL电平的区别  a/ O' {" F' X7 k% |
TTL标准:! [9 S4 W$ b* t# _
TTL器件输出低电平要小于0.8V,高电平要大于2.4V。输入,低于1.2V就认为是0,高于2.0就认为是1。
+ L1 j$ }# |8 k( e1 pRS232标准:0 l+ Q0 G- q2 r
逻辑1的电平为-3~-15V,逻辑0的电平为+3~+15V,注意电平的定义反相了一次+ q6 {/ j: ~; A& q- N

% H2 ^# N9 @/ f9 l* }* qUSB/TTL转RS232

2 q$ H; }  g7 d2 y# H( o9 j
6 m9 g3 c. u$ v- _" ]) @4 P1 M, h( O. I
CH340串口安装
7 b/ G, E/ x% Q, k5 |
( ]) a& d3 ?# V: J% j8 D. i
3e2f978cc9cf45dfa55a1b2c4360e87e.png
  P1 h& `. @' f: u1 p, k
; f3 O5 q: O' C  f* C双击安装即可,检查是否安装成功,插入USB串口后,点击设备管理器,检查端口是否有CH3407 X5 Q5 }+ W) W1 z  j3 ]" d

1 o6 |. y. h! Y/ Q) O0 F. w
ad9072c2ac8640b4bbc660f23224da3f.png
( W, h% G8 c* M; n: o$ h' _1 V2 _' S' u% o. J  |7 h+ Z
安装stm32cubemx并编写程序2 M% {/ a7 _' c( r! W8 r
安装,把所有的框都选上& r% A# Y1 T3 ]
安装完成后,点击help,下载依赖包
7 s$ t5 Y5 _8 ~) W  T: P
0 i- t! L6 |, W  s, f3 _

7 _0 a; a+ t) o ac4a84eda14b467f97955e2623e694d2.jpg
9 N: q& V6 T0 j; \5 W) F) t1 \3 L5 E; V' [
下载完成后,选择自己的芯片,选择前面的复选框下载,绿色代表下载好了/ V0 B1 C2 T! q' h" u& _  }
你们选择后,点击install now就行
: f7 d& q0 `4 Y5 ?) D
# [% Y, N; y1 q1 P
0 X+ F1 q: X1 M: @/ J2 o# I4 j
f89d4eef535f44748450be85262698e4.png : k9 G! o- x# ?! Z8 T( x1 ?  ^

& G" q: E# X# n下载完成后回到home界面。点击图中的地方,创建新项目

% C5 L9 W4 h4 d
( Q8 W2 s, B, Z
6 m/ Y6 E0 ~: @" A" N
93f884af97f5488abbaf366a2a72c61f.png ) s( c. D) ^7 n
5 j* Y- i% \0 L* M6 V
点击part name输入自己的芯片,以stmc8t6. z. g5 B# s! T; ?; b
为例,之后中间出现的信息点击之后,在点击start project! \& X# A* {: C: J! r

$ i3 l7 i) g6 C3 k) s2 J
023f017954964c87a095208538e87b15.png
+ o$ W% k5 [/ J$ c+ ?; \8 y" G/ f& C1 @2 a7 G
点击system core,进入里面的sys,在debug那里选择serial wire
+ K: k0 q/ c$ m+ h
9 U) Q- h. Y! ~
31f33bbac64b405fb096a49d1bc6fdbc.png " i: T6 B( ?7 e* x+ H- }: e$ U, C
3 t8 p# u; k' ^" L
12e93895a07d479dbf373c6993c1f5fa.png
) B& |# r  h% t- {, M- }# b$ k: s" z* ]9 V) Q2 O
接下来进行配置时钟,进入rcc,有两个时钟hse,lse,我们要用GPIO借口,这些接口在APB2里
% K. N& N. |0 j$ m" I0 U; O2 \观察时钟架构,APB2由hse时钟控制,同时在这个界面把PLLCLK右边选上0 V1 W" v$ a( b: b* E( C# W
# s& Z+ d0 s9 t5 \) K; S7 b

5 a" n: U/ N6 n f0fd547873664e48b74f41477911e965.png $ g+ _' G7 y4 K

9 {& M0 Q0 U2 c% T+ ]6 Z所以我们把hse那里设置为crystal/ceramic resonator就行了4 R& o) B. |  `$ q

, N* m9 r: s) a. C; c5 w" v& x' \
* v( w  _# R* Z7 k! H# M* I
070ccaee64e54cc492b4a8d522bcd31f.png $ x5 q6 {0 K9 L8 l) q
- `% ^6 Y9 C* R* y  W1 q
接下来就是点击相应的引脚设置输出寄存器,output哪一项,一共三个PA7: Q5 @$ m4 K- h" k
PB9 PC155 B0 ~; G4 K& k' I4 k' e
# A6 `) p% y7 s# h( M& M

- w) x: Z- U1 O3 X) ?% b/ L, s a27cf9e25a154d2d9615672c414ef150.png
4 _2 r% E$ A% j9 l4 N9 N; e

; U/ }/ B% ?7 I# V* E. ^接下来点击system core里的GPIO,点击引脚名,把输出等级改为hight: {4 I5 b; J! d5 `: X) k7 }% q
mode不用改
" M& S) J* j7 W/ o+ n1 Z6 `
, {' M; o+ W! |% R9 L 59ead86d28ff4d7297bfa61923e85627.png
- ^( v/ Y! Z. M# T' C1 j& q# p( J( U8 V; ?) |2 q, p
点击project manager 配置好自己的路径名和项目名,然后改IDE为MDK—ARM4 A, z3 J( \; q7 ?1 c+ L

" U8 ]; j( i( b9 S: h5 @# h6 K2 N* H

* K+ Y# E- j6 p' h! G5 e c881621917784142b2f5d6ef969610e2.png
# q* g- p1 g3 F7 P4 ]9 A! q3 I

( {8 ]/ s4 [+ p8 O. R. _/ G( T进入code generate界面,选择生成初始化文件.c/.h,之后在点击generate code就行了
: Y* I2 m" w* O4 E% D1 x" @& U, ^- K" P3 N* b4 ]
c67fe11176354f37a9c4fc47a948c098.png
' j& r. ?6 s" l$ l- E6 P! ~4 ?2 x  |9 j  B7 \
打开刚刚生成的项目将main.c的主函数部分用下列函数代替
& g7 c* Q  l, C
  1. SystemClock_Config();//系统时钟初始化
    ! d/ _9 ?  r9 _' b9 w3 v  _7 h4 I
  2.   MX_GPIO_Init();//gpio初始化1 p! J* [& C1 x- |2 x1 _
  3.   while (1)
    8 h3 L: _& O1 J8 L2 L
  4.   {                - Q+ P1 w) i$ p
  5.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_RESET);//PA7亮灯4 G3 I% w: \: f( U5 V! o
  6.                 HAL_Delay(500);//延时0.5s; E7 ?& t  m& C9 l
  7.                 HAL_GPIO_WritePin(GPIOA,GPIO_PIN_7,GPIO_PIN_SET);//PA7熄灯
    2 m, E# S8 X) o0 `: G! r
  8.                 HAL_Delay(500);//延时0.5s               
    " M# }, r8 q/ W* f% T6 \$ `5 H, L
  9.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_RESET);//PB9亮灯
    4 w5 B" C) C/ A3 I
  10.                 HAL_Delay(500);//延时0.5s0 @# d1 i& s3 S
  11.                 HAL_GPIO_WritePin(GPIOB,GPIO_PIN_9,GPIO_PIN_SET);//PB9熄灯
    8 M/ a$ R4 g) l2 X3 T4 g
  12.                 HAL_Delay(500);//延时0.5s
    & g" f- r4 N% D
  13.                
    * I( j6 o# V3 K1 V
  14.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_RESET);//PC15亮灯
    . W% j, N$ m. w$ a& o
  15.                 HAL_Delay(500);//延时0.5s
    9 w# f. W! y+ W( ?$ ~  T- o; L, Q
  16.                
    8 ~8 J/ [$ Z& m& g1 }- \; k
  17.                 HAL_GPIO_WritePin(GPIOC,GPIO_PIN_15,GPIO_PIN_SET);//PC15熄灯
    ; k) J3 H) Z( o  i1 c2 [
  18.                 HAL_Delay(500);//延时0.5s
    0 [# s. \! o  z
  19.                 2 E6 t% B2 H4 f9 W' y
  20.   }4 o$ J$ G/ E8 ~& C  b
  21. 3 x% A/ }! Q8 x" h. `+ \. d9 ^& _; n
复制代码
4 v$ S' ~' m6 N) W: C' ?( ^
22cb175110fa4a96af460c4e35d48ce1.png
1 u0 @3 _' ]5 ?$ c- W  Z+ [/ U
8 c* S5 \0 ]. k5 I( k" @, {6 v在烧录运行,串口要断电置boot0为0,之后即可编译运行成功- a( O3 Z6 p  p* {, h
* m* D& B) M" \' r# S
实现led灯的周期闪烁
  q6 j6 x1 |% S3 l2 V/ G5 r
8 @, R! [# ]4 V) p# \ KX(6`_HUGG73G7Z8FBCYPVH.png * k9 Q# J  X7 |5 @; d: y' S( _

! }7 N, d5 V* M! w: s进入flymcu进行烧录
! E+ c4 [- s, `
# ?. H' ]" f) P+ ]& u) r
1 R; O6 l& \- a. ]3 |
044d3ca05114434394681e15df707b18.png
" N* q* o" w8 U3 n; j+ U  S- y, t) U

* \1 _, V- ]& M+ h" y3 X效果图如下6 Q) M! R8 h1 M" F% _( O% d
6 _% Z. E) r" x  \5 G
ff89631870d6418989529cc56ddb27ab.gif
$ V/ n. f$ a- D, O. ^
) G6 w# M" W7 j7 x& R, Y. f用stm32完成USART串口通信
2 y4 z  \, c! a3 M打开stm32cubeMX,进入我的工程,选择芯片,开始进入
9 [6 |* P& d0 ?) B* Q
/ H. c8 G; r& O. ^- j 159a7c0032b442119a729d978a72be29.png 6 X, w0 r: y( i. U! e  W
0 t9 \5 v2 d' D
接下来选择时钟配置
6 \* ^/ T, K# e6 w/ u$ H
7 \& d0 p# S4 H4 Z. C& P' I. G
$ G0 c# F. T) o  Z* N9 y9 p
4059a3e67e6145ada889513e1776e372.png
2 q8 B! K0 K! T, x* u4 B4 j$ J. ~8 }9 w
: |% T# b5 x1 m# Q
设置USART2,点击MODE,选择Asynchronous  B0 ]9 v9 ], R% M  z

& f  C+ a& h( m9 j$ D

, f, ]" i5 _+ B8 V) ~. G) h! h bf3046a373f245e891b5f9af35f3208b.png 2 ?% j8 v5 {% `

# l% W* p! J9 c/ e* F接着点击CLOCK configurstion选择HSE,PLLCLK. T$ e; q; ~2 G$ ]! Z3 d

2 ^7 H& l  G7 o! u3 n
8 K, i( O9 W6 y
bcc9107bf51a42ef9ba120a9d836a4f9.png ; m9 h& K8 @! P* T3 g+ }5 Q
: r' Z% q2 t9 y. o6 m% s
设置中断,在NVIC SEtting中点击Enabled! l( ?+ q% w  ^! J7 t
  i' q% Q" {8 V
! F( {' P  b3 r: U
564cac8a34734fd8ac9c1c9170d36268.png - _+ v% L6 \& @9 ]6 ]8 q! j

4 J( @6 b7 x" ?' C  L% {! C后面设置路径,只需要修改Application Structure为Basic,在Toolchain/IDE为MDK—ARM,在Code generate勾选生成项目
0 q& P- j( n, [6 |0 c7 G; p  ]# w( m! w+ |; `: v
2486d31a915a43838fb1b172c7a72174.png : Z1 h: L/ ^" |* o( h

. C  E* y& d7 E9 ?) I! I4 g 5b4e5aa9859046309ae44797de05af6f.png
, Y" H# i3 o$ }% b. x
0 X9 U9 {$ c2 ]; m% ^

1 z6 U$ e) z9 a6 O7 y后面生成工程打开即可3 e2 X0 v7 r( @6 C; E" ~# v
只需要把main.c里面的程序改为下列代码
) g" n0 Z% v6 o7 t! x# @: X
; `  O! g1 Y& W
  1. char data[]="hello windows!\n";//发送的数据
    - f: _; _. U* O$ ?' j9 ?
  2. HAL_UART_Transmit(&huart2, (uint8_t *)data, 15, 0xffff);//发送       
    , \* q8 D0 B- o) E
  3. HAL_Delay(1000);//延时. B4 }+ {' v6 w- c8 `& u
复制代码
' G/ [+ K  y1 R9 T
ff40a9c53a444b94b52db953420f5e8f.png 8 |0 W& S& L  \9 |# y
- F0 g! z8 p7 ^0 F' k* ~
后面进行烧录" B2 E8 o; M; c6 ^
打开串行助手打印出hello windows8 x8 N" D5 ^1 V2 a) f1 R: E$ v' e

, R1 N4 o* M/ W' C0 g 0e5d2290f35f4c6bbaec437ae636814c.png ( j9 D% L6 ]. }. u
5 r( ?5 D3 H1 X* e
接下来进行波形观察
. Z! _" J* @1 E! K; [对keil进行相关操作
8 H) u: F$ U; n. G( A2 ]
) J* s: [) i9 z3 F) j* T e4af5a84177e4ca1a5502f1a52169b6c.png
3 _7 z7 I8 v/ j' O. i. f4 z
/ \( x+ R7 |( z: \( [之后打开逻辑分析仪,选择端口,设置bit,运行就可观察到波形
9 P: Q+ z/ ~. H4 M. W# _% B- T: C$ }/ ?9 i
3b479d2791f74ef89814ac75615b5171.png
  P; i5 ?0 @* A9 y! }; a% n) s6 y+ `& Y2 t! T; `& ?
大约1s一个波形. f; _7 M' N4 ~0 \+ e0 l

1 K) F1 z5 Y2 }3 Y# i, h, V 686dcd02ded24739b0e0e7e2248dd8d3.png
4 r2 s7 k& B+ O0 d
7 U; |% @% w6 G总结

* ~( V" M+ ~5 b! U0 Q- V2 _8 V$ i通过本次实验我更加了解了stm32cubeMX的分装功能,更加了解到stm32d寄存器映射原理,最终完成了本次实验4 [0 O  X' i: u
————————————————5 b* u. w" F; u! E, R5 w' x
版权声明:&是梦都会空- N. M/ r5 C6 P/ c( @# X" j
如有侵权请联系删除& y' a' e' a# j4 I
' v: Z) q; d: J7 X8 s4 Z
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 手机版