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


一、题目要求

安装 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

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

噗噗的罐子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值