在学习STM32 I2C读写EEPROM的过程中,在编写完成I2C读写EEPROM程序时,在没有配套开发板的情况下,或者你的开发板没有类似支持I2C协议读写EEPROM的情况下,如何用KEIL5自带的仿真功能,对所写的应用程序进行仿真调试,验证其是否正确,具有现实意义。
MDK 的一个强大的功能就是提供软件仿真(注意:STM32F4 不支持软件仿真)。
在开始软件仿真之前,先检查一下配置是不是正确,在 IDE 里面点击在这里插入图片描述 ,确定 Target 选
项卡内容如图 4.1.1 所示(主要检查芯片型号和晶振频率,其他的一般默认就可以):
图 4.1.1 Target 选项卡
确认了芯片以及外部晶振频率(8.0Mhz)之后,基本上就确定了 MDK5.14 软件仿真的硬
件环境了,接下来,我们再点击 Debug 选项卡,设置为如图 4.1.2 所示:
编写debug函数,这里我们参考的依据为MDK的帮助栏,查阅调试章节,这里,我们仿真USART与I2C读写EEPROM,I2C读写EEPROM的必要控制台命令,以及必要的虚拟寄存器,必要的内置函数,我分别作出说明。USART的命令仿真命不再做详细说明,只列出其控制命令,因为USART的仿真,网上已经很多。
首先,你要知道I2C的虚拟端口有哪些,在调试状态下,在控制台输入:DIR VTREG
这条命令现实所有虚拟端口,如下:
找到 I2C1_IN和I2C1_OUT,这就是I2C1设备虚拟端口,他们是I2C1设备与外界仿真唯一的联系通道,他们功能描述如下:
必要的WWATCH函数,以及RWATCH函数,MAP指令,用于分配一块存储单元,作为模拟EEPROM用。
你将要写的debug函数,本质上是在模拟一个可以支持I2C读写的EEPROM芯片,因此你将要写的debug函数必须遵守EEPROM芯片读写时序,即如下时序:
我这里我直接将控制命令和信号函数放进一个文件,命名为I2C_TEST.ini。
代码如下:
I2C_TEST,ini涉及的命令,以及内置函数,读者可查阅MDK的帮助栏,这里不再赘述。
编写I2C读写EEPROM的程序,可以参考野火,或者其他网上资料,这里也将不再赘述。这里仅仅将mian函数以及,仿真结果显示,证明完全可以通过自己编写的debug实现任何你想实现的芯片功能,不再受开发板硬件资源的限制。
以下是仿真结果,通过虚拟串口打印出来,结果如下: