找回密码
 注册
关于网站域名变更的通知
查看: 189|回复: 2
打印 上一主题 下一主题

在keil中仿真stm32单片机

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-7-22 10:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
一、序言

' H) f5 A4 v+ F% _" B
在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我们节省了很多硬件和时间成本,可以更直观的看到代码的执行过程。那么当切换到STM32系列单片机的时候,protues明显不支持了,但是keil的模拟功能还是有很大的用处,例如stm32f103单片机,在keil中可以实现很好的模拟效果,我们可以在其中使用中断、定时器、PWM等功能,可以观测到GPIO的输出情况。然而keil对stm32系列单片机不是很好的支持,如果换一个型号,你会发现完全无法模拟!
( {# e6 e: K1 R$ s) \7 a: i8 w. N6 K
二、配置keil,模拟stm32系列单片机
1 _0 {9 Q3 n. q6 s( O5 i) `3 v
我们可以通过修改某些地方来实现keil对stm32的模拟功能。

% U$ k# p4 l7 D
1)首先来修改“debug”标签的内容
( A+ O" Z: q& \8 v
     

1 x$ Z2 H1 M  O
“Use simulaor”代表要使用软件模拟仿真
; J$ e7 \$ s9 W: w7 H, x
“dialog DLL”的内容是“DARMSTM.DLL“,表示使用stm系列

2 \) F( {; C) k" w' Y* P
“parameter”的内容是“-pSTM32F051C8“,这里匹配的是当前单片机的型号

* Q9 U6 Z" p' t6 S7 W+ Z
2)initialization file
: R5 e- }: Z/ b" `  \
先来看一下这个文件的内容

9 B- j$ s% O+ I& m* B" @9 _
map 0x40000000,0x4000ffff read write

7 j* M( \" {1 ]' a) O( ?; e
map 0x40010000,0x4001ffff read write
+ {6 s+ R5 `9 b7 p  n- x& g# M9 p
map 0x40020000,0x4002ffff read write
. f+ I5 L) T2 Y8 X& u( T1 ?9 s
map 0x48000000,0x4800ffff read write
1 z, c  O# q9 n* L
这段内容其实是在设置单片机的内存地址的读写特性,上面的这几段地址都是可读可写的。C语言就是在存储器里不停的寻址,然后执行指令,那为什么会是上面这些地址呢?可以查看stm32f051单片机的存储器映射
! Y: O; _) q: P* `5 o5 C8 [
     

! V# ~1 o9 n9 h! O) C& j
上面只是截取部分存储器的映射情况,这是AHB2的地址。例如你要使用RCC功能,那么可以看到0x40021000•0x400213ff这部分地址需要有读写属性。
$ z  F- B" t9 [( H4 y
三、跟踪某个变量
! j! H2 \6 q7 O$ c7 b! R5 l
1)找到逻辑分析仪
3 t  }; W0 ~5 A& P1 s% J( X) G  l
完成了基本的配置以后,我们就可以debug了

  ]# G8 c$ y2 k) D0 p# K9 P/ U1 }
  
5 H4 G! N& e  V( Z

9 @2 k' ~! n2 D( B% r& J
Debug按钮就不用多说了,中间有一个按钮时逻辑分析仪,我们可以点击它,唤醒逻辑分析功能。逻辑分析仪可以帮助我们以图形的方式来观测某个型号。
' L  M: J3 t/ Y! E' t; ?
2)给逻辑分析仪添加变量

$ o. |1 _. }& ]: q! }
     
+ j2 X' Y9 v4 ^3 b
将鼠标定位到全局变量x的左侧,右键-->add x to-->logic analyzer,这样就可以将变量x添加到逻辑分析仪窗口,此时如果点击运行,可以在窗口看到x变量的曲线
. g, v* i% _/ I0 @9 k/ r
  
( n. ~4 K* m! {
$ \! r' j5 ~- O, Q
3)修改显示效果
& c  Q% h- y/ p4 D
从上面的图可以看到,由于x是一个uint8类型的变量,因此取值范围是0~255。但是这样有时候看不出x的变化情况,因此我需要修改逻辑分析仪的显示效果。点击setup,弹出下面的对话框,我们可以修改去x的显示颜色和显示范围

5 X0 F+ A2 x0 o! ~
  
5 [9 ]4 c3 [" P  g2 ]3 x
- W; l( M: ], ^( E9 g0 W
修改之后的显示效果,可以看出来x每2s增加一次,这也正符合代码的逻辑

8 P6 `' ?4 o, }
     
4 O* ^3 R* k1 m4 X* t
四、使用systick

( g; J$ @: \* W; B0 M8 j. y4 ?
上面的x变量显示2s增加一次,原因是我们在代码里面使用了cube库的HAL_Delay函数做了延时,来看一下代码
8 }9 V9 ~& I! J6 Y1 B. x0 ?, U
     

  D1 ?* ~: l2 y+ H
在cube库中,这个延时函数使用的是systick功能,也许你模拟出的图像显示x不会变化,那是因为你的systick功能没有配置好
, @1 A: p  {2 V; r# ?
1)点击peripheral---core peripheral---system tick timer

1 U" n3 n3 ~- D
  
! W4 f4 t( q( Y) k
* h$ d) s$ a- t" J% r* U( |
2)按照下面的方式,使能systick

& v9 a+ G* M, p  b  L* ~
   0 A4 F* w& o" W2 J7 \; z4 i6 I$ c
( u, j; A2 K& ?( ]3 |
3)去掉代码中的等待

4 q0 z9 H7 ]2 f: |9 {6 L
如果你在配置时钟代码的时候,有一些状态的等待,那么你需要关掉它,否则无法模拟仿真的
/ ^1 s5 B4 T9 x  j- D
     

4 }: [/ [: e* _- C: G: P
五、追踪GPIO

, o0 @/ @) o* H# U6 `* u
如果你的代码中要输出一个pwm波,那么逻辑分析仪是最好的结果勘测仪器,但是你没有逻辑分析仪,那么还是来软件模拟一下吧。现在假如我使用stm32f051c8这个芯片,在PB2口输出一个pwm波形,那么我们来模拟仿真一下

' ~% |4 J& Y  i* Z
   4 d/ ^! z- m$ \1 p0 Z" ?9 q
3 w' ^: U: U  E, C. y( y
我们在keil软件的最下方可以看到一个command窗口,在其中输入一条指令:

: Y/ Q+ Q: _' `+ o' k- U
La  (*((volatile unsigned int *)0x48000414))>>2
! g. l& J3 q8 I! l7 ?7 @
上面的指令是在逻辑分析仪中跟踪某个变量,这个变量的地址是0x48000414的bit2,
" I$ N- T  s* t! y  g6 x( z
翻阅手册你可以看到,这个地址正好是PB2。。。这样我们就看到下面的结果

8 t, M; W: i* o  t3 R! V( m+ y
  

& x% n7 w# q0 p9 X

该用户从未签到

2#
发表于 2022-7-22 11:13 | 只看该作者
用软件模拟真的很方便。3 N& O- F' K+ ?% i2 |. b5 L
我之前用板子焊接电路,几个小时不停,出来还有问题。整死人了。

该用户从未签到

3#
发表于 2022-7-22 13:08 | 只看该作者
看一看,学习学习。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 06:41 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表