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.hqwc.cn/news/68092.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构】堆的实现,堆排序以及TOP-K问题

目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1.堆的概念及结构 …

STM32 cubemx CAN

接收用到的结构体如下&#xff1a;CAN概念&#xff1a; 全称Controller Area Network&#xff0c;是一种半双工&#xff0c;异步通讯。 物理层&#xff1a; 闭环&#xff1a;允许总线最长40m&#xff0c;最高速1Mbps&#xff0c;规定总线两端各有一个120Ω电阻&#xff0c;闭环…

CSS的引入方式有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 内联样式&#xff08;Inline Styles&#xff09;⭐ 内部样式表&#xff08;Internal Stylesheet&#xff09;⭐ 外部样式表&#xff08;External Stylesheet&#xff09;⭐ 导入样式表&#xff08;Import Stylesheet&#xff09;⭐ 写在最…

vue之动态表单(优化)

代码资源在这儿 ↑ vue之动态表单优化 vue2js动态表单优化vue3ts动态表单优化 vue2js动态表单优化 效果图 目录结构 五个文件的完整代码: 以下是App.vue <template><div><router-view></router-view><Formpage /></div> </templa…

【论文简介】PP-OCRv1-v4中文字符识别论文概述

相关论文 2009.PP-OCR: A Practical Ultra Lightweight OCR System 2109.PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System 2206.PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System 2308.PP-OCRv4&#xff1a;目前代码已发布&#xff08…

OKCC在系统安全方面做了哪些措施?

语音通信行业&#xff0c;运营者普遍比较关心的问题是&#xff0c;运营风险如何控制&#xff1f;运营安全如何保证&#xff1f;OKCC呼叫中心又有那些风控措施来保证运营安全。 当前阶段&#xff0c;语音通信运营&#xff0c;最主要的风险主要包括以下几个方面&#xff1a; 一、…

取证--实操

2022年美亚杯个人赛 运用软件DB Browser for SQLite &#xff08;一款用于查看SQLlite数据库文件的浏览器工具&#xff09; 火眼&#xff0c;盘古石手机取证系统等 案件详情 于2022年10月&#xff0c;有市民因接获伪冒快递公司的电邮&#xff0c;不慎地于匪徒架设的假网站提…

深入源码分析kubernetes informer机制(零)简单了解informer

[阅读指南] 基于kubernetes 1.27 stage版本 为了方便阅读&#xff0c;后续所有代码均省略了错误处理及与关注逻辑无关的部分。 文章目录 关于client-goInformer是什么为什么需要informerInformer工作流程后续分析计划 关于client-go client-go是kubernetes节点与服务端进行资源…

理解 Go 中的切片:append 操作的深入分析(篇2)

理解 Go 语言中 slice 的性质对于编程非常有益。下面&#xff0c;我将通过代码示例来解释切片在不同函数之间传递并执行 append 操作时的具体表现。 本篇为第 2 篇&#xff0c;当切片的容量 cap 不够时 func main() {// slice1 当前长度为 3&#xff0c;容量大小也为 3slice1 :…

【前端 | CSS】滚动到底部加载,滚动监听、懒加载

背景 在日常开发过程中&#xff0c;我们会遇到图片懒加载的功能&#xff0c;基本原理是&#xff0c;滚动条滚动到底部后再次获取数据进行渲染。 那怎么判断滚动条是否滚动到底部呢&#xff1f;滚动条滚动到底部触发时间的时机和方法又该怎样定义&#xff1f; 针对以上问题我…

【LNMP(分布式)】

目录 一、LNMP是什么 二、实际步骤 1.启用虚拟机 1.1 启动三台虚拟机分别命名为nginx&#xff0c;mysql&#xff0c;php 1.2 分别配置基础环境 1.3 测试外网连通性 2.更新源 3.安装nginx并配置 3.1 下载nginx源码包并安装 3.2 配置nginx 4.安装mysql并配置 4.1 安装…

Centos7 开机时遇到initramfs-xxx.img not found错误导致虚拟机无法开启问题处理

1、背景 一台运行在Esxi上面的VM重启后报initramfs-xxx.img not found错误。 按任意键后出现以下错误。 之前在运维Centos7的时候解决过Kernel panic - not syncing : VFS: Unable to mount root fs on unknown-block(0.0)错误&#xff0c;以为按照之前的解决方案&#xff0c;…