STM32CubeMX基于HAL库的流水灯实验

STM32CubeMX基于HAL库的流水灯实验

CubeMX是基于Java实现的,需要JDK环境

JDK下载地址:https://www.oracle.com/java/technologies/javase-downloads.html

STM32CubeMX下载地址:https://www.st.com/en/development-tools/stm32cubemx.html

安装过程一路Next就能搞定,这里不再赘述。

一、创建项目

  1. 进入Cube,点击ACCESS TO MCU SELECTOR进入创建项目页面

请添加图片描述

  1. 这里我使用的是STM32F103C8t6,就在搜索框里搜索STM32F103C8,出现结果后双击进入配置页面

请添加图片描述

如果你常用这个开发板的话可以点击小星星⭐收藏它,这样会方便很多

  1. 选择引脚:根据上一篇文章,本次实验采用A4B5C14三个引脚
    • 点击对应引脚,选择GPIO_output

请添加图片描述

  1. 配置调试接口:
    • 左侧栏中点击A-Z->SYS->Debug这里选择Serial Wire

请添加图片描述

  1. 配置GPIO(此步骤在最新的Cube中可以省略,因为默认配置本是如此)
    • 左侧栏中点击A-Z->GPIO->System View->GPIO √->依次查看三个接口是否处于以下状态:

请添加图片描述

GPIO output level:有low和high两种选择,一般选择low

GPIO mode:推挽输出和开漏输出两者模式,两者模式的区别在于

  • 推挽输出中1代表VCC,0表示GND;

  • 开漏输出中1代表高阻态,0代表GND。

GPIO Pull-up/Pull-down:输入需要上下拉,输出一般没有上下拉

Maxinum output speed:最大的输出速度,一般选择low就可以了。

  1. 配置项目
    • 上侧栏中选择Peoject Manager
    • 配置项目名称->Application Stucture选择Basic->IDE选择MDK-ARM Version V5以上->Framware Package…中选择STM32Cube FW_f1 v1.8.4

请添加图片描述

  1. 点击GENERATE CODE生成项目
  2. 弹窗后选择Open project会直接在Keil中打开

在这里插入图片描述

打开后如下图所示

图八

在这里插入图片描述

二、实现效果

本次实验采用三个灯轮流发光->熄灭循环实现,每一次间隔1s,大致意思如下:(1亮,0灭)

1 0 0 ->0 1 0 ->0 0 1 ->1 0 0->.....

1. 代码

  • 如图所示进入main.c,找到while(1)循环,输入以下代码
		//高电平点亮A4
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);
		//延时一秒
		HAL_Delay(1000);
		//低电平熄灭A4
		HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_RESET);
		
		
		//高电平点亮B5
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_SET);
		//延时一秒
		HAL_Delay(1000);
		//低电平熄灭B5
		HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5,GPIO_PIN_RESET);
		
		
		//高电平点亮C14
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_SET);
		//延时一秒
		HAL_Delay(1000);
		//低电平熄灭C14
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);

图八

//HAL库函数注释:

延时函数 HAL_Delay

  • 函数原型: void HAL_Delay (__IO uint32_t Delay)
  • 参数说明:Delay表示所要延时的时间大小,单位是毫秒
  • 实例:HAL_Delay(1000):延时一秒再进行下一步操作

1秒(s)= 100分秒(ds)= 1000 毫秒(ms) = 1,000,000 微秒(μs) = 1,000,000,000 纳秒(ns) = 1,000,000,000,000 皮秒(ps)

写管脚函数 HAL_GPIO_WritePin:

  • 函数原型:void HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

  • 参数说明:

    • GPIOx:管脚组(x的取值为A~G)
    • GPIO_Pin:管脚编号(x的取值为0~15)
    • PinState:管脚的状态(取值为GPIO_BIT_RESET表示0, GPIO_BIT_SET表示1)
  • 实例:

    • HAL_GPIO_WritePin(GPIOA,GPIO_PIN_4,GPIO_PIN_SET);

      管脚组A,4号引脚,亮起

    • HAL_GPIO_WritePin(GPIOC,GPIO_PIN_14,GPIO_PIN_RESET);

      管脚组C,14号引脚,熄灭

图九

2. 仿真示波器

.在没有示波器条件下,可以使用Keil的软件仿真逻辑分析仪功能观察管脚的时序波形。

  • 魔法棒设置(很容易忘记的一步骤,因为Keil老是重置它。。。)
    在这里插入图片描述

这里我看其他很多博客里都把右边的DLL和Parameter也填了,其实没必要:很明显左边对应的Use Simulator仿真器,而右边的对应Use ST-link之类的,不使用右边的调试方式就没必要改写了

  • 配置完成后build->debug

  • 点击图中这一按钮System Analyzer Windows,选择Logic
    在这里插入图片描述

  • 点击setup设置三个引脚信息

    1. 点击添加按钮
    2. 输入引脚信息:GPIOx_IDR.n(x为端口,n为引脚号,GPIOA_IDR.4表示PA4)
    3. Display Type一栏中选择bit
    4. Closer

图十

  • 点击Run,观察波形

在这里插入图片描述

如果发现没有波儿,可能是因为Grid的值太小了,导致波形图太大,当前小窗展示不全,所以可以使用滚轮滑动调试grid的值,这里推荐0.5s和0.2s

3. 实物效果

在这里插入图片描述

三、 总结

当我们通过寄存器来实现流水灯时,我们需要通过手敲代码来设置寄存器到达上述效果,会用到使能时钟、配置输入输出模式等一系列相对繁杂的操作,而当我们使用STM32CubeMX时,通过简单的可视化操作,就能生成对应的代码,无论是寄存器还是时钟或者输入输出模式都已经帮你用代码编写好(更别提翻手册查引脚信息了),而且更加全面、完整,对于初学者来说明显更加友好。

四、参考文章:

HarrietLH:搭建STM32开发环境——STM32CubeMX,Keil5

醉意丶千层梦:基于HAL库实现流水灯

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值