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

STM32-01基于HAL库(CubeMX+MDK+Proteus)仿真开发环境搭建(LED点亮测试实例)

STM32-01基于HAL库(CubeMX+MDK+Proteus)仿真开发环境搭建(LED点亮测试实例)

  • 一、 开发工具版本列表
  • 二、安装过程
  • 三、实例测试(点亮单个LED)
    • 0、功能需求分析
    • 1、Proteus绘制电路原理图
    • 2、STMCubeMX 配置引脚及模式,生成代码
    • 3、MDK打开生成项目,编写HAL库的点灯代码
    • 4、运行仿真程序,调试代码

一、 开发工具版本列表

工具版本功能
STM32CubeMX6.61生成MDK项目、图形化配置功能模块
MDK5.14编写下位机代码
Proteus8.9仿真软件(需要安装8.8以上版本)

二、安装过程

安装顺序没有先后,可以根据链接下载程序安装。
安装包过大,大家可以去网上自行下载。

三、实例测试(点亮单个LED)

0、功能需求分析

使用PA0、PA1引脚完成LED1、LED2的控制,低电平驱动方式,上电后点亮。

1、Proteus绘制电路原理图

Proteus绘制需要对基本元器件的名称有一定了解,如下方的发光二极管LED、电阻RES,可以在网上查找对应的元器件名称列表,方便以后绘制。

绘制电路原理图的步骤:创建画布=》芯片选型及放置=》元器件选型及放置=》连接电路=》修改元器件参数=》仿真运行。

下图为绘制LED所需元器件清单。
在这里插入图片描述

下图为点亮LED的电路原理图。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5dc73bcf74e844448298610d4207d157.png

2、STMCubeMX 配置引脚及模式,生成代码

接下来,根据原理图绘制,创建CubeMX项目,配置引脚及工作模式,生成MDK项目代码。

创建项目,在Pinout配置模块,点击PA0,选择GPIO_Output推挽输出模式,同理,配置PA1。
在这里插入图片描述
在clock单元,配置系统时钟为72MHz。
在这里插入图片描述在Project单元,填写项目名称、保存路径、IDE和版本。
在这里插入图片描述
在 code generator中,配置添加库的方式为所需库,用户代码在每次项目重新生成时保留。

在这里插入图片描述配置完成,通过以上步骤,完成了2个LED引脚的模式配置及时钟配置,接下来,点击GENERATE,生成项目代码。
在这里插入图片描述找到生成路径,可以看到项目目录文件。
在这里插入图片描述

3、MDK打开生成项目,编写HAL库的点灯代码

从上面步骤中,生成了MDK项目。
在MDK-ARM目录中,找到项目快捷方式,打开项目。在这里插入图片描述找到main.c文件,在main函数的while循环中,添加如下代码,此代码块也可以放在while循环上方,一般初始化代码,只执行一次的会放在这里。
在这里插入图片描述在项目中勾选生成HEX选项,HEX文件就是MDK编译生成的十六进制文件,作为烧录到开发板的源程序文件使用,当然,这里我们使用仿真,在Proteus中加载HEX即可。
在这里插入图片描述

点击编译程序,生成HEX文件。在编译窗口显示生成了以下信息,则编译成功,保证 0 errors再进行下一步。

在这里插入图片描述

4、运行仿真程序,调试代码

在Proteus中,双击芯片,选择加载程序路径。
01_LED\LED-MDK\MDK-ARM\LED-MDK
上面是我的项目的HEX文件目录路径。
在这里插入图片描述
点击仿真按钮,运行程序,查看功能执行结果。
在这里插入图片描述
可以看到,两个黄色LED被点亮,功能正常。

代码链接:01-LED 使用PA0、PA1引脚完成LED1、LED2的控制,低电平驱动方式,上电后点亮

至此,我们已经完成了STM32的开发环境搭建以及测试案例的编写,后面,会给大家介绍更多的功能。

相关文章:

  • Redis 教程系列之Redis 事务(十六)
  • 前端理论总结(css3)——css优化的方法
  • 线程通信同步
  • 低代码与数字化转型:重塑企业技术生态的新引擎
  • STM32之HAL开发——串口配置(源码)
  • mac系统使用经验
  • Etcd 基本入门
  • Pandas合并数据集
  • 线程安全(买票案例):加锁方式(synchronized、Lock锁)【同步代码块、同步方法】--学习JavaEE的day31上
  • ROS2高效学习第十章 -- ros2 高级组件之 component 合并进程启动 其一
  • 图像分类实战:深度学习在CIFAR-10数据集上的应用
  • Java 中文官方教程 2022 版翻译完成
  • LQR的横向控制与算法仿真实现
  • BaseDao封装增删改查
  • mybatisplus如何拼接动态sql
  • electron原来这么简单----打包你的react、VUE桌面应用程序
  • Git的一些常用操作
  • 订阅Forge Viewer所有的事件
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 今年的LC3大会没了?
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端学习笔记之观察者模式
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • Android开发者必备:推荐一款助力开发的开源APP
  • Spring Batch JSON 支持
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #Linux(帮助手册)
  • #mysql 8.0 踩坑日记
  • #数学建模# 线性规划问题的Matlab求解
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分享)自己整理的一些简单awk实用语句
  • (规划)24届春招和25届暑假实习路线准备规划
  • (力扣)循环队列的实现与详解(C语言)
  • (篇九)MySQL常用内置函数
  • (十一)c52学习之旅-动态数码管
  • .aanva
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .Net Web窗口页属性
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET的数据绑定
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET性能优化(文摘)
  • @hook扩展分析
  • @vue/cli 3.x+引入jQuery
  • [AndroidStudio]_[初级]_[修改虚拟设备镜像文件的存放位置]
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [C和指针].(美)Kenneth.A.Reek(ED2000.COM)pdf
  • [HackMyVM]靶场Boxing