当前位置: 首页 > news >正文

proteus结合keil-arm编译器构建STM32单片机项目进行仿真

    proteus是可以直接创建设计图和源码的,但是源码编译它需要借助keil-arm编译器,也就是我们安装keil-mdk之后自带的编译器。

    下面给出一个完整的示例,主要是做一个LED灯闪烁的效果。

    新建工程指定路径,Schematic,PCB layout都选择默认,在最后创建项目工程向导的时候,选择:Create Firmware Project:

     硬件系列选择Cortex-M3,控制器类型选择STM32F103C6(其他类型,可能不会出现Compiler下拉选项),编译器类型如果没有选择项,点击后面的Compilers按钮,在弹出框中选择Keil for ARM,指定keil-mdk安装的ARM路径:

    这样生成的项目,自带源码,源码结构如下所示:

 

    这个源码还自带了标准库中的很多东西,启动文件,核心文件,所以直接编译也是没有问题的。

 

     这里虽然有了标准库中的很多内容,但是一些初始化的功能代码并不在这里,所以需要通过操作寄存器来实现点灯操作。

    如下所示,是一个简单的 通过操作寄存器来让GPIOA的GPIO_Pin_5端口作为电平输出口,并开启时钟使能的代码。

#include <stm32f103x6.h>
#include <stm32f1xx.h> #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2)) 
#define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr)) 
#define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum)) #define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C 
#define PAout(n)   BIT_ADDR(GPIOA_ODR_Addr,n)#define LED0 PAout(5) // PA5 void Delay_nms(unsigned int time)
{    unsigned int i=0;  while(time--){i=12000;  while(i--) ;    }
}void LED_Init(void)
{   RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // clock enableGPIOA->CRL &= 0XFF0FFFFF;  //PA5GPIOA->CRL |= 0X00300000;  //PA5 GPIOA->ODR |= 1<<5;        //PA5 
}int main (void)
{    LED_Init(); while (1){LED0 = 0;Delay_nms(50); LED0 = 1;Delay_nms(50); }
}

    项目源码构建成功:

    接着,我们直接在原理图Schematic这里添加发光二极管和电阻并连线就可以开始仿真了。

 

    前面源码构建好了,这里原理图简单添加了LED就可以进行仿真了。效果如下所示:

 

    这种构建仿真,原理图加源码的方式很适合没有单片机,而且不用在Keil和Proteus之间来回切换的情况,但是它的源码是在临时文件夹中,如下所示:

 

    这种方式对于复杂项目而言,可能也有一些弊端。 

http://www.lryc.cn/news/123797.html

相关文章:

  • 第五十三天
  • gorm基本操作
  • 华为OD机试 - 排队游戏(Java JS Python)
  • 滚动条样式更改
  • 掌握Python的X篇_33_MATLAB的替代组合NumPy+SciPy+Matplotlib
  • Python解决-力扣002-两数相加
  • nginx基于源码安装的方式对静态页面、虚拟主机(IP、端口、域名)和日志文件进行配置
  • [FPAG开发]使用Vivado创建第一个程序
  • 使用 Python 在 NLP 中进行文本预处理
  • [足式机器人]Part3机构运动微分几何学分析与综合Ch03-1 空间约束曲线与约束曲面微分几何学——【读书笔记】
  • pytest框架快速进阶篇-pytest前置和pytest后置,skipif跳过用例
  • Python 基础语法 | 常量表达式,变量,注释,输入输出
  • SQL | 分组数据
  • 软件测试技术之如何编写测试用例(6)
  • 论文阅读——Adversarial Eigen Attack on Black-Box Models
  • 自然语言处理从入门到应用——LangChain:记忆(Memory)-[自定义对话记忆与自定义记忆类]
  • 【C/C++】STL queue 非线程安全接口,危险!
  • 执行Lua脚本后一直查询不到Redis中的数据(附带问题详细排查过程,一波三折)
  • [高光谱]PyTorch使用CNN对高光谱图像进行分类
  • jmeter获取mysql数据
  • Dedecms V110最新版RCE---Tricks
  • CTFshow 限时活动 红包挑战7、红包挑战8
  • Redis使用Lua脚本和Redisson来保证库存扣减中的原子性和一致性
  • 【从零开始学Kaggle竞赛】泰坦尼克之灾
  • 输出无重复的3位数和计算无人机飞行坐标
  • muduo 29 异步日志
  • Qt 对象序列化/反序列化
  • 从零学算法(非官方题库)
  • Java # JVM内存管理
  • 大疆第二批笔试复盘