zoukankan      html  css  js  c++  java
  • 第一节:用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
  • 相关阅读:
    64.Find the Duplicate Number(发现重复数字)
    63.Perfect Squares(完美平方数)
    62.Longest Valid Parentheses(最长的有效括号)
    61.Merge k Sorted Lists(合并k个排序链表)
    60.Median of Two Sorted Arrays(两个排序数组的中位数)
    59.Target Sum(目标和)
    58.Partition Equal Subset Sum(判断一个数组是否可以分成和相等的两个数组)
    57.Queue Reconstruction by Height(按身高重建对列)
    56.Decode String(解码字符串)
    55.Top K Frequent Elements(出现次数最多的k个元素)
  • 原文地址:https://www.cnblogs.com/kevin-nancy/p/12569384.html
Copyright © 2011-2022 走看看