【嵌入式10】stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期

2023-05-16

stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期

  • 一、题目要求
  • 二、STM32CubeMX简介
    • 1、利用CubeMX新建工程点亮LED灯
      • 1)前期准备
      • 2)新建工程
    • 2、界面讲解
    • 3、配置引脚
    • 4、时钟源配置
    • 5、工程管理
    • 6、添加代码
    • 7、编译及烧录
    • 8、效果
  • 三、keil观察3个GPIO端口的输出波形
    • 1、设置仿真模式
    • 2、使用逻辑分析仪
  • 四、总结


一、题目要求

安装 stm32CubeMX,配合Keil,分别尝试使用寄存器地址方式(汇编或C,不限) 和HAL库这两种方式,完成下列任务:

1、重做上一个LED流水灯(博客【嵌入式08】)作业,即用GPIO端口完成3只LED红绿灯的周期闪烁。

2、在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察3个GPIO端口的输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

二、STM32CubeMX简介

STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。
在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码,支持多种工具链,比如MDK、IAR For ARM、TrueStudio等 省去了我们配置各种外设的时间,大大的节省了时间。


关于STM32CubeMX的安装教程,可参考此博客https://blog.csdn.net/as480133937/article/details/98885316


1、利用CubeMX新建工程点亮LED灯

1)前期准备

在本次实验中,使用到的STM32硬件为,STM32F103C8T6;
软件为,STM32CubeMX软件、KEIL MDK-arm软件,以及STM32F1xxHAL库

2)新建工程

搜索芯片型号–>选择芯片–>创建工程

1 在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR
2 进行芯片型号选择,一般直接在左上角搜索自己的芯片型号即可。
在这里插入图片描述
在这里插入图片描述

2、界面讲解

在这里插入图片描述

  1. 左侧为MCU外设资源选择

在这里插入图片描述

  • Categories 种类选择,将MCU各种外设和资源分类,供用户选择使用;
  • A-Z 顺序选择,MCU的外设资源按A-Z排序,供用户选择使用。
  1. 中间为外设配置

这里可以选择外设的各种功能,选择串口模式(异步、同步、半双工)串口接收终端,和串口DMA传输等。

  1. 右侧为预览界面

这里分为引脚预览系统预览

引脚预览可以查看引脚配置了什么功能,和各个引脚的位置;
任意点击一个引脚即可设置该引脚的各种功能。
在这里插入图片描述

在这里插入图片描述
淡黄色这种颜色表示不可配置引脚,电源专用引脚以黄色突出显示,其配置不能更改。

在这里插入图片描述
深黄色这种颜色表示你配置了一个I/O口的功能,但是没有初始化对应外设功能,引脚处于no mode状态。

在这里插入图片描述
绿色表示配置成功。

系统预览是查看配置的各种外设和GPIO的状态

在这里插入图片描述
右侧第三个对勾图标,表示没有问题;
右侧第二个图标则表示警告,对应配置出现问题,点击该选项即可在外设配置界面进行查看。

3、配置引脚

只需把目标LED对应引脚设置为GPIO_Output即可,按照我在上上篇博客的管脚分配,这里我仍然去选择相同管脚,即PB0 PB5 PA1
在这里插入图片描述

4、时钟源配置

在这里插入图片描述
即配置32的时钟树框图,默认时钟是使用内部RC振荡器。
配置RCC使用外部时钟源,操作如图
在这里插入图片描述
在中间格子配置为72MHz,回车;
在这里插入图片描述
弹出小窗口点击ok,即可完成配置。
在这里插入图片描述

5、工程管理

设置完MCU后,可以进行对工程文件的配置了。
在Project处,这里就是工程的各种配置,我们只用到有限几个,其他的默认即可 。
注意 存储目录不可以有中文

在这里插入图片描述
然后点击Code Generator,进行进一步配置。
在这里插入图片描述
点击GENERATE CODE 创建工程,等待一段时间后,成功打开了工程文件。

6、添加代码

在main.c文件的main函数下的while循环中,添加下面几行代码即可。


	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
	  HAL_Delay(1000);

	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
	  HAL_Delay(1000);
	  
	  HAL_GPIO_WritePin(GPIOA,GPIO_PIN_1,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET);
	  HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
	  HAL_Delay(1000);

在这里插入图片描述

提醒:所有自己编写的代码请放在/* USER CODE BEGIN XXX / / USER CODE END XXX */之间;
这样我们修改工程的时候你自己写的代码就不会被删除。

7、编译及烧录

编译发现没有报错,那么进行烧录啦。
在这里插入图片描述

将C8T6与USB转TTL相连,接入电脑端,打开FlyMcu进行烧录在这里插入图片描述

8、效果

在这里插入图片描述

三、keil观察3个GPIO端口的输出波形

在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形,更方便动态跟踪调试和定位代码故障点。 请用此功能观察第1题中3个GPIO端口的输出波形,并分析其波形反映的时序状态正确与否,高低电平转换周期(LED闪烁周期)实际为多少。

1、设置仿真模式

在使用仿真模式时,需要进行Debug模式设置,下图是Debug设置模式。
在这里插入图片描述

注意在Debug设置里下面两项内容进行更改:
Dialog DLL默认是DARMSTM.DLL
Parameter默认是-pSTM32F103VC

2、使用逻辑分析仪

设置完成后,开启调试模式,打开逻辑分析仪
在这里插入图片描述

界面如下
在这里插入图片描述

给逻辑分析仪中添加要观察的IO口
在这里插入图片描述

在这里插入图片描述
可以通过以下几种方法查询IO口可以输入的名字

方法一:在左下角命令行输入dir vtreg命令,查看有哪些引脚可以被检测
在这里插入图片描述

方法二:直接复制最开头也可在这里插入图片描述
方法三:直接在敲PORTA.,PORTB.出来目标端口
在这里插入图片描述

方法四(推荐):直接以 PORTX >> X 的形式输入,内容取决于代码中定义的管脚

在这里插入图片描述

注意!!务必将Display Type处设置为Bit!!

设置好之后,逻辑分析仪左侧会出现刚才设置的两个IO口,点击全速运行
在这里插入图片描述
执行一段时间后,点击停止按钮即可
在这里插入图片描述

得到的波形图如下:
在这里插入图片描述
当波形有问题时,可以点击左侧管脚,再点击Auto尝试。
在这里插入图片描述
观察每次变化的时间,其实只有0.69s,并没有实际定义的1000ms。

四、总结

HAL库提供的可视化界面大大提高了编程效率,无需再利用代码去配置管脚了,效果很好,受益匪浅,以后会多加利用。
人眼看到以为的1s和实际时间还是有所偏差,因此可以利用逻辑分析仪进行。

参考
[1] https://blog.csdn.net/as480133937/article/details/98885316
[2] https://blog.csdn.net/as480133937/article/details/98947162
[3] https://blog.csdn.net/qq_20222919/article/details/100037901

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【嵌入式10】stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期 的相关文章

  • 防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)

    实验要求 根据实验要求配置防火墙 xff1a 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户 xff0c 反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一 xff1a 配置各个终端 防火墙端口IP地址 终
  • 常见信息安全威胁与经典案例

    文章目录 信息安全威胁现状网络战争的开端 xff1a 震网 病毒信息安全攻击事件的演变安全威胁分类 网络安全威胁案例美国Dyn DNS服务遭受DDoS攻击Mirai病毒发动攻击过程 xff08 DDos攻击过程 xff09 扫描获取控制权限
  • 华为FusionCompute详解(一)FusionSphere虚拟化套件介绍

    文章目录 虚拟化FusionSphere虚拟化套件特点管理简单性能至优 FusionSphere虚拟化套件组成FusionSphere服务器虚拟化架构FusionSphere架构特点与用途FusionSphere应用场景单虚拟化场景多虚拟化
  • 华为FusionCompute详解(二)FusionCompute总体介绍以及规划部署

    文章目录 FusionCompute产品定位FusionCompute产品架构FusionCompute软件逻辑组成 FusionCompute产品功能虚拟化计算虚拟化存储虚拟化网络 FusionCompute带来的价值FusionComp
  • Docker基础篇(1)

    文章目录 Docker简介是什么概念容器VS虚拟机能干什么技术职级变化一次构建 xff08 镜像 xff09 xff0c 到处运行 xff1a 去哪下 Docker简介 是什么 为什么会有Docker出现 xff1a 解决重复的环境部署开销
  • openStack:学习openStack的前提知识(1)虚拟化以及KVM简介

    文章目录 KVM简介KVM核心组件Libvirt组件 KVM简介 KVM 目前X86平台上最热门 xff0c 运用最多的虚拟化解决方案 xff0c openStack对KVM支持也是最好的 所以后续使用KVM作为Hypervisor xff
  • 解决WSL2/ubuntu安装软件报错 E: Invalid operation insatll 问题

    文章目录 解决WSL2安装软件报错E Invalid operation insatll 问题方法一方法二 解决WSL2安装软件报错E Invalid operation insatll 问题 此问题为系统定位不到软件包 xff0c 无法安
  • github-copilot的使用步骤

    1 首先登录你的github账号 xff0c 点击头像 xff0c 点击设置 2 在设置界面点击Copilot 并点击try Colilot 3 点击绿色按钮继续 4 设置为允许 xff0c 并取消允许使用你的代码来改进这一选项 xff0c
  • Arduino IDE配置esp8266开发环境

    目录 前言arduino IDE安装配置ESP8266开发环境通过开发板管理器安装手动安装开发版管理器备用的网址 参考 前言 之前本科那会疫情在家用esp8266 ESP 01s Relay模块做了一个远程浇花的设备 xff0c 当时使用a
  • 三、Ubuntu 18.04系统调试(命令/换源)

    目录 一 常用命令 二 Ubuntu 18 04换源 2 1便捷方法 2 2命令行方法 xff08 较为复杂 xff0c 但可查看防止后期有些错误是因为源导致的源文件 xff09 一 常用命令 目录操作 pwd 查看当前目录 cd 返回上一
  • 使用VScode远程操作虚拟机(ubuntu)

    1 VSCode安装 2 打开Ubuntu 使用ifconfig 获取系统接口 3 打开remote ssh 4 配置好相关属性 5 开启远程连接输入密码即可连接
  • 学习率(Learing Rate)的作用以及如何调整

    1 什么是学习率 学习率 Learning rate 作为监督学习以及深度学习中重要的超参 xff0c 其决定着目标函数能否收敛到局部最小值以及何时收敛到最小值 合适的学习率能够使目标函数在合适的时间内收敛到局部最小值 这里以梯度下降为例
  • Pytorch 中net.train() 和 net.eval()的作用和如何使用?

    一般在训练模型的代码段加入 xff1a model train 在测试模型时候加入 xff1a model eval 同时发现 xff0c 如果不写这两个程序也可以运行 xff0c 这是因为这两个方法是针对在网络训练和测试时采用不同方式的情
  • Qt 子窗口内嵌到父窗口中

    有时需要把一个子窗口内嵌进入父窗口当中 我们可以这样做 1 新建一个QWidget 或者QDialog的子类 ClassA xff08 父类为ClassB xff09 2 在新建类的构造函数中添加设置窗口属性 setWindowFlags
  • 用Cmake 编译OpenCV常见的错误

    minGW32 make遇到的错误1 xff1a 37 Linking CXX shared library bin libopencv core341 dll CMakeFiles opencv core dir objects a me
  • 卷积 反卷积 上采样 下采样 区别

    1 卷积 就是利用卷积核 步长前进 卷积整个图片 2 反卷积 反卷积的具体操作 原图输入尺寸为 1 xff0c 3 xff0c 3 xff0c 3 对应 batch size channels width height 反卷积tconv 6
  • Go语言操作数据库MySQL

    连接 Go语言中的database sql包提供了保证SQL或类SQL数据库的泛用接口 xff0c 并不提供具体的数据库驱动 使用database sql包时必须注入 xff08 至少 xff09 一个数据库驱动 我们常用的数据库基本上都有
  • 解决Git请求错误问题

    git clone gits github com Cloning into 39 FdogSerialize 39 git 39 remote gits 39 is not a git command See 39 git help 39
  • Reactor 模式

    Reactor 翻译过来的意思是 反应堆 xff0c 可能大家会联想到物理学里的核反应堆 xff0c 实际上并不是的这个意思 这里的反应指的是 对事件反应 xff0c 也就是来了一个事件 xff0c Reactor 就有相对应的反应 响应
  • MATLAB画图调整分辨率

    问题 xff1a 经常需要用MATLAB画图 xff0c 但是保存之后分辨率不高 xff0c 特别是需要放大的情况下 解决 xff1a 对于下面这种画出的图形 选择 文件 61 gt 导出设置 61 gt 渲染 61 gt 分辨率 选择60

随机推荐

  • C语言中常见的逻辑错误

    常见错误一 xff1a 61 和 61 61 混在一起 int main int ret if ret 61 1 return 0 结果 xff1a 变量被错误赋值 xff0c 逻辑判断错误 错误二 xff1a 定义较大的全局变量造成 编译
  • Qt中常见的位置和尺寸

    QPoint类的介绍 QPoint 类封装了我们常用用到的坐标点 x y 常用的 API 如下 构造函数 构造一个坐标原点 即 0 0 QPoint QPoint 参数为 x轴坐标 y轴坐标 QPoint QPoint int xpos i
  • 关于QT线程运用的三种方式

    QThread 类函数 QThread 类常用 API 构造函数 QThread QThread QObject parent 61 Q NULLPTR 判断线程中的任务是不是处理完毕了 bool QThread isFinished co
  • 安装Ubuntu22.04+nvidia驱动+CUDA-11.7+GRPMACS patch PLUMED

    首先是Ubuntu22 4的安装 Ubuntu系统一般直接可以使用RUFUS软件制作U盘启动项 xff0c 再依照顺序安装Ubuntu系统 xff0c 这里不赘述 CUDA 11 7 span class token function su
  • Linux部署Nexus私服

    这篇文章主要介绍了Linux搭建自己Nexus私服的实现方法 xff0c 文中通过示例代码介绍的非常详细 xff0c 对大家的学习或者工作具有一定的参考学习价值 一 Nexus介绍 对maven来说仓库分为两类 xff1a 本地仓库和远程仓
  • 元学习和机器学习的对比

    目录 引言机器学习元学习什么是元学习元学习的流程学习学习函数评价学习函数好坏迭代优化 整体框架 元学习和机器学习的对比定义的区别数据集划分的区别损失函数的区别两者之间的共通之处 总结 引言 本篇博客是李宏毅老师元学习课程的笔记 深度学习大部
  • 如何使用C++实现10个数的冒泡排序

    96 96 冒泡排序是一种计算机科学领域的较简单的排序算法 xff0c 是一种简单的适合初学者学习的算法 上图为冒泡排序简单的图片理解 xff0c 将第一个数依次与后面的数进行比较 将数值大的数沉到底部或将数值小的数浮到顶部 简称 大数沉淀
  • 通过Cerebro访问Elasticsearch

    本文以阿里云Elasticsearch为例 xff0c 介绍通过Cerebro访问Elasticsearch的方法 阿里云Elasticsearch兼容开源Elasticsearch的功能 xff0c 以及Security Machine
  • 手把手教您完成Elasticsearch数据迁移

    您可以通过Logstash reindex和OSS等多种方式在Elasticsearch之间迁移数据 本文以阿里云Elasticsearch xff08 简称ES xff09 为例 xff0c 介绍阿里云Elasticsearch间数据迁移
  • Solr集群数据迁移至Elasticsearch

    Elasticsearch是一款非常强大的搜索引擎 xff0c 可以让你在海量的数据中快速找到想要的内容 例如 xff0c 代码搜索 xff1a 可以帮助您找到相应的代码仓库 xff0c 还可以实现代码级的搜索及高亮显示 xff1b 网上s
  • k8s创建Deployment报错:no matches for kind “Deployment“ in version “extensions/v1beta1“

    报错类型 xff1a root 64 master kubectl create f lzb test yaml error unable to recognize 34 lzb test yaml 34 no matches for ki
  • 3分钟学会使用Elasticsearch跨集群复制功能(CCR)

    当您需要将本地Elasticsearch集群中的索引数据迁移到一个远程集群中 xff0c 或者将一个远程集群中的索引数据迁移到本地集群 xff0c 可通过跨集群复制CCR xff08 Cross Cluster Replication xf
  • 通过Elasticsearch和rsbeat实时分析Redis slowlog

    Redis是目前流行的高性能key value数据库 xff0c 但如果使用不当 xff0c 很容易出现慢查询 慢查询过多或者一个时间较长 xff08 例如20s xff09 的慢查询会导致操作队列 xff08 Redis是单进程 xff0
  • 通过Monstache实时同步MongoDB数据到Elasticsearch

    当您的业务数据存储在MongoDB中 xff0c 并且需要进行语义分析和大图展示时 xff0c 可借助Elasticsearch实现全文搜索 语义分析 可视化展示等 本文介绍如何通过Monstache将MongoDB数据实时同步至Elast
  • 【必入】云虚拟主机怎么屏蔽指定的IP地址

    解决方法 可通过下面2种方法屏蔽指定的IP地址 xff0c 具体操作步骤请点击此链接 xff1a https help aliyun com knowledge detail 36226 html 通过 htaccess文件屏蔽指定的IP地
  • 通过ES-Hadoop实现Spark读写Elasticsearch数据

    ES Hadoop是Elasticsearch推出的专门用于对接Hadoop生态的工具 xff0c 可以让数据在Elasticsearch和Hadoop之间双向移动 xff0c 无缝衔接Elasticsearch与Hadoop服务 xff0
  • 通过Uptime实时监控云Elasticsearch服务

    Heartbeat支持通过HTTP HTTPS TCP和ICMP服务 xff0c 定期检测网络端点状态 xff0c 并将采集的检测数据 xff0c 输出到Kibana的Uptime应用中 xff0c 实时监控应用程序及服务的可用性和响应时间
  • 网站URL路径中“#”“?”“&”号的作用是什么

    虽然在搜索引擎蜘蛛抓取的过程中 xff0c 对于网站URL路径中出现的 xff1f amp 等符号 xff0c 会严重影响蜘蛛的抓取 可是在网站URL结构当中的动态路径中 xff0c xff1f amp 也是经常出现的特殊符号 xff0c
  • vscode调试C++ 以及 cMake编写

    vscode对C 43 43 程序进行调试 cMake 简单的CMakeLists 1 先编写hello cpp span class token macro property span class token directive hash
  • 【嵌入式10】stm32CubeMX+Keil使用HAL库点灯,并使用逻辑分析仪观察周期

    stm32CubeMX 43 Keil使用HAL库点灯 并使用逻辑分析仪观察周期 一 题目要求二 STM32CubeMX简介1 利用CubeMX新建工程点亮LED灯1 xff09 前期准备2 xff09 新建工程 2 界面讲解3 配置引脚4