第一节:用Cube学32之简单IO口操作(点灯及按键)

《用CubeMX学习STM32》


《用CubeMX学习STM32》
注释 点击上面蓝字进入完整专栏,这个系列所有文章都会整合到这个专栏


写在前面: 前天刚刚结束考研,这两天重新整理了一下自己的东西,继续完成自己一直想做的一些事情。先把自己用cubeMX学习STM32的过程分享一下,希望对自己的大学生活做一个总结,如果能帮到一些同学肯定是最好的。一开始简单地的东西会在博客上写,有必要的话会有对应的演示视频,看博客还是比较省流量一些 每一篇这个专栏的博客我都会按照CubeMX配置+IAR(或Keil)编程演示

在这里插入图片描述


1、伟大的工程从点灯开始

这里默认STM32CubeMX和Keil或者IAR等平台已经安装好

  • 一开始我会用IAR和Keil做演示,习惯了某一个平台之后,其实并没有什么差距,真正还是要懂单片机,不同的开发平台只是一个工具锤子,像单片机或者其他的硬件平台才是要雕琢的玉

1-1. 点亮板载LED灯

Step1 <CubeMX配置>

  • 打开CubeMX

在这里插入图片描述

在这里插入图片描述

  • 新建工程

在这里插入图片描述

点击之后会出现一个界面然你选择MCU型号
直接搜索你所使用的开发板或者核心板的芯片型号即可

这里我以STM32F407ZG型号的单片机为例进行演示
在这里插入图片描述

如下图所示

在这里插入图片描述

当我们双击那一行即可进入对各个引脚以及时钟等的配置界面了
  • 下面是各个界面配置

引脚配置界面--->时钟树配置界面--->工程管理界面  
(1)引脚配置(Pinout & Configuration)

在这里插入图片描述

我们要点亮的是板载LED灯,先看一下我所使用的核心板的原理图,找到板载LED灯对应的引脚, 以及其上拉还是下拉, 然后在CubeMX里面对其进行引脚配置

原理图中LED电路
在这里插入图片描述

在这里插入图片描述

可以看到, 若想要LED0和LED1灯点亮, 需要对应引脚为低电平, 那两个LED灯对应发光二极管才会导通
LED0对应PF10
LED1—>PF9
下面开始配置引脚

  • 首先配置时钟及调试方式

在这里插入图片描述

在这里插入图片描述

  • 接着配置LED对应的引脚

配置PF9输出模式 然后PF10也要这样设置, 这两个都要设为GPIO_Output

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • (2) 时钟树配置(Clock Configuration)

STM32F407最高时钟是1668MHZ, 配置时钟选择HSE(高速时钟), 然后在输入频率处填8(即代表8MHZ), 再把HCLK那个框写为168, Enter一下系统自动配置好, 具体的我在下图标注

在这里插入图片描述

  • (3)工程配置(Project Manager)

在这里面可以对我们的工程进行命名,以及选择用什么编译器写代码{ 如IAR,MDK(即keil), 还有最近兴起的STM32CubeIDE }, 代码设置等等

工程设置

在这里插入图片描述

代码设置

在这里插入图片描述
高级设置里面不需要改, 一般直接默认不管他。


Step2 <生成代码框架及代码编写>

点击 Generate Code 生成代码

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 在IAR里面先对开发环境进行设置 这个时候要插上开发板和调试器了

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 下面大概说一下工程目录

在这里插入图片描述
在这里插入图片描述

  • 接下来写代码

CubeMX里面我们把时钟、引脚这些东西都配置了, 所以代码自动就生成了, 只需要安心写主要部分代码即可, 这就是Cube高效的原因, 无须你再去做冗杂的工作, 从而把主要的精力放在关键代码上

在main.c 文件中 , 在int main(void) 函数里面写代码

在这里插入图片描述
注意: 代码一定要写在 /* USER CODE BEGIN / 和/ USER CODE END */ 之间, 否则你用Cube对配置修改之后再生成代码, 不在这个之间的代码会被擦除

HAL_GPIO_WritePin() 这个函数是HAL库很基本的一个操作IO的函数
我这句话是点亮LED1, 及给PF9这个引脚写入 RESET, RESET就是拉低这个引脚
根据前面的电路图, LED引脚低电平时, 发光二极管就导通了, LED就亮

先编译下载代码再说一下这个函数, 其他操作的函数使用方法类似

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述



补充 :

Wed Dec 25 10:41:16 CST 2019 补充

在这里插入图片描述
对每一个函数都可以右键, go to definition去看一下函数里面的具体代码
以MX_GPIO_Init(), 为例

在这里插入图片描述
在这里插入图片描述

  • IO口的模式有五种 可以边学边了解, 也可以看一下用户手册学习一下
    • 那五种模式可以在stm32f4xx_hal_gpio.h这个头文件找到,

下面再简单对LED做另一个好玩的操作, 让两个LED轮流闪烁, 起到流水灯的效果

在这里插入图片描述

HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);	// 翻转LED1的引脚状态
HAL_Delay(100);  	                            // 延时100ms
HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin);	// 翻转LED0的引脚状态
HAL_Delay(100);                                 // 延时100ms

单片机效果如下面动图所示
在这里插入图片描述
在这里插入图片描述

每个函数都可以自己Go To Definition 去看一下如果使用, 都有详细注释


keil编程

如果你用的Keil, 也是同样, CubeMX配置不变, 只是选择用MDK-ARM打开
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后对Flash Download选项卡设置
在这里插入图片描述
到这里就over了, 开始写代码
在这里插入图片描述
在这里插入图片描述

keil和IAR不同, 下载代码之后自己就运行了,keil的编译速度也比较IAR要慢很多
在这里插入图片描述
点灯操作就到这里, 下面分一篇小篇幅的博客再写按键

人生没有白走的路, 你走的每一步都算数 , 加油
Author : 李光辉
date : Wed Dec 25 13:09:55 CST 2019
blog ID: Kevin_8_Lee
blog site : https://blog.csdn.net/Kevin_8_Lee
posted @ 2019-12-24 23:04  K35inL  阅读(1010)  评论(0编辑  收藏  举报