前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Proteus仿真STM32工程入门

Proteus仿真STM32工程入门

作者头像
讲编程的高老师
发布2021-03-18 16:25:51
3.2K0
发布2021-03-18 16:25:51
举报

去年跟朋友一起写的“嵌入式开发”的教材出版了,各平台搜索“嵌入式 高延增编著”即可找到,欢迎选来作为教材使用。

为什么要用Proteus仿真STM32工程?

(1)学习阶段,入门更快更便宜,如果你想尝试学习嵌入式软件开发,只需要买一本书,然后安装Proteus和Keil MDK就可以了,不需要一开始就买各种开发板、外围设备这些东西,可以省一大笔银子;

(2)老师组织教学更容易,如果采用开发板组织教学,经常会有学生的板子出这样那样的问题,一堂课有俩同学的板子出问题让老师帮着调一下就能崩溃掉,一节课有小一半时间干这个了;

(3)学生自学、在宿舍做练习啥的都比较便捷,有一台电脑一本书就可以得到即时反馈。

书配套了Systick使用、PWM实现呼吸灯、SPI通信、DMA、串口等各种案例,并给出了详细的代码和代码注释;还配套了PPT课件。

本文章是书第二章的节选。介绍如何使用Proteus和Keil MDK开发STM32的工程,通过IO口点亮LED灯,相当于STM32的“Hello World!”程序。演示如何使用Proteus仿真STM32工程。因篇幅所限,并不完整。

01

Proteus使用入门

Proteus软件是英国Lab Center Electronics公司出版的电子设计自动化(EDA)工具软件,从原理图布图、代码调试到单片机与外围电路协同仿真,可一键切换到PCB设计,真正实现了从概念到产品的完整设计。是一款将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。

打开Proteus,主界面如下图。Proteus的主页面看上去比较简洁,由菜单与快捷工具栏、快速入门、快速启动、帮助、推送消息、关于这六个区域组成。

点击快捷菜单中的“SchematicCapture”可以打开电路原理图编辑界面,打开原理图编辑界面,此界面主要分缩略图、元件选择、编辑窗口三个区域。

点击上图中箭头所指的“P”按钮进入元件窗口选择要使用的元件选好后在元件列表双击该元件,元件就会出现在元件(DEVICES)区域中,然后就可以将元件拖入编辑窗口进行原理图编辑了。

原件选择窗口如下图。

预览窗口:当用户在元件列表用鼠标选中一个元件后,预览窗口中会显示该元件的预览图;当用户将鼠标焦点移动到原理图编辑区后,会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色方框内就是当前原理图窗口中显示的内容,用户可以用鼠标右键点中绿色框并移动,来改变原理图编辑窗中的显示内容。

元件列表:将用户在元件选择窗口中双击选择的所有元件列在此处,用户可以通过鼠标右键点击选择然后在编辑窗口中使用。

原理图编辑窗口:与其他常见的软件编辑区不同,Proteus的编辑窗口没有滚动条,用户可以通过移动缩略图中的绿色方框来改变可视区域。用户通过鼠标滚轮滚动改变视图的缩放比例;也可以通过点按鼠标滚轮并拖动来改变可视区域;通过鼠标左键先后点击元件列表中的元件然后在原理图编辑窗口中用鼠标左键放置元件;鼠标左键双击原理图中的元件(或者右键点击然后选择“Edit Properties”)来编辑元件的属性;鼠标左键可以用来连线、右键可以删除连线。

仿真按钮区:从左至右依次是运行、单步运行、暂停、停止。

模型选择工具栏:点击此区域的标签可以改变鼠标的状态,从上至下依次是选择模式(Selectionmode)、元件模式(ComponentMode)、连接点模式(JunctionDot Mode)、线标模式(Wire LabelMode)、文本注释模式(Text ScriptMode)、总线模式(Buses Mode)、子电路模式(Subcircuit Mode)等,当用户把鼠标光标停留在对应的标签上时,会在光标右下方显示提示消息。

选择元件按钮:用户点击此按钮跳转到元件选择窗口。

02

一个最简单的工程

Proteus工程

原理图如下:

需要注意的是,编辑完成后,需要对Power进行配置:

C语言代码

1)在“vartypes.h”文件中对工程中用到的变量类型进行宏定义,如代码 2‑1所示。

代码2‑1 vartypes.h

1 //Filename: vartypes.h2 3 #ifndef _VARTYPES_H4 #define _VARTYPES_H5 6 typedef unsigned char Int08U;7 8 #endif9

2)在“includes.h”文件中将工程中所有要用到的“*.h”头文件都包含进来,这样在“*.c”源文件中就只需要在文件起始处包含这一个头文件就可以了,保持工程整洁。如代码 2‑2。

代码2‑2 includes.h

1 //Filename:includes.h2 3 #include "stm32f10x.h"4 5 #include "vartypes.h"6 #include "led.h"7

3)在“led.h”文件中声明两个函数,如代码 2‑3。注意:在头文件中引用其它头文件时不能直接使用“include “includes.h””,否则在编译时会报“include itself”的错误。

代码2‑3 led.h

1 //Filename: led.h2 3 #include "vartypes.h"4 5 #ifndef _LED_H6 #define _LED_H7 8 void LEDInit(void);9 void LED(Int08U);10 11 #endif12

4)在“led.c”文件中实现“led.h”中声明的函数,如代码 2‑4。

代码2‑4 led.c

1 //Filename: led.c2 3 #include "includes.h"4 5 void LEDInit(void)6 {7 GPIO_InitTypeDef g;8 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);9 10 g.GPIO_Pin = GPIO_Pin_1;11 g.GPIO_Mode = GPIO_Mode_Out_PP;12 g.GPIO_Speed = GPIO_Speed_10MHz;13 GPIO_Init(GPIOA, &g);14 }15 16 void LED(Int08U state)17 {18 if(state==0)19 {20 GPIO_SetBits(GPIOA, GPIO_Pin_1);21 }else22 {23 GPIO_ResetBits(GPIOA, GPIO_Pin_1);24 }25 }26

5)更改“main.c”文件,添加头文件,并在main()函数中调用LEDInit()函数进行PA1口初始化,调用LED(1)函数点亮LED,如代码 2‑5所示。

代码2‑5 main.c

1 /* Includes --------------------------------------------------*/2 #include "includes.h"3 4 int main(void)5 {6 /* Initialize LED ------------------------------------------*/7 LEDInit();8 LED(1);9 10 /* Infinite loop */11 while (1)12 {13 }14 }15

Proteus中运行仿真

代码编辑完成后,我们需要创建*.hex文件并把*.hex文件导入到Proteus工程中实现项目仿真。

在Keil MDK构建(Build)工程,如果中间对代码进行了更改,还需要点击工具进行重新构建。如果工程构建成功,在工程路径下“PRJ”文件夹的“Objects”子文件夹中会生成一个“Pro01.hex”文件。

打开Proteus工程。然后,鼠标左键双击STM32F103R6,在弹出的“Edit Component”对话框中编辑其属性。首先,点击“Program File”右侧的图标将MDK工程中构建的“Pro01.hex”程序文件载入;然后,在“Crystal Frequency”编辑框中输入“10M”。点击“OK”按钮保存退出。如图2‑70所示。

最后,点击Proteus左下方的仿真运行图标,工程仿真运行成功后如图2‑71所示LED被点亮变成黄色。

至此,我们的第一个STM32项目 ——点亮LED的仿真工程就全部完成了。


关注公众号:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 讲编程的高老师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档