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

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

[复制链接]
STMCU小助手 发布时间:2022-11-15 23:38
项目简介4 e7 F3 O1 m# T3 G* L* `7 c% s
        利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32单片机。这是第三部分针对串口通信的一个实例,虚拟串口其实只是计算机以软件的方式模拟串口通信的功能,可以基本等同于实际的串口。本文主要用于对STM32串口通信的理解。
  |  ~/ n* z; c' }4 x# e' ^( i. J8 P4 F8 ]2 [
硬件模块9 G3 ~3 v) g1 W5 k$ ^. S! a0 {! H
        STM32F103R4
% }, C* [4 ]9 @& H2 @* A6 ^1 P4 i( c: J/ h5 R# L
        串口模块7 _' m2 V: T- R( U% X# H6 W

; p: G# D4 D' x9 K2 }软件工具

! x) e' K2 k) p5 a+ ]: w        CubMX
8 y9 Q, ~$ ], V/ G/ z6 `9 l) k3 l) k4 W7 H& t7 `
        Proteus* n* p1 b. H3 Q

: I: C& g" A7 s. A! ]        KEIL, p, B2 X% K" K* T* d+ F9 ?/ W/ H
% {& B- k  d4 R( v$ j- u# q) T: b
电路连接图
5 b* U; h/ F2 }! [4 _        STM32F103R4/ u" o0 t. P* ~$ H+ e' t1 Q' Z& J

# K9 g  h9 ~0 \6 _( D6 z1 A 50K%_Q[H_G)RWF7JW`}EI.png   d0 b: W$ `! r+ I7 B6 B% U2 Q' p+ \
6 k' B* i6 H) I- k+ N2 l' q
        串口模块6 B7 ?5 T  N* W, K" X

1 g' i0 x  A5 P3 F% b  C [OY$RPZX44G%4Q4M(]~Y7@L.png
+ x" {2 l# M! Q* c8 h; g
' ^1 [0 K/ E/ _
( b9 d! X6 h4 ?2 j工作流程
4 n+ x* m/ R7 v3 r% V        首先是下载相应的虚拟串口,这里下载的是Virtual Serial Port Driver软件。
/ i) p. U( U# R8 D1 c( u( D
* B2 o: A! D5 U- }1 q+ C* V [8UY9$CIFR@BCLI5(4NT4S1.png ' n6 J" a$ k  \7 N/ l( R
- `. N, f7 l' b4 d9 v, q  M
- X6 H: z5 Y. b: n' h
        安装好后,其使用期限是14天,后续超过这个期限重新安装即可。其使用方法也很简单,使用的时候点击“Add pair”即可,这里是已经Add了COM1和COM2之后的情况,需要注意的是用完这个虚拟串口之后记得点击“Delate All”否则会一直占用。  6 _- ]3 u" c- ]1 j+ g, y

; _% }  |3 y5 ?
; w: {$ B% _' _ WV[2XC4G%1]Y0CKDD6`YG4C.png
4 x3 z: N& ~! U8 _5 z) L' Q
0 i0 @" Y% o2 w8 U. j        然后创建CubMX工程,首先设置好串口      , }0 O2 J' C9 |2 e6 D- ~
2 n+ d0 d3 A3 I& `' c9 t
ELIDT]_Z(QS4B8}ONI%S8)Y.png
' F4 ]7 d7 B7 K( S2 r: y1 `7 j, p1 d* \) J) v
0 o1 X  \: L* {; V3 M0 H  D) q2 K. s
        在CubMX中配置好串口中断。
$ Z% F/ [0 e9 c( Q, ~
) m: T5 W/ i9 F% ~. N( V& R5 V. R QN`B3PQ8K(NOKF8095_J{%0.png
: V* B, [4 S4 h3 M, p, J5 i, m4 k# S; k* o- A1 l  _) ~
        然后就是在生成的KEIL工程里面编写相应的程序啦。这部分在“程序代码”标题中有。- @2 V8 i2 [9 ~/ V& Q' N) E" e

$ @: A- Z, G' o$ l$ A0 Q* h* R        最后就是在Proteus和串口调试助手上验证啦,验证结果如下图所示。0 U! T" K9 O/ G

. d& \0 l9 D4 }6 [* W/ P, N0 e- j _P(W`~V%QO$$~MSIBINM32Q.png ' Y  w7 s. ]2 p8 @

) u) \3 r  d" V4 w1 ]3 U6 i# S) D9 F0 V
程序代码

/ }( o% q% ^# u/ R8 k9 x# Q) L/ B% E1 P: e3 V. b. o& K
  1. //重定向printf()到串口发送和接收,方便应用
    0 b, h$ v) e1 X( K# I  m$ w2 n
  2. int fputc(int ch, FILE *f){
    9 g' u. a; T5 c  @
  3. uint8_t temp[1] = {ch};* N$ G2 q& e3 z3 \/ t7 g
  4. HAL_UART_Transmit(&huart1, temp, 1, 0xffff);9 Z2 j* Q8 K) Y2 @; P
  5. return ch;) S, d" R, H8 q# A& e2 ~) _: k, ~( A5 C
  6. }7 W) K9 I: a9 A$ U+ }# Y/ i
  7. //重定向scanf()函数和getchar()函数,方便应用
    & B5 g( h, m$ w. b& G8 U
  8. int fgetc(FILE * f)) I- ?( {) Q. N- L7 M
  9. {" [' ?$ E" a( A" [$ j; z# @+ S
  10.   uint8_t ch = 0;/ a' n  R/ N! O" u& X, x
  11.   HAL_UART_Receive(&huart1,&ch, 1, 0xffff);2 j+ F! U0 `) x* m) Y* x1 W% [
  12.   return ch;: @+ d- i2 B) w9 [
  13. }6 i  H0 X  s/ t; G% ^! _) {- s
  14. 3 j3 c7 G9 h! m1 P4 g& O+ M. x
  15. /**7 `& u0 f' H0 ^0 Y9 _( G
  16.   * @brief  The application entry point./ ~; H- K4 S( H# Q7 k
  17.   * @retval int
    0 T9 o" j  o5 z" {
  18.   */
    4 o) R* Y1 G* |' G3 ?9 t
  19. int main(void)2 c2 Z9 i% i+ x0 d( `, y
  20. {
    ( X5 ^' X4 u5 n+ `5 g9 ]" @
  21.   /* MCU Configuration--------------------------------------------------------*/
    ! w, z' I: C7 D" w
  22. 2 ?2 g; e6 i4 L/ @
  23.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
    6 H/ ^/ l) }' |( q6 ~3 z; {. m
  24.   HAL_Init();, p6 m  u! \' X% O
  25. 6 n! f4 ]5 T( ?' x6 l
  26.   /* USER CODE BEGIN Init */
    9 D8 w1 u& S3 U
  27. % e5 }' A6 S( n0 X9 {% ^/ w- q
  28.   /* USER CODE END Init */
    3 W3 I4 b5 }3 a+ e' k
  29. 0 I6 ]0 ]. ~3 ?4 i& f
  30.   /* Configure the system clock */
    & d, y0 V' d; S' U
  31.   SystemClock_Config();9 f' @3 ^# m$ a4 H1 S

  32.   I- y, T4 O0 ^
  33.   /* USER CODE BEGIN SysInit */
    $ @+ S9 ]9 x5 Q

  34. 4 y+ I" q; \( J) e& ^
  35.   /* USER CODE END SysInit */
    ( ]7 [$ o! b& A8 z! l
  36. & X1 w# D( a4 Q: w
  37.   /* Initialize all configured peripherals */7 e2 D# f9 k/ s" x, t
  38.   MX_GPIO_Init();
    % O% j% M' ~& D  N" z
  39.         MX_USART1_UART_Init();5 J! D5 q% w; J) }6 a) l
  40.   /* USER CODE BEGIN 2 */
    7 S% ?9 [$ x2 z

  41. / ]8 x4 K' L3 d# a0 R
  42.   /* USER CODE END 2 */& Q  ~% F: _; q, D) n1 `' e
  43. $ ~& F: T: w: k0 N5 X6 S
  44.   /* Infinite loop */
    ( ^- X" p* F" b+ X4 K1 f6 M) W
  45.   /* USER CODE BEGIN WHILE */5 Z2 [4 @: F, ?  h% I' Q0 _
  46.         printf("Hello World\n");
    # E0 i. M* D2 G9 ?$ H) T
  47.   while(1)( }- l! ?: |. ^& y
  48.   {
    , W4 L) t) {+ i$ l
  49. * h# a! @, x. t/ v4 @. n9 n
  50.     /* USER CODE BEGIN 3 */# E' ^( O8 z3 ], ~
  51.   }' c0 g7 O5 [2 X$ i
  52.   /* USER CODE END 3 */( {3 n) H2 u" v% s- W
  53. }
复制代码

$ C+ s7 B) c. _" S8 c, {作者:jxjajl bilibili
3 |2 t! v- s, T+ l" }- n4 D3 W: Y
3 ?" ]9 n( ]3 |2 _' K% h& c% A
3 v1 Q; e1 U, k- P
赞 收藏 评论0 发布时间:2022-11-15 23:38

举报

0个回答

所属标签

相似技术帖

官网相关资源

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