IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32 CubeMX 控制LED(详细步骤)---初步认识CubeMX -> 正文阅读

[嵌入式]STM32 CubeMX 控制LED(详细步骤)---初步认识CubeMX

实验工具

单片机:正点原子STM32F4探索者
软件:CubeMX、Keil5
参考文档:
《STM32F4xx中文参考手册》
《正点原子 STM32F4 开发指南V1.2–HAL 库版本 》
ST32 HAL库使用手册

一、STM32CubeMX 简介

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

二、LED的引脚信息

在进行设计之前,我们需要了解使用期间的具体引脚信息,这块板子上有3个LED,可控制的LED为LED0与LED1,电路原理图为下图,查阅单片机使用手册可知,两个LED分别与PF9,PF10相连,控制电平为高时灯灭,低时为亮。
在这里插入图片描述
在这里插入图片描述

三、CubeMX生成配置代码(HAL库)

1、CubeMX创建工程

新建工程可以有三种选项:
(1)选择MUC设计,只针对芯片不包含外围电路
(2)选择ST开发板设计,针对ST公司推出的一些开发板
(3)选择ST开发板例程进行设计
大部分时候我们使用的开发板都不是ST公司的,基本都是使用其他公司设计的开发板所以我们选择第一种方式,也是我们最常用的一种方式。
在这里插入图片描述

2、芯片选择

在这里我们可以选择我们将要使用的MCU的芯片型号,这里提供了很多筛选方式可以快速找到我们需要的芯片型号,本实验使用的是STM32F407ZGT6
在这里插入图片描述

3、硬件配置界面

界面展示出了STM407ZGTx系列的所有资源,接下来需要配置我们需要使用的引脚,这里对某一个功能进行整体配置,例如直接配置ADC,I2C什么的不需要逐个引脚去配置,可以在界面左边的资源列表进行选择。
在这里插入图片描述
我们只是简单的使用两个引脚做高低电平的输出,所以找到PF9与PF10进行设置
在这里插入图片描述
接下来是时钟配置,我们可以在这个界面设置接入到各个模块的时钟频率,STM32F4有5个时钟源
LSI、LSE、HSE、HSI、PLL。
STM32的时钟树系统比较复杂,具体可以参考STM32 F4的官方文档进行学习了解
在这里插入图片描述
图的左边部分就是芯片的时钟源,右边部分即为输出的时钟频率
实验使用最大频率168MHz
在这里插入图片描述
生成工程的名称与设置输出工程的软件类型
在这里插入图片描述
(1)在code设置中对项目的设置为只输出必要的文件,第一个选项生成的文件为完整的库很多文件用不到,我们使用这个软件只是需要截取配置部分的代码就可以了。
(2)生成文件勾选每个配置的代码文件和头文件单独生成,不然全部代码都会在main中很难看
在这里插入图片描述

四、代码分析与功能实现

生成代码的main函数分为几个部分
1、HAL_Init()为 HAL库的初始化
2、SystemClock_Config()为系统时钟的配置
3、MX_GPIO_Init() 为对配置的GPIO口的初始化
4、单片机的 while
在这里插入图片描述
GPIO配置代码,生成的这部分代码使能了GPIO口对应的时钟,设置了GPIO的初始状态为低,最后对GPIO的参数进行设置并进行初始化。
在这里插入图片描述
最后我们来编写LED流水灯的代码并烧写到板子上进行验证即可完成本次实验

HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_RESET); /*Low*/
HAL_GPIO_WritePin(LED0_GPIO_Port,LED1_Pin,GPIO_PIN_SET); /*HIGH*/
HAL_Delay(500);
HAL_GPIO_WritePin(LED0_GPIO_Port,LED0_Pin,GPIO_PIN_SET);/*HIGH*/
HAL_GPIO_WritePin(LED0_GPIO_Port,LED1_Pin,GPIO_PIN_RESET); /*Low*/
HAL_Delay(500);

五、实验改进

1、时钟配置并开启中断

为了观察CubeMX修改配置后的变化和学习CubeMX的中断配置,增加一部分实验,使用基本定时器TIM6通过中断去控制LED灯的亮灭。
在CubeMX中打开TIM6设置,
参数含义为:
Prescaler 分频系数
Counter Mode 计数模式(分为向上和向下)
Count Period 计数周期
auto-reload preload 自动重装载
TRGO Event Selection 触发事件
NVIC Settings中勾选中断使能
定时器溢出时间的计算公式如下
在这里插入图片描述
在这里插入图片描述
TIM6不知道挂在APB1还是APB2,这里我们把两个时钟都设置为84MHz,我们想实现500ms的延时则分频系数可以设置为psc=839,counter=49999。这里的两个参数为16bit Max=65535在这里插入图片描述

2、代码分析与实现

初始化部分仅多了一个TIM6的初始化函数
在这里插入图片描述
因为生成代码时勾选了重新生成项目时不删除用户编写的代码,所以即使重新生成了文件上一部分的控制代码依然还在注意代码要写在注释的begin与end之间,写在其他地方代码还是会被删除
在这里插入图片描述
使用这个函数开启时钟才能正常调用中断

HAL_TIM_Base_Start_IT(&htim6); //添加到时钟初始化函数之后

在这里插入图片描述
这个c文件,找到TIM6的中断,在其中添加翻转PA0的代码即可:

  HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
  HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);

在这里插入图片描述

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:44:29  更:2022-09-21 00:47:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:31:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码