使用Proteus 8.9仿真STM32F103流水灯实验

keil5-MDK程序

STM32流水灯程序非常简单,在我的实验中使用GPIOC的引脚连接流水灯。主要程序如下:

LED初始化:led.h

#ifndef __LED_H
#define __LED_H	 
#include <stm32f10x.h>   


void LED_Init(void);	//初始化		 				    
#endif

 led.c

#include "led.h"


//LED IO初始化
void LED_Init(void)
{
	RCC->APB2ENR|=1<<4;    //使能PORTC时钟
	
	GPIOC->CRL&=0X00000000;//清零
	GPIOC->CRL|=0X33333333;//推挽50MHz输出
	GPIOC->ODR=0X00FF;      //输出高
}

test.c文件,main主函数:

#include <stm32f10x.h>   
#include "led.h"


void delay_ms(uint32_t ms)
{
	uint32_t i_cnt,j_cnt;
	for(i_cnt=0;i_cnt<454000;i_cnt++);
		for(j_cnt=0;j_cnt<ms;j_cnt++);
}
int main(void)
{
	int i;
//	Stm32_Clock_Init(9);//系统时钟设置
	LED_Init();//初始化与LED连接IO口
	while(1)
	{
		for(i=0;i<8;i++)
		{
			GPIOC->ODR=~(1<<i);//输出低
			delay_ms(500);
		}
	}
}

 工程目录如下,记得包含头文件。工程链接在文末。

 编译生成.hex文件即可,接下来绘制仿真电路。

Proteus仿真电路

打开Proteus

点击新建工程。

我将工程保存至 D:\仿真 文件夹中,可以给工程重命名,点击下一步。

从选中的模板中创建原理图,选择DEFAULT(默认),点击下一步。

不创建PCB布版设计,直接下一步。

 如果创建固件项目并且安装了编译器,则可以在Proteus中直接给STM32F103R6芯片编写程序。

 因为我已经用keil编好流水灯程序了,所以选择不创建固件项目,点击下一步。

 确认信息,点击完成,即可建立空白项目。

 添加STM32芯片,点击左上角设备选择器的“P”键。

 在左上角“关键字”中输入:STM32。即可显示所有的仿真芯片,Proteus 8.9版本可以支持部分F4系列芯片的仿真。

 右上为芯片原理图,右下为芯片PCB封装,我选择STM32F103R6芯片,双击芯片即可将芯片添加到设备选择器中。

 同理,搜索关键字添加电阻(RES)和LED元件,最后点击右下角确认。

 在元件列表中选择元件,再在原理图中左键单击即可选择元件位置,右键取消选择,再次单击鼠标左键放置元件。

总原理图如下:(不用连外部晶振电路,双击芯片弹出页面可以直接设置晶振频率)

电源VDD使用左侧终端中的POWER,芯片引脚连接使用DEFAULT。

 放置元件,双击元件命名为VDD、PC0~7即可通过网络标号连接。

 总原理图中没有给芯片供电的电源,因为仿真芯片有默认的电源引脚没有显示出来。

点击设计中的配置供电网。

弹出以下窗口,设置VCC/VDD电压为3.3,点击确定。

仿真电路就完成了,接下来下载程序即可实现仿真。

双击STM32芯片,弹出窗口。

点击Program File的文件夹图标,将之前keil编译生成的hex文件添加进来。并修改晶振频率Crystal Frequency为8MHz,点击确定。

 点击左下角按钮开始仿真。

可以看到程序正常运行,LED逐个点亮。

最后保存所有工程文件,实验完毕。

使用发现延时时间并不准确,只能仿真出个大概,无法仿真太复杂的外设电路;而且仿真运行时很占CPU,可能就是这个原因导致仿真时间过慢。

工程文件链接

物联沃分享整理
物联沃-IOTWORD物联网 » 使用Proteus 8.9仿真STM32F103流水灯实验

发表评论