给新手的两轮自平衡小车开发实战指南
  • Introduction
  • 前言
    • 前言
    • 推荐学习路线
  • 套件上手
    • 必看开箱组装
    • 参数特点一览
    • 蓝牙遥控模式
    • 红外循迹模式
    • 超声跟随模式
    • 超声避障模式
    • 提起识别
    • 着陆识别
    • OLED显示说明
    • 烧录程序指南
    • 修改遥控APP
    • 修改开机模式
    • 硬件组成概述
    • IO引脚分配
    • 软件功能说明
    • 程序框架介绍
    • 分析排除故障
  • 原理分析篇
    • 平衡原理
    • 动力学分析
    • 数学建模
    • Simulink仿真
  • 电路开发篇
    • 系统框架一览
    • 主控模块
    • 稳压模块
    • 驱动模块
    • 蓝牙模块
    • 传感器模块
    • 底板功能说明
    • 电机参数说明
    • 洞洞板底板手工焊接教程
  • 软件开发篇
    • 约定代码编写规则
    • 安装MDK-ARM软件
    • 使用MDK-ARM软件编译代码
    • 安装STM32CubeMX软件
    • STM32CubeMX软件生成工程
    • GPIO与LED闪烁的仪式感
    • Timer与按键消抖的应用
    • Usart与Printf函数重定向
    • Timer编码器模式读取编码器
    • PWM与TB6612FNG驱动电机
    • 硬件I2C读取MPU6050原始数据
    • 加速度计、陀螺仪的工作原理和数据融合
    • MPU6050姿态解算和数据融合
    • PID控制原理与增量式PID算法
    • 电机速度闭环内环PID控制
    • 直立平衡角度环PID控制
    • 运动速度闭环外环PID控制
    • 提高PWM频率为24kHz
    • 移植U8g2单色图形库驱动OLED
  • 其他
    • 扩展投稿
由 GitBook 提供支持
在本页
  • 预先了解
  • 具体步骤

这有帮助吗?

  1. 软件开发篇

GPIO与LED闪烁的仪式感

上一页STM32CubeMX软件生成工程下一页Timer与按键消抖的应用

最后更新于5年前

这有帮助吗?

本小节教你使用 STM32CubeMX 软件配置 MiaowLabs-STM32F1-Micro 控制板的底层驱动,并使用 MDK-ARM 5.17 编写代码点亮板子上的的蓝色 LED。

在上一小节中,我只是教你使用 STM32CubeMX 软件生成工程,但没有进行任何实际应用操作。在这一小节,我将教你在生成工程的基础上,继续配置 GPIO 引脚点亮 LED 灯,然后编写代码使其闪烁起来。

跟学习编程语言时编写 Hello World 程序一样,在学习单片机时编写点灯程序也是一个充满仪式感的学习过程。点灯程序编写成功,意味着 MCU 初始化、语言环境、编译连接烧写复位、硬件供电都基本正确了,其他的操作就都有了基础。

预先了解

MiaowLabs-STM32F1-Micro 控制板上面有一颗用户灯(蓝色 LED) 是跟 STM32 的 PB12 引脚相连。我们可以通过编程控制该 LED 的亮灭状态,当 PB12 引脚为低电平时,LED 为亮状态;当 PB12 引脚为高电平时,LED 为灭状态。

具体步骤

进入我们上一小节创建的 MiaowLabs-Demo 文件夹,找到 MiaowLabs-Demo.ioc 工程文件,双击,打开工程。在 Pinout&Configuration 界面中的芯片中点击 PB12,并将其配置为 GPIO_Output。

在左侧的 System Core 下拉菜单中选择 SYS,然后在 SYS Mode and Configuration 中把 Debug 设置成 JTAG(4 pins),即是把系统配置和模式设置为 JTAG 接口,方便我们后面使用 SWD 调试工具。

在左侧的 System Core 下拉菜单中选择 RCC,然后在 RCC Mode and Configuration 中把 High Speed Clock (HSE) 和 Low Speed Clock (LSE) 设置为 Crystal/ceramic Resonator,即是把高速、低速时钟源都设置成外部晶振。

在左侧的 System Core 下拉菜单中选择 GPIO,然后在 GPIO Mode and Configuration 中对 PB12 引脚进行配置,GPIO output level 代表 GPIO 默认输出电平,在这里设置为低电平;GPIO mode 代表 GPIO 引脚模式,在这里设置为推挽输出;GPIO Pull-up/Pull-down 即 GPIO 上拉或下拉,在这里设置为既不上拉也不下拉;Maximum output speed 即 最大输出速度,在这里设置为高速;User Label 即用户标签,因为 PB12 在这里的功能是用作控制 LED,所以输入 LED 作为标签。

点击 Clock Configuration,配置时钟,在 HCLK(MHz) 中输入 72,然后按一下键盘的 Ener 回车键。这样,就可以自动把时钟配置到 72 MHz。

点击 GENERATE CODE,重新生成代码。

使用 MDK-ARM 打开工程代码,重新编译代码,编译完成后,提示没有错误。

然后可以在 MiaowLabs-Demo、MDK-ARM\MiaowLabs-Demo 文件夹中找到 MiaowLabs-Demo.hex 文件,将其烧录进核心板,可以发现核心板上的用户灯(蓝色 LED)已经亮起来了啦。

但是,这离我们的小目标——让 LED 闪烁起来还有一点小差距,不过已经很接近了。

我们回到 MDK-ARM 工程代码中,在左侧 Project 栏目的 Application/User 文件夹中找到 main.c 文件,双击,打开。接着,找到 int main(void) 主函数,在主循环 while(1) 中加入以下代码:

    HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED引脚(PB12)的电平
    HAL_Delay(500);//等待500ms,即0.5s
    HAL_GPIO_TogglePin(LED_GPIO_Port,LED_Pin);//翻转LED引脚(PB12)的电平
    HAL_Delay(500);//等待500ms,即0.5s

这段代码的意思,就是在主循环中,先翻转一次 PB12 引脚电平,然后保持 0.5s,再翻转一次 PB12 引脚电平,保持 0.5s,并且不断重复以上步骤,显示出来的效果就是 LED 一秒钟闪烁一次。

我们在加入代码的时候,注意一定要把代码加在 UER CODE BEGIN xx 和 USER CODE END xx 之间,因为这是 STM32CubeMX 预留给用户添加代码的地方。不然,在下次我们点击 GERATER CODE 重新生成代码后,STM32CubeMX 会抹去我们添加的代码。

到这里,我们就实现了控制 LED 闪烁的目标。

LED 原理图