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

在keil中仿真stm32单片机

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

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

1 T/ v# }3 u; G
我们可以通过修改某些地方来实现keil对stm32的模拟功能。
5 b, d+ ^* E3 g6 E* H! h
1)首先来修改“debug”标签的内容

/ ~/ Y* \: E6 I+ U
     

+ F- W, n  Q8 H2 a2 l9 N
“Use simulaor”代表要使用软件模拟仿真
# t2 n" }9 Z7 S% ~: ]' D) c$ [
“dialog DLL”的内容是“DARMSTM.DLL“,表示使用stm系列
6 y$ S6 D7 o1 t! k
“parameter”的内容是“-pSTM32F051C8“,这里匹配的是当前单片机的型号
. m1 G! ~( U# r' C
2)initialization file
+ |6 P7 s# e. |) Q
先来看一下这个文件的内容

$ o- R' O. r# [, b4 \2 r
map 0x40000000,0x4000ffff read write

' ]% h% [) Q3 ~
map 0x40010000,0x4001ffff read write

8 J6 i* \% x$ ~9 Y" f/ h
map 0x40020000,0x4002ffff read write

4 B. p' W* a+ k1 U
map 0x48000000,0x4800ffff read write
: i# I) W$ `& Z$ x$ [$ C
这段内容其实是在设置单片机的内存地址的读写特性,上面的这几段地址都是可读可写的。C语言就是在存储器里不停的寻址,然后执行指令,那为什么会是上面这些地址呢?可以查看stm32f051单片机的存储器映射
1 C, |4 I! u/ X
     

1 y2 A; `3 k+ l: B9 ~/ l- J7 p6 s
上面只是截取部分存储器的映射情况,这是AHB2的地址。例如你要使用RCC功能,那么可以看到0x40021000•0x400213ff这部分地址需要有读写属性。

# Y  p8 M# j4 B) V3 A: N
三、跟踪某个变量

( z0 W- Z- a. S; W
1)找到逻辑分析仪

. g) y+ i9 R9 l+ k3 [
完成了基本的配置以后,我们就可以debug了

) Z! j+ L. o: |
   9 o# p: O% s# y- U

; v' n1 o" I; y' }$ F6 e
Debug按钮就不用多说了,中间有一个按钮时逻辑分析仪,我们可以点击它,唤醒逻辑分析功能。逻辑分析仪可以帮助我们以图形的方式来观测某个型号。

$ I0 c+ m' ~# D7 t2 T' {3 T  ^5 [, `
2)给逻辑分析仪添加变量

' _0 `6 n" |0 t6 w% e
     
5 }8 K# P' c9 h
将鼠标定位到全局变量x的左侧,右键-->add x to-->logic analyzer,这样就可以将变量x添加到逻辑分析仪窗口,此时如果点击运行,可以在窗口看到x变量的曲线
9 c. P3 h; |4 s# N  I' i3 G! v
     ~& n" r7 \- o# o1 J% l
3 g1 G( [1 `* M4 {1 A1 j8 h
3)修改显示效果
+ u8 s5 `3 q1 |# ]9 G& t, T
从上面的图可以看到,由于x是一个uint8类型的变量,因此取值范围是0~255。但是这样有时候看不出x的变化情况,因此我需要修改逻辑分析仪的显示效果。点击setup,弹出下面的对话框,我们可以修改去x的显示颜色和显示范围
, P  s  ]1 f3 ~, `( X
  
- A$ c! J# D% t- V, H
7 _5 |4 K5 M7 b( D& `
修改之后的显示效果,可以看出来x每2s增加一次,这也正符合代码的逻辑
, A- s5 Q, K6 X5 g8 o
     
+ f8 t( q  O3 x! C
四、使用systick

9 v6 \0 s3 ~% j/ n3 H, v* _7 {; e/ N; S
上面的x变量显示2s增加一次,原因是我们在代码里面使用了cube库的HAL_Delay函数做了延时,来看一下代码

! f+ k0 {1 e- ^
     

% i- V. T' ?0 Z6 |2 F2 Q1 p
在cube库中,这个延时函数使用的是systick功能,也许你模拟出的图像显示x不会变化,那是因为你的systick功能没有配置好
: ]% B9 Y5 @) e1 ?4 S  C6 R7 j
1)点击peripheral---core peripheral---system tick timer

# H# A& O1 M. X& t: Q
  
* [+ ^& _3 a5 D# x. \
+ [* V7 j7 T2 h& `& M# M2 `
2)按照下面的方式,使能systick
. ^* f1 V+ R* [$ [; u
   ; h/ u" {1 J; N/ n7 |
; w8 n2 ?. l! u# m8 i& y. k* X# P
3)去掉代码中的等待

" s- `+ n, ^* L
如果你在配置时钟代码的时候,有一些状态的等待,那么你需要关掉它,否则无法模拟仿真的

% Y0 f  i# M) N' E' D5 W5 s
     
8 t" l8 I- i, H4 ~* `
五、追踪GPIO

3 P2 `. S, b2 Q5 y! \# G
如果你的代码中要输出一个pwm波,那么逻辑分析仪是最好的结果勘测仪器,但是你没有逻辑分析仪,那么还是来软件模拟一下吧。现在假如我使用stm32f051c8这个芯片,在PB2口输出一个pwm波形,那么我们来模拟仿真一下
3 U! H/ _" X, m7 S3 |+ q: }8 ?
  
6 S5 C- c0 i' l

/ Z( _! t6 _. k
我们在keil软件的最下方可以看到一个command窗口,在其中输入一条指令:
0 ?/ v7 F1 _8 U( @
La  (*((volatile unsigned int *)0x48000414))>>2

3 W% t! P9 l4 [, I( Y7 x# g& r
上面的指令是在逻辑分析仪中跟踪某个变量,这个变量的地址是0x48000414的bit2,
6 D* N7 p( ~$ O6 }' Y2 d% q
翻阅手册你可以看到,这个地址正好是PB2。。。这样我们就看到下面的结果
" f. [; U) G9 r( M; Q
  

6 n) O+ Y1 q  ?& \9 x

该用户从未签到

2#
发表于 2022-7-22 11:13 | 只看该作者
用软件模拟真的很方便。+ Y& S5 \8 D) v# f% ^
我之前用板子焊接电路,几个小时不停,出来还有问题。整死人了。

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 07:41 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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