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

在keil中仿真stm32单片机

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
一、序言
( W3 H5 z* ~4 u2 H; Y4 A
在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我们节省了很多硬件和时间成本,可以更直观的看到代码的执行过程。那么当切换到STM32系列单片机的时候,protues明显不支持了,但是keil的模拟功能还是有很大的用处,例如stm32f103单片机,在keil中可以实现很好的模拟效果,我们可以在其中使用中断、定时器、PWM等功能,可以观测到GPIO的输出情况。然而keil对stm32系列单片机不是很好的支持,如果换一个型号,你会发现完全无法模拟!

/ D- A, k/ h% Z& s# Y( s  c5 j, a
二、配置keil,模拟stm32系列单片机

7 V. k1 X* G+ z
我们可以通过修改某些地方来实现keil对stm32的模拟功能。

# G- @' E% D& t% t# i$ Y" n
1)首先来修改“debug”标签的内容
2 O6 ^! x+ c! S; l2 V
     

8 }# m& b: \- p1 `8 s. y8 l
“Use simulaor”代表要使用软件模拟仿真

7 W( p" e$ U( e" w" U
“dialog DLL”的内容是“DARMSTM.DLL“,表示使用stm系列

) ^) G% f( l$ W) b
“parameter”的内容是“-pSTM32F051C8“,这里匹配的是当前单片机的型号

0 Z. y/ i8 k. H8 b
2)initialization file
/ n; _& O, G( k' l9 l
先来看一下这个文件的内容

# E9 K* c  W) N$ |/ B
map 0x40000000,0x4000ffff read write
1 p/ L- Q$ z8 U
map 0x40010000,0x4001ffff read write

7 ^% [! N1 x- S+ D6 |; Y
map 0x40020000,0x4002ffff read write

  W: F& B4 {* f! ]# V+ j: T5 i% Z# {
map 0x48000000,0x4800ffff read write

& x" G; T3 t( a9 _; f* l1 L- T
这段内容其实是在设置单片机的内存地址的读写特性,上面的这几段地址都是可读可写的。C语言就是在存储器里不停的寻址,然后执行指令,那为什么会是上面这些地址呢?可以查看stm32f051单片机的存储器映射

. ?( Z/ f. @3 p
     
/ m* g- T$ o" m1 J9 x  J
上面只是截取部分存储器的映射情况,这是AHB2的地址。例如你要使用RCC功能,那么可以看到0x40021000•0x400213ff这部分地址需要有读写属性。
* i  e( ~" z' S
三、跟踪某个变量

3 `6 P1 W" s1 B# x+ B: }1 ^. K+ Y0 g$ B
1)找到逻辑分析仪

! b# U4 K+ |; }
完成了基本的配置以后,我们就可以debug了

: G9 p/ j' J- F: Z! U, m+ w0 B
   ' n! B8 R8 ?, ^2 a* i; r

6 M/ ~5 M& b' Z% k2 e. M! ?/ Z
Debug按钮就不用多说了,中间有一个按钮时逻辑分析仪,我们可以点击它,唤醒逻辑分析功能。逻辑分析仪可以帮助我们以图形的方式来观测某个型号。
0 e. M0 h) G; }
2)给逻辑分析仪添加变量

% Z) g& m( y4 p$ G5 F7 y
     

# Z& S( [8 {* R0 L; N
将鼠标定位到全局变量x的左侧,右键-->add x to-->logic analyzer,这样就可以将变量x添加到逻辑分析仪窗口,此时如果点击运行,可以在窗口看到x变量的曲线
3 G2 T* @+ q2 D& y" ]7 a, X% G
     B, U+ c* P& g) q" D4 H' w& \* Z. Y
1 J0 S3 T9 Y; N. |+ P; R& Y
3)修改显示效果

0 S, O5 ~9 s, \1 J( Z2 x$ j
从上面的图可以看到,由于x是一个uint8类型的变量,因此取值范围是0~255。但是这样有时候看不出x的变化情况,因此我需要修改逻辑分析仪的显示效果。点击setup,弹出下面的对话框,我们可以修改去x的显示颜色和显示范围
/ f* c0 e, m( e6 m
  
/ `0 k4 @2 r0 Q. h9 ]: h6 @# @3 V+ k

& n+ l9 D$ y! j: {. U* G5 H
修改之后的显示效果,可以看出来x每2s增加一次,这也正符合代码的逻辑
: m, u5 b0 K: W1 g6 r5 Q+ g5 R
     
# V6 ~/ @& `# z! v3 N' e
四、使用systick
: |( ~2 L  A/ ?7 Y1 }
上面的x变量显示2s增加一次,原因是我们在代码里面使用了cube库的HAL_Delay函数做了延时,来看一下代码

0 K  Q- f% H- @1 K  p3 f
     
& }, Z! G8 V- D2 A% j4 E
在cube库中,这个延时函数使用的是systick功能,也许你模拟出的图像显示x不会变化,那是因为你的systick功能没有配置好
  O1 G  L& b8 O9 ^- M: M: J7 H
1)点击peripheral---core peripheral---system tick timer

5 e" m! d8 s+ n' R  L, d) L+ a
  
- h5 @1 c7 }5 y" \) {6 e

$ Z! {, A$ ~4 s$ \* R
2)按照下面的方式,使能systick
. q1 b, g( I% ~- y( }4 z9 A
   1 s9 u8 U! ~& Z2 ~- j4 e

; s3 U3 w2 i3 K% n# M% i- u" [
3)去掉代码中的等待
2 t9 {; k6 H3 I3 R
如果你在配置时钟代码的时候,有一些状态的等待,那么你需要关掉它,否则无法模拟仿真的

: y/ S8 y! Q0 I) R) v  i
     

2 g7 {- x+ u5 S$ T  j1 P
五、追踪GPIO

3 P) D6 x1 A3 g' [  F- Z
如果你的代码中要输出一个pwm波,那么逻辑分析仪是最好的结果勘测仪器,但是你没有逻辑分析仪,那么还是来软件模拟一下吧。现在假如我使用stm32f051c8这个芯片,在PB2口输出一个pwm波形,那么我们来模拟仿真一下
. H/ `+ z5 @5 c% c
   ' f  q7 u) A( k' e

1 w/ M5 I2 e2 p( f+ Q
我们在keil软件的最下方可以看到一个command窗口,在其中输入一条指令:
& v& x/ _8 w2 [- `# [: t4 ~; H
La  (*((volatile unsigned int *)0x48000414))>>2
3 U0 M" M& p3 F% l! d9 n
上面的指令是在逻辑分析仪中跟踪某个变量,这个变量的地址是0x48000414的bit2,

0 g- S4 K0 C( p" m% P$ Z
翻阅手册你可以看到,这个地址正好是PB2。。。这样我们就看到下面的结果
0 k7 I6 Y/ N9 t
  

; A/ Z- b( R5 ~% P. H  v

该用户从未签到

2#
发表于 2022-7-22 11:13 | 只看该作者
用软件模拟真的很方便。, g5 Z! o  B3 C1 T" T
我之前用板子焊接电路,几个小时不停,出来还有问题。整死人了。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 09:05 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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