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

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

[复制链接]
STMCU小助手 发布时间:2022-12-31 18:51
项目简介3 W9 B0 o3 X3 \1 @+ {# I3 V
        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第三部分针对串口通信的一个实例,虚拟串口其实只是计算机以软件的方式模拟串口通信的功能,可以基本等同于实际的串口。本文主要用于对STM32串口通信的理解。4 \6 I# W3 ?2 {2 b8 u( d0 a

0 s5 k# \( `" r# t硬件模块
6 d: F: m$ a" V( H( D3 U8 D  @        STM32F103R43 j0 k) B6 ~0 u7 r, g
        串口模块
* U& ]- ]7 w. I, N$ {, ~) h1 o
软件工具
6 r( S) ?6 a4 t. G7 B        CubMX
" x* A3 R7 J  i        Proteus
) _- m& o! U' P( V: E        KEIL
' l9 @8 c% x6 {' }/ Z
( y- ^; g( O2 k电路连接图/ g' s" E! M9 ?' J8 q! J8 K! J
        STM32F103R4
: T2 K- G+ V+ T+ Z
0 A9 M8 Y2 x% W9 h7 |5 _
E}T(C04BJ5VL5$XWHF0HRQU.png   , T2 n( k5 m8 \6 g1 f- w8 K
$ j( a: f7 O& P
        串口模块
) J% ~5 ^, c, F) P- L7 I8 j4 I, J; k1 E+ \0 R
Q5[8P6WBF7SIA%_79{6OYD1.png
( s9 C1 b8 p2 d* z  r0 E" U        + V3 L$ b) F9 h9 y; w! d# Q, [5 R
工作流程. e: s9 s" J4 `8 H4 l6 }% G
        首先是下载相应的虚拟串口,这里下载的是Virtual Serial Port Driver软件。
& c/ L  X2 `1 T; ~7 c( S0 W2 o/ g# V4 K7 ]/ p  ^
$TOV2[@MHDR%FXV0KSWD{63.png : t1 {7 ~0 b7 L+ z

  [6 v% ]( q/ J7 W" T& Z        安装好后,其使用期限是14天,后续超过这个期限重新安装即可。其使用方法也很简单,使用的时候点击“Add pair”即可,这里是已经Add了COM1和COM2之后的情况,需要注意的是用完这个虚拟串口之后记得点击“Delate All”否则会一直占用。  
6 [- w+ w3 s7 g; \
* F, O3 N' y1 i6 N
7_90JQQ@DSHV1VWQEF]9M(0.png
% `" }/ Y% b4 T) ?
2 H2 J2 B+ Y9 H7 H# R6 |        然后创建CubMX工程,首先设置好串口      9 ]% j% w0 @: P, ^
5 O% _7 C) C+ ]& k3 p
7%)THV_Q)5RXA)D9V`@G%U6.png % a) K, P+ K" M9 a

+ n( k- l3 A/ K; m        在CubMX中配置好串口中断。7 X. o* c& q7 Q/ W6 m$ r9 w0 C
  [) u$ @: b( N: P9 G
V(1FT5H$SAJ()NETE$P@0ZR.png ( F% s/ e1 y4 {, I3 U, X0 {4 b

7 d6 J4 z) _$ s3 q+ H        然后就是在生成的KEIL工程里面编写相应的程序啦。这部分在“程序代码”标题中有。
: P6 Y3 i( D. h$ ~) G7 _0 h* A5 Q. ~, x/ Y9 B4 x" W4 F; A% P
        最后就是在Proteus和串口调试助手上验证啦,验证结果如下图所示。% P! _' y1 @0 y! Q( J5 ?! i

6 |, E6 v# O- V8 o2 ^8 [" X/ Z
ZDL}VZCU1E)Q]4]{@ZDW.png   # L2 m2 N! I: _8 k: {$ s
! O  m2 H" W/ |4 t
程序代码

: k% m, d; ~' l  O& K% |
  1. //重定向printf()到串口发送和接收,方便应用; @5 o5 W- J' o2 F. J
  2. int fputc(int ch, FILE *f){
    7 k% K# J- L' K: T/ c. p+ j5 @% M
  3. uint8_t temp[1] = {ch};
    + u6 F! ]; S, S% m
  4. HAL_UART_Transmit(&huart1, temp, 1, 0xffff);
    6 h9 h( ~  \/ j( r; X
  5. return ch;! ]# X3 S! t+ p! V; h
  6. }
    3 |2 ~+ A' P5 `' N
  7. //重定向scanf()函数和getchar()函数,方便应用# n0 C. u0 P5 \! ~& |
  8. int fgetc(FILE * f)% |9 e, i/ i, Q1 T
  9. {: _9 `) q2 w% W! w9 @
  10.   uint8_t ch = 0;
    , z. a4 \  K6 t9 Y: i* p' d
  11.   HAL_UART_Receive(&huart1,&ch, 1, 0xffff);8 L6 n. n4 I8 W! D
  12.   return ch;; v, i1 G5 t5 e/ t3 {% l( r
  13. }1 d- M' [2 o2 J. ?8 n
  14. ; o9 q. b8 D' o1 a6 K: d
  15. /**& {# P" E$ j6 P# B; Q7 H- v
  16.   * @brief  The application entry point.' t! o) f  \" u' X# W& i$ L$ v% [! c
  17.   * @retval int
    , h& S: _- C( S6 G! ]
  18.   */: g+ h+ E8 B! `" m: G$ s- s# q
  19. int main(void)
    2 ~, b5 g6 V# A0 @  c$ A) i! C8 f& m
  20. {
    # e3 I+ v& ?! r* w
  21.   /* MCU Configuration--------------------------------------------------------*/
    , H, \$ n& |, p' Q2 j$ M' e4 E

  22. . L6 r9 A. x  P( t- ~; B
  23.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */4 r+ E- q/ B8 m( t
  24.   HAL_Init();
    % h7 y+ D  g/ l4 Z, g# @
  25. . ^3 b" S1 b  V5 c. ]. y, R# a
  26.   /* USER CODE BEGIN Init */
    1 \0 ?. B+ W2 M) e3 Y( L

  27. 0 i6 n1 U# _) X, t! H; @( A  T8 H
  28.   /* USER CODE END Init */
    ' m& @. s$ `& p/ @  n( C! f

  29. 4 Y  s% k' y. a1 E& U
  30.   /* Configure the system clock */
    " L( I# k0 K  }1 z8 P+ Q" ]
  31.   SystemClock_Config();
    , T3 b6 N9 |9 ~; [8 ~7 i9 g

  32. $ A5 `; g* J. Q8 [
  33.   /* USER CODE BEGIN SysInit */
    8 c! a$ O$ g3 H$ }9 F2 U( z" t

  34. ) R& p& T9 a8 y3 J# N, ?
  35.   /* USER CODE END SysInit */
    " {$ d% j0 v/ q1 [
  36. ) g' g' Y3 b8 B4 U' h9 _7 {/ K
  37.   /* Initialize all configured peripherals */+ U$ r- x; M, k( Z
  38.   MX_GPIO_Init();
    ( K0 @- v2 }8 m% A
  39.         MX_USART1_UART_Init();
    2 g' n7 `! f+ h% b; T- j3 ?4 ]. u
  40.   /* USER CODE BEGIN 2 */
    / W# S$ W. X5 _2 B9 A9 {# g! ]
  41. 3 }. T7 c9 o9 v" b, p" X. w- V: O
  42.   /* USER CODE END 2 */: R4 A% ^* @7 ]0 z4 i6 O

  43. - B+ R1 l* v: e# G
  44.   /* Infinite loop */
    & w3 x( \+ I: O" [5 z% D
  45.   /* USER CODE BEGIN WHILE */
    0 `2 E% n( M6 w( Z0 W
  46.         printf("Hello World\n");
    : J+ l  V0 m  b# O
  47.   while(1), ~1 @! a& a  {# d
  48.   {6 d- ~9 a( D+ w0 O% J3 ]/ I
  49. 1 [) T* ?5 [/ B
  50.     /* USER CODE BEGIN 3 */
    7 n$ F6 n9 Y6 p: O% I9 k
  51.   }
    1 o1 ]. q; ?3 t: V7 h) a4 Q
  52.   /* USER CODE END 3 */) j- w% i3 \, H: f; W( Z6 |3 D
  53. }
复制代码

+ ^  n0 o' s" a6 X( M& X转载自:jxjajl
  C7 d; R5 n' g4 c5 v& u0 X
$ f% s( G0 v/ W3 w1 N& F
收藏 评论0 发布时间:2022-12-31 18:51

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版