当前位置: 星创客 > 学习资源 > 讲师博文 > 如何在keil中仿真stm32单片机
如何在keil中仿真stm32单片机 时间:2017-11-09     来源:星创客

一、序言

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

二、配置keil,模拟stm32系列单片机

我们可以通过修改某些地方来实现keil对stm32的模拟功能。

1)首先来修改“debug”标签的内容

“Use simulaor”代表要使用软件模拟仿真

“dialog DLL”的内容是“DARMSTM.DLL“,表示使用stm系列

“parameter”的内容是“-pSTM32F051C8“,这里匹配的是当前单片机的型号

2)initialization file

先来看一下这个文件的内容

map 0x40000000,0x4000ffff read write

map 0x40010000,0x4001ffff read write

map 0x40020000,0x4002ffff read write

map 0x48000000,0x4800ffff read write

这段内容其实是在设置单片机的内存地址的读写特性,上面的这几段地址都是可读可写的。C语言就是在存储器里不停的寻址,然后执行指令,那为什么会是上面这些地址呢?可以查看stm32f051单片机的存储器映射

上面只是截取部分存储器的映射情况,这是AHB2的地址。例如你要使用RCC功能,那么可以看到0x40021000•0x400213ff这部分地址需要有读写属性。

三、跟踪某个变量

1)找到逻辑分析仪

完成了基本的配置以后,我们就可以debug了

Debug按钮就不用多说了,中间有一个按钮时逻辑分析仪,我们可以点击它,唤醒逻辑分析功能。逻辑分析仪可以帮助我们以图形的方式来观测某个型号。

2)给逻辑分析仪添加变量

将鼠标定位到全局变量x的左侧,右键-->add x to-->logic analyzer,这样就可以将变量x添加到逻辑分析仪窗口,此时如果点击运行,可以在窗口看到x变量的曲线

3)修改显示效果

从上面的图可以看到,由于x是一个uint8类型的变量,因此取值范围是0~255。但是这样有时候看不出x的变化情况,因此我需要修改逻辑分析仪的显示效果。点击setup,弹出下面的对话框,我们可以修改去x的显示颜色和显示范围

修改之后的显示效果,可以看出来x每2s增加一次,这也正符合代码的逻辑

四、使用systick

上面的x变量显示2s增加一次,原因是我们在代码里面使用了cube库的HAL_Delay函数做了延时,来看一下代码

在cube库中,这个延时函数使用的是systick功能,也许你模拟出的图像显示x不会变化,那是因为你的systick功能没有配置好

1)点击peripheral---core peripheral---system tick timer

2)按照下面的方式,使能systick

3)去掉代码中的等待

如果你在配置时钟代码的时候,有一些状态的等待,那么你需要关掉它,否则无法模拟仿真的

五、追踪GPIO

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

我们在keil软件的下方可以看到一个command窗口,在其中输入一条指令:

La  (*((volatile unsigned int *)0x48000414))>>2

上面的指令是在逻辑分析仪中跟踪某个变量,这个变量的地址是0x48000414的bit2,

翻阅手册你可以看到,这个地址正好是PB2。。。这样我们就看到下面的结果

前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2018 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号,京公海网安备11010802025203号
返回

讲师博文

星创客 - 华清远见旗下高端IT培训品牌

当前位置: 星创客 > 学习资源 > 讲师博文 >

如何在keil中仿真stm32单片机
来源: 星创客 作者: 星创客 时间:2017-11-09

一、序言 在学习51单片机的时候,经常会使用keil+protues的方式来做一些实验,这样的模拟仿真为我们节省了很多硬件和时间成本,可以更直观的看到代码的执行过程。那么当切换到stm32系列单片机的时候,protues明显不...

一、序言

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

二、配置keil,模拟stm32系列单片机

我们可以通过修改某些地方来实现keil对stm32的模拟功能。

1)首先来修改“debug”标签的内容

“Use simulaor”代表要使用软件模拟仿真

“dialog DLL”的内容是“DARMSTM.DLL“,表示使用stm系列

“parameter”的内容是“-pSTM32F051C8“,这里匹配的是当前单片机的型号

2)initialization file

先来看一下这个文件的内容

map 0x40000000,0x4000ffff read write

map 0x40010000,0x4001ffff read write

map 0x40020000,0x4002ffff read write

map 0x48000000,0x4800ffff read write

这段内容其实是在设置单片机的内存地址的读写特性,上面的这几段地址都是可读可写的。C语言就是在存储器里不停的寻址,然后执行指令,那为什么会是上面这些地址呢?可以查看stm32f051单片机的存储器映射

上面只是截取部分存储器的映射情况,这是AHB2的地址。例如你要使用RCC功能,那么可以看到0x40021000•0x400213ff这部分地址需要有读写属性。

三、跟踪某个变量

1)找到逻辑分析仪

完成了基本的配置以后,我们就可以debug了

Debug按钮就不用多说了,中间有一个按钮时逻辑分析仪,我们可以点击它,唤醒逻辑分析功能。逻辑分析仪可以帮助我们以图形的方式来观测某个型号。

2)给逻辑分析仪添加变量

将鼠标定位到全局变量x的左侧,右键-->add x to-->logic analyzer,这样就可以将变量x添加到逻辑分析仪窗口,此时如果点击运行,可以在窗口看到x变量的曲线

3)修改显示效果

从上面的图可以看到,由于x是一个uint8类型的变量,因此取值范围是0~255。但是这样有时候看不出x的变化情况,因此我需要修改逻辑分析仪的显示效果。点击setup,弹出下面的对话框,我们可以修改去x的显示颜色和显示范围

修改之后的显示效果,可以看出来x每2s增加一次,这也正符合代码的逻辑

四、使用systick

上面的x变量显示2s增加一次,原因是我们在代码里面使用了cube库的HAL_Delay函数做了延时,来看一下代码

在cube库中,这个延时函数使用的是systick功能,也许你模拟出的图像显示x不会变化,那是因为你的systick功能没有配置好

1)点击peripheral---core peripheral---system tick timer

2)按照下面的方式,使能systick

3)去掉代码中的等待

如果你在配置时钟代码的时候,有一些状态的等待,那么你需要关掉它,否则无法模拟仿真的

五、追踪GPIO

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

我们在keil软件的下方可以看到一个command窗口,在其中输入一条指令:

La  (*((volatile unsigned int *)0x48000414))>>2

上面的指令是在逻辑分析仪中跟踪某个变量,这个变量的地址是0x48000414的bit2,

翻阅手册你可以看到,这个地址正好是PB2。。。这样我们就看到下面的结果

相关推荐

全国咨询热线:400-611-6270

?2004-2018华清远见教育科技集团 版权所有 京ICP备16055225号 京公海网安备11010802025203号