目录
六、完整代码
七、总结
一、背景
想在没有开发板的基础上形象逼真仿真基于STM32的设计,除了Proteus无出之右了吧,但目前没有很好地指导直接在Proteus中C编程来仿真STM32设计的帖子供参考,绝大部分的帖子还是借助于Keil MDK或者STM32CubeMX之类的工具,编译成HEX文件之后导入Proteus仿真,程序需要修改时,就得来回切换,反复修改程序、编译程序、导入HEX文件,调试起来非常不方便,也没有充分利用Proteus的优势,费时费力,降低调试效率。
二、STM32开发简介
STM32开发可以分别基于HAL库、库函数或寄存器编程来进行,而基于Proteus链接的Keil for ARM编译器生成的代码(如图1),相比HAL和库函数不具有优势,但HAL(硬件抽象层)和库函数也无非是寄存器软件化,使软件编程更方便,可读性更强,但基于寄存器编程也有代码简略,可以清晰了解编程意图的优点,下面我们以寄存器编程为主导举一个例子来介绍一下在Proteus内部C语言编程仿真STM32设计的实际应用。
图1 Proteus Keil for ARM编译器生成的代码
三、STM32实例简述
选用STM32F103T6芯片,利用PA8/PB2的推挽输出以1秒为周期交替点亮熄灭白色LED灯,系统时钟采用PLL锁相环9倍频8MHz的HSE外部晶振源来获得,电路原理如下图2,Keil for ARM编译器的设置,可以参考Keil for C51的指导设置,详情请参看下面我之前的帖子,链接如下:
Proteus和Keil C51联调仿真完整解析(附程序)_宝玉飞的博客-CSDN博客
图2 STM32F103T6电路原理图
四、Proteus内部寄存器C语言编程
1、时钟函数Clock_Init()
熟悉一个芯片先从时钟开始,这话一点都不假,我们的设置也是先从时钟入手,分别使能内外时钟并等待就绪,APB1二分频,APB2和AHB不分频,PLL对外部时钟HSE先9倍频再赋给系