stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头

news2024/11/18 3:38:33

stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头

文章目录

  • stm32学习总结:3、Proteus8+STM32CubeMX+MDK很有搞头
    • 一、前言
    • 二、资料收集
    • 三、实际案例-点灯
      • 1、Proteus8安装
      • 2、Proteus创建stm32F013C6项目并添加外围LED电路
      • 3、STM32CubeMX配置F103C6引脚生成MDK工程
      • 4、MDK编译生成hex文件
      • 5、Protens导入hex文件进行仿真
    • 四、最后

一、前言

前阵子用codesys的软PLC方案来仿真测试了PLC,以此研究了一阵子PLC和profinet,感触颇深,这种仿真软件还真是挺好用的,硬件软件化真的很方便。最近stm32上有个使用 ADAU1361进行录放音的研究,正好找到了仿真stm32的方案:Proteus,这个时候我发现这个不就是我们大学仿真C51的时候用的软件吗,时间太长不搞这块的开发感觉都快忘的差不多了,实际软件开发做多了感觉这类电子控制类的开发也变得有意思了,PLC、C51搞的有点返祖的感觉了。目前Proteus仿真stm32有一些型号还没有,但是作为基础研究学习是够了。此外,正好借着这个机会早点把stm32这块的一些基础开发总结完,也拖了不少时间了,后续有时间再进阶总结一下使用freertos+stm32cubemx相关的内容。

二、资料收集

Proteus安装:https://blog.csdn.net/weixin_44543463/article/details/116203188
Proteus使用资料:http://www.tup.tsinghua.edu.cn/upload/books/yz/051322-01.pdf
Proteus仿真stm32:https://blog.csdn.net/mistake11a/article/details/109555825
STM32CubeMX也再熟悉一下:https://www.st.com/resource/zh/user_manual/um1718-stm32cubemx-for-stm32-configuration-and-initialization-c-code-generation-stmicroelectronics.pdf

三、实际案例-点灯

1、Proteus8安装

参考对应博客直接下载安装即可,太过于详细了。
百度网盘链接:https://pan.baidu.com/s/1EHGewnvjcnEpPbXnR1qLIA
提取码: pr89

  • (1)右键压缩包,进行解压。进入解压的文件夹,右键p8.9.sp0.exe文件,使用管理员身份打开。

image.png

  • 这里可能有些机器会先弹出安装Visual C++的一个界面,一定要安装这些勾选的组件,否则后续安装会出现问题。

  • (2)莫得选择,next

  • (3)I accept,然后next

  • (4)选择使用本地的激活证书license key。

  • (5)继续next

  • (6)这里会打开一个激活证书管理界面,点击左下角【Browse For Key File】,找到刚才解压出来的文件夹,里面解压后的【Proteus 8.9】文件夹中的【Crack】文件夹下的【Licence.lxk】文件,点击【打开】。


  • (7)点击 【install】,在弹出的对话框询问是否继续,选择 【是】,安装完成后点击【Close】。



  • (8)都不用勾选,直接【next】

  • (9)这里选择安装方式,选择【Custom】,然后选择要安装的路径,注意:两个路径一定要一样,否则后期软件使用时会闪退。


  • (10)这里不用管,默认【Next】就可以。

  • (11)继续【Next】

  • (12)点击【Install】开始安装,安装耗时一分钟左右。


  • (13) 点击【Close】,不要运行Proteus

  • (14)再次进入安装包解压后的【Proteus 8.9】文件夹中的【Crack】文件夹,选择所有文件【复制】。

  • (15) 在桌面找到【Proteus 8.9】的快捷方式,右键点击【打开文件所在的位置】

  • (16) 在空白处【右键-粘贴】,将刚才那三个文件复制过来。

  • (17) 右键粘贴后的【pp8.9】选择【以管理员身份运行】。(运行完成后不会弹出任何对话窗,运行一下就可以),建议关闭各种安全管家之后再运行。

  • (18) 再次打开解压后的【Proteus 8.9】文件夹,鼠标右击【Translations】选择【复制】。

  • (19)再次右键桌面【Proteus 8.9】的快捷方式,右键点击【打开文件所在的位置】

  • (20)点击路径中的【Proteus】文件夹,回到上一级。

  • (21)在空白处【右键-粘贴】,将刚才复制的Translation文件夹粘过来,可能会有27/28个同名文件,点击【替换目标中的文件】。

  • (22)进入【C:\Program Files (x86)\Labcenter Electronics】目录下,有一个【Proteus 8 Professional】文件夹,进入此文件夹,【全选-复制这两个文件夹】。

  • (23)回到Proteus的安装路径(同19、20步),【右键粘贴,替换目标文件】

  • (24)至此,安装完成!

2、Proteus创建stm32F013C6项目并添加外围LED电路

目前我们一般使用的最小板大多为F103C8T6,Proteus上没有C8的,但是在论坛上找到C6的引脚基本和C8是一样的(http://www.51hei.com/bbs/dpj-185185-1.html),只是Flash和RAM小一点,从下图看F103C4和F103CB也是可以作为简单demo来匹配C8的:

创建工程很简单,因为是中文版所以基本上应该都能看懂:

  • (1)新建工程

image.png

  • (2)选择默认模板

image.png

  • (3)默认不创建PCB布版设计

image.png

  • (4)创建固件,选择相关STM32F103C6的固件,编译器选择MDK带的即可,也可以自己配置arm gcc

image.png

  • (5)然后下一步并完成即可:

image.png

  • (6)添加元器件

image.png
添加LED-RED:
image.png
添加电阻:
image.png

  • (7)然后简单布线一下,这里需要相关的电子知识,一般LED需要的电流大小,设置的电阻大小、电压值计算、串并联等等,否则灯就亮不起来,或者实际硬件设计时导致烧掉元器件等问题:

image.png

3、STM32CubeMX配置F103C6引脚生成MDK工程

接着我们需要开发程序控制STM32F103C6的PA1-PA8输出电平来使得LED亮灭,这里我们锻炼使用STM32CubeMX来配置相关引脚,关于STM32CubeMX的安装之前已经有一些接触,这个还是比较推荐的,确实会省不少事。

  • (1)进入MCU选择界面:

image.png

  • (2)左上角搜索STM32F103C6,之后选择一个型号即可,我们选择默认的第一个,之后选择开始项目:

image.png

  • (3)配置相关引脚(这里设置PA1-PA8为GPIO输出)

image.png

  • (4)时钟配置和Tools我们这里先不需要,在项目管理这里设置工程路径和工具链IDE即可(MDK这里选择MDK-ARM即可):

image.png
最后点击右上角的GENERATE CODE生成代码即可,生成完成直接打开工程就进入MDK软件页了。

4、MDK编译生成hex文件

  • 1、点击魔法棒进入配置页面
  • 2、在配置页面的Output这里配置生成HEX文件
  • 3、写完代码最后进行编译或者重编译生成hex文件

这里我们控制GPIO的拉高拉低来闪烁LED灯,代码如下(主要是main.c的相关位置添加循环延时控制寄存器,也可以按部就班的写GPIO引脚的拉高拉低):

...
void delay_ms(uint32_t ms)
{
	uint32_t i_cnt,j_cnt;
	for(i_cnt=0; i_cnt < 3000; i_cnt++);
	for(j_cnt=0; j_cnt < ms; j_cnt++);
	
}
uint32_t i;
/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  /* USER CODE BEGIN 2 */
    GPIOA->BSRR = 0xff;
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
      for(i = 0; i < 8; i++)
	  {
		delay_ms(99000);
		GPIOA->BRR = (1 << i);
		  
		delay_ms(99000);
		GPIOA->BSRR= (1 << i);
	  }
	  for(i = 0; i < 8; i++)
	  {
		  delay_ms(99000);
		  GPIOA->BRR = 0x000000ff;
		  
		  delay_ms(99000);
		  GPIOA->BSRR = 0x000000ff;
	  }
  }
  /* USER CODE END 3 */
}
...

image.png
生成的hex文件位置(MDK项目目录下):
image.png

5、Protens导入hex文件进行仿真

Proteus工程中双击元器件导入hex文件:
image.png
然后调试->开始仿真即可:
GIF.gif

四、最后

Proteus确实好用,有的时候比开发板甚至面包板都好用,用于学习研究再好不过了,也避免了电路设计错误烧掉板子等问题,使用过程中也算是简单锻炼了设计电路的能力,但是有的时候相关的元器件型号缺失就显得比较鸡肋,从大学那时候学习的记忆看似乎更适合去仿真C51系列的单片机作为教学之类的。(比如我这里需要ADAU1361和STM32F411,但是相关元器件导入要登录之类的,甚至需要自己去设计电路图导入导出,这个时候就比较麻烦了,这对于一些新手就比较劝退,折腾不少时间,最后实际项目可能还有差异,所以有能力入手开发板和面包板的还是比较推荐这种方式,如果实在手头有限但有时间折腾的可以啃一下Proteus,还是可以省不少钱的;我后续会根据自己手头有的元器件来选择使用proteus还是实际元器件操作进行总结,我们也不必拘泥于这些外物,学到知识才是关键。)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1303036.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某信服 EDR 白程序DLL劫持

本文用到的白程序回复公众号20231211进行获取。 嗯… 记得去年HW的时候某信服给我装的EDR一直没卸载&#xff0c;不是不想卸载&#xff0c;是因为卸载要密码&#xff0c;所以就摆烂了。。。。 找到EDR这个目录&#xff0c;然后把目录复制到虚拟机中&#xff0c;然后一个一个e…

记录一下快速上手Springboot登录注册项目

本教程需要安装以下工具&#xff0c;如果不清楚怎么安装的可以看下我的这篇文章 链接: https://blog.csdn.net/qq_30627241/article/details/134804675 管理工具&#xff1a; maven IDE&#xff1a; IDEA 数据库&#xff1a; MySQL 测试工具&#xff1a; Postman 打开IDE…

【无线网络技术】——无线城域网(学习笔记)

&#x1f4d6; 前言&#xff1a;无线城域网&#xff08;WMAN&#xff09;是指在地域上覆盖城市及其郊区范围的分布节点之间传输信息的本地分配无线网络。能实现语音、数据、图像、多媒体、IP等多业务的接入服务。其覆盖范围的典型值为3~5km&#xff0c;点到点链路的覆盖可以高达…

大道至简?ETH研究团队提出简化版Transformer模型,综合效率明显提升

论文题目&#xff1a; Simplifying Transformer Blocks 论文链接&#xff1a;https://arxiv.org/abs/2311.01906 2023年&#xff0c;Transformer已经成为人工智能领域中最受欢迎的基础模型&#xff0c;如今火热的大型语言模型&#xff0c;多模态大模型均由不同类型的Transforme…

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列

数据结构与算法-Rust 版读书笔记-2线性数据结构-队列 1、队列&#xff1a;先进先出 队列是项的有序集合&#xff0c;其中&#xff0c;添加新项的一端称为队尾&#xff0c;移除项的另一端称为队首。一个元素在从队尾进入队列后&#xff0c;就会一直向队首移动&#xff0c;直到…

财务机器人(RPA)会影响会计人员从业吗?

财务机器人会对会计从业人员有影响。 不过是正面积极的影响。 它是财务人员工作的好助手好帮手。 具体展开聊聊财务RPA机器人是如何成为财务人员的好帮手。 财务机器人是在人工智能和自动化技术的基础上建立的、以软件机器人作为虚拟劳动力、依据预先设定的程序与现有用户系…

Axure的安装以及简单使用

目录 Axure简介 是什么 有什么用 Axure的优缺点 优点&#xff1a; 缺点&#xff1a; 安装 汉化 Axure的使用 工具栏 页面 ​编辑 添加子页面 ​编辑 Axure简介 是什么 Axure是一款著名的原型设计工具。它允许用户创建交互式线框图、流程图、原型和其他设计文档&…

ERROR: [BD 41-237] Bus Interface property FREQ_HZ does not match between

在自定义IP出现以上错误时可以通过双击模块clk属性 如果是灰色无法二次编辑时&#xff0c;在封装IP时&#xff0c;选择以下菜单

【笔记】硬件工程师入门基础课程

学习视频&#xff08;b站&#xff09;&#xff1a;硬件工程师入门基础元器件课程 基础元器件课程 p1 电阻1. 定义、特性及参数1.1 色环电阻 识别方法&#xff1a;1.2 伏安特性1.3 基本参数 2.电阻的功能2.1 分压2.2 限流2.3 浪涌保护 3. 如何选择电阻 p2 电容1. 电容的定义1.1电…

redis(设置密码)配置文件详细

1.设置账号密码端口 config set requirepass 123456 设置密码为123456 config get requirepass 查看账号密码 auth 123456 登入的时候输入这个确定账号密码 1. 首先连接到Redis服务器: redis-cli 2. 然后使用CONFIG SET命令设置requirepass参数并指定密码: CONFIG SET requi…

Viewport Meta 标记:让网页适应各种设备的魔法符号

在我们用手机或平板电脑浏览网页时&#xff0c;你是否曾发现有些网页能够很好地适应屏幕&#xff0c;而有些却需要左右滑动才能完整显示内容&#xff1f;这就涉及到一个神奇的东西——Viewport Meta 标记。 最近本人在研究自适应的各自实现方法&#xff0c;比如media媒体查询、…

PR快闪模板|简约时尚快节奏开场视频PR模板剪辑素材

这是一款Premiere Pro快闪模板&#xff0c;简约时尚快节奏开场视频 pr模板剪辑素材&#xff0c;用于以独创的方式创建明亮的介绍、时尚的开场白或模特展示。 Premiere Pro CC21及以上&#xff0c;即使是初学者也可以轻松使用&#xff0c;包含视频教程。 来自PR模板网&#xff1…

Go json 差异比较 json-diff(RFC6902)

Go json 差异比较 json-diff(RFC 6902) 毕业设计中过程中为了比较矢量图的差异而依据 RFC 6902 编写的一个包&#xff0c;现已开源&#xff1a; Json-diff 使用 go get -u github.com/520MianXiangDuiXiang520/json-diff序列化与反序列化 与官方 json 包的序列化和反序列化不…

微服务学习|elasticsearch:数据聚合、自动补全、数据同步

数据聚合 聚合的分类 聚合 (aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组 Date Histogram:按照日期阶梯分组&#xff0c;例如一周为一组&#xff0c;或者一月为一组 度量(M…

动能资讯 | 智慧汽车—城市NOA迎爆发

在特斯拉引领的 TransformerBev 架构驱动下&#xff0c;智驾算法趋近于端到端的智驾大模型&#xff0c;使得智能驾驶开始步入城市 NOA 新时代。 消费者认知增强&#xff0c;未来市场空间广阔。伴随城市 NOA 在 23-24 年的落地和普及、L3 法规在年内的落地&#xff0c;行业 0-1…

Java-异常(一)-异常的概述和常见异常的举例

&#x1f436;b站视频 124-异常处理-异常的概述与常见异常的举例_哔哩哔哩_bilibili 目录 b站视频 5.1 异常概念 5.2 Error 示例代码 5.3 Exception异常划分 ❓面试题&#xff1a;常见的异常有哪些&#xff1f;举例说明 &#x1f436;5.1 异常概念 在使用计算机语言进行…

HarmonyOS应用开发-手写板

这是一个基于HarmonyOS做的一个手写板应用&#xff0c;只需要简单的几十行代码&#xff0c;就可以实现如下手写功能以及清空画布功能。 一、先上效果图&#xff1a; 二、上代码 Entry Component struct Index {//手写路径State pathCommands: string ;build() {Column() {//…

HCIA-H12-811题目解析(10)

1、【单选题】DHCP客户端在租期到达哪个比例时第一次发送续租报文&#xff1f; 2、【单选题】在WLAN中用于标识无线网络&#xff0c; 区分不同的无线网络的是&#xff1f; 3、【单选题】我们在笔记本电脑上搜索可接入无线网络时&#xff0c;显示出来的网络名称实际是 4、【单…

leetcode 904. 水果成篮(优质解法)

代码&#xff1a; class Solution {public int totalFruit(int[] fruits) {int lengthfruits.length;int []fruitNumsnew int[length1]; //用于记录各个种类摘了多少个水果int count0; //用于记录当前采摘了几种水果int sum0; //用于记录当前共摘了多少水果for(int left0…

mmseg上手自己的数据集

制作自己的数据集&#xff0c;VOC格式为例。 这三个文件包括数据集的名称。可以使用labelme脚本自动生成。 跟据预测类别修改配置文件 D:\projects\mmsegmentation-main\mmseg\datasets\voc.py 因为是voc格式的数据集&#xff0c;在这个文件里进行配置&#xff0c;修改成自己数…