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

使用CubMX和Proteus学习STM32单片机(三)------虚拟串口

[复制链接]
STMCU小助手 发布时间:2022-12-31 18:51
项目简介
: ]! j% ?( w  b7 l0 U1 u) g        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第三部分针对串口通信的一个实例,虚拟串口其实只是计算机以软件的方式模拟串口通信的功能,可以基本等同于实际的串口。本文主要用于对STM32串口通信的理解。
6 ~7 z$ a# r  X1 A4 e" C" w0 p
! {" x% ]" t& @: Z6 u# h硬件模块
6 @* G& M* P# i' Z. _) c        STM32F103R4* ~; I# i( ]  Q
        串口模块
5 v0 y; ^6 J0 e, S4 l: ^) m% q
; H. z8 o5 X4 ]# M0 u软件工具
' J) N9 x, A6 P0 Q2 R' S        CubMX/ s/ n/ O2 Q( `* }
        Proteus
" k1 e" G7 z( l2 m* _3 @* P' Y        KEIL1 w8 G, j5 Q9 l! D' ^7 H9 ~: h
2 |  Y; [$ j6 O) Y. s
电路连接图& g0 u0 f6 C$ C* B7 m
        STM32F103R45 S  j+ @/ q6 S8 d7 E" T

/ W6 F7 ]7 M! i+ F$ a0 @
E}T(C04BJ5VL5$XWHF0HRQU.png   
* _5 @' J6 R) }$ {. _- U5 T
$ S; H# u9 e9 X2 S: Q8 D# k2 ^, ?        串口模块
+ C5 O3 ^- }; T; Y/ B
. t; p' l5 T. N. I
Q5[8P6WBF7SIA%_79{6OYD1.png
* ^% v1 ^# f7 G/ x7 F* D        7 f6 C9 b6 s! M- `7 @
工作流程( V. T9 u, p2 v  y$ O3 B( n# h0 r  _
        首先是下载相应的虚拟串口,这里下载的是Virtual Serial Port Driver软件。$ ]6 [" P8 p. k0 D" ~4 m, ]4 ~! B; j
* D% L2 ]# k: I, C! }% y5 D
$TOV2[@MHDR%FXV0KSWD{63.png , N, q1 w3 O# ~" z! }

) n' O% s' ?- M* R        安装好后,其使用期限是14天,后续超过这个期限重新安装即可。其使用方法也很简单,使用的时候点击“Add pair”即可,这里是已经Add了COM1和COM2之后的情况,需要注意的是用完这个虚拟串口之后记得点击“Delate All”否则会一直占用。  
4 n) }6 u+ A9 \7 J) b4 B8 ?' u- D1 a  w, R( _6 }
7_90JQQ@DSHV1VWQEF]9M(0.png
( O! f5 e5 \; m4 L7 b5 w5 K/ A1 [1 Z! M$ l
        然后创建CubMX工程,首先设置好串口      + b; ?6 v/ ]# {' M  J: s
5 n3 x! |3 d9 b2 h
7%)THV_Q)5RXA)D9V`@G%U6.png
9 l* M3 F6 @# ~3 t' p, d. ^! e* t" u- N: g5 C9 s1 t
        在CubMX中配置好串口中断。8 `  ^3 i' i0 T. R  \, N
- Y+ }' A- h, }, q3 P* x
V(1FT5H$SAJ()NETE$P@0ZR.png
0 n7 }. n) h; q% y
/ M: `0 e5 e8 b% O' ^' `$ j& u        然后就是在生成的KEIL工程里面编写相应的程序啦。这部分在“程序代码”标题中有。
% Q. t. p. _* h9 v% H: Z" H& O! M5 R/ u
        最后就是在Proteus和串口调试助手上验证啦,验证结果如下图所示。
- M; A! s/ A: u7 D3 C) a7 M$ G( o0 j( l) G
ZDL}VZCU1E)Q]4]{@ZDW.png   8 T- v. P" d& Y

7 v+ z2 Q0 @% v* ^# M程序代码

$ X2 N; C: \* d' @" n, x! S2 c2 z3 V
  1. //重定向printf()到串口发送和接收,方便应用4 v- A* ]" E$ ]- m% J1 o( j& o
  2. int fputc(int ch, FILE *f){( t, [; U. d+ {  U. C  Z- a9 r
  3. uint8_t temp[1] = {ch};9 D) b8 ?7 W( e
  4. HAL_UART_Transmit(&huart1, temp, 1, 0xffff);
      ]$ {( G- _: ~% ?, ]9 M9 j9 |+ \
  5. return ch;
    % P2 Q7 X* `* q8 e4 M/ O
  6. }4 n, S8 E# ]+ b
  7. //重定向scanf()函数和getchar()函数,方便应用: a" i/ J& ?" I8 c3 H
  8. int fgetc(FILE * f)
    ' v3 g9 q3 b  p, _$ \
  9. {
    0 Q# p5 i9 w7 X* S
  10.   uint8_t ch = 0;
    3 g0 [2 [5 Q4 e
  11.   HAL_UART_Receive(&huart1,&ch, 1, 0xffff);4 H. p. C) O; c; J
  12.   return ch;7 s1 F; {0 x9 H$ r. z2 `
  13. }
    $ R" ?4 r6 V) m0 |! R8 D
  14. : v4 c% d0 x8 Z4 e) _
  15. /**/ G9 F( U3 l( |' v# O2 j! C
  16.   * @brief  The application entry point.% \. ~) u# t1 W7 G/ I
  17.   * @retval int6 J4 K9 F% A& q1 O' n) b* h
  18.   */" ?" l1 ^9 V9 A' i0 U
  19. int main(void)
    + z8 C' ]9 [1 z
  20. {4 O. Z6 R& E5 T% q; r5 {6 E
  21.   /* MCU Configuration--------------------------------------------------------*/
    5 \9 h( s7 ~0 z: v
  22. ; ]0 O# Z5 o7 l! p5 u
  23.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    & ^% E: V& q  ^. S
  24.   HAL_Init();
    7 m; A9 e2 V2 p$ ^6 b) n. ~5 K* E

  25. / G8 y% l- b8 `
  26.   /* USER CODE BEGIN Init */. f' p) ?, \  C+ ~( w0 R; H; N+ f
  27. 2 F6 J# e  x) l
  28.   /* USER CODE END Init */; E1 o+ U1 W5 t7 n9 `

  29. " N% ]3 X3 n( F& Z( w. M
  30.   /* Configure the system clock */
    " I7 n% A8 U! j8 k9 [7 ^* k' F
  31.   SystemClock_Config();
      U4 W/ W6 s: O- y) X
  32. 4 h% Q; F, f, a: ^$ @
  33.   /* USER CODE BEGIN SysInit */
    ' j, L0 g$ J) p6 I- h

  34. , V9 `# L3 L) o! j
  35.   /* USER CODE END SysInit */
    " t; u7 X3 m# y
  36.   I& {7 W9 A* p; j  n
  37.   /* Initialize all configured peripherals */: y/ I, A. B. ?4 v( r. w+ m
  38.   MX_GPIO_Init();: z  @0 f+ m4 C+ z% j; q
  39.         MX_USART1_UART_Init();
    , T, ^* U7 c  o4 a3 d* h' A
  40.   /* USER CODE BEGIN 2 */0 f3 k+ G/ F7 Y' |7 O3 K$ X0 R

  41. # l% ]# X3 k6 f
  42.   /* USER CODE END 2 */
    : t  _7 J$ C! g( F1 b9 m4 r$ j

  43. 2 ~6 w$ A; X* u- x0 a
  44.   /* Infinite loop */- b; e3 I" u! `: b% w0 G$ B
  45.   /* USER CODE BEGIN WHILE */
    * l) M4 k3 X# @7 m+ }2 h
  46.         printf("Hello World\n");
    " ^6 m5 i  s; P
  47.   while(1)( w2 g# i' g2 @: Q0 \3 R( T5 q
  48.   {5 B: u; e# n9 L# m

  49. , G5 @. \7 J) `" y1 c
  50.     /* USER CODE BEGIN 3 */
      X1 Y8 K8 ~2 a! o) I
  51.   }, M0 n' E" }9 F$ y. f0 m/ T
  52.   /* USER CODE END 3 */
    : K( j2 {( R9 b# L; c
  53. }
复制代码
& h! _* Q* |* C) M& N
转载自:jxjajl
( }9 z6 T9 d+ D* z/ D) S7 M, ^3 x2 w6 x, ^6 ?
赞 收藏 评论0 发布时间:2022-12-31 18:51

举报

0个回答

所属标签

相似技术帖

官网相关资源

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