STM32CubeMx教程---LED闪烁实验
目录
Project Manager---Code Generator
写作目的:
构建知识体系;提升写作能力;
开发环境:
硬件平台:正点原子探索者stm32f4开发板
软件平台:Keil+Stm32CubeMx
Stm32三种开发模式:
寄存器开发
与51单片机类似,直接操作寄存器。这个过程需要开发者对照手册,一行一行把代码敲出来。明显的优点是:执行效率高;明显的缺点是:寄存器数量相对51单片机多的太多,编程效率太低,对开发者要求太高。
一般不会选择基于寄存器开发,但这种开发模式背后要求的:对开发手册的阅读能力,对芯片架构的理解能力等,是开发者在往后的进阶学习中必须要掌握的。钱老说过:"手里没剑和有剑不用是两码事"。
标准库开发
ST官方将寄存器操作封装成标准库函数,通过提供的现成的接口函数,开发者不用去管寄存器到底是如何操作的,直接调用接口函数即可。相对于直接的寄存器开发,大大提升了开发效率,降低了开发难度。
这也是过去一个时代主流的开发模式,如博主最早接触的正点原子教程就是采用标准库函数开发的(当然现在也都有推出HAL库开发的教程,在这里也是非常感谢原子哥的入门教程)。近年来,ST官方对标准库的更新十分缓慢,而是主力推HAL库的开发方式。时代在进步,技术在发展。HAL库开发无疑在不久的将来会成为主流的开发模式,然后也必将被新的开发模式所取代。我们无需争论哪种方式更好,因为这对每个具体的人来说早已有答案。至于博主,那当然是全都要了,小孩子才做选择。
HAL库开发
那么重点来说下HAL库开发吧。全称就是Hardware Abstraction Layer(硬件抽象层
),库如其名,相当抽象。同标准库一样,HAL库的出现也是为了缩短程序的开发周期,而且HAL库显得更加有效。主要体现在以下几个方面:
它们都将实现功能需要配置的寄存器做了集成,不同的是,对于某些功能,标准库可能要用几句话,HAL库只需用一句话就够了。只针对于某些功能,这点博主自身没感觉到太大区别。
HAL库很好的解决了不同型号芯片间的移植问题,简单来说就是,在目前的开发模式中,用HAL库移植需要更改的地方最少。这点可真是太棒了,博主个人最讨厌移植,最最讨厌的就是在不同厂商的芯片间移植。简直是噩梦!强扭的瓜不甜啊,无法接受。
HAL库作为目前的主推开发模式,会一直更新,稳定性有足够的保障。人么,图个安稳。
HAL库+Stm32CubeMx结合开发,速度简直跟开挂一样,真是泰酷辣!
当然,缺点也是有的,比如编译后代码偏大,执行效率偏低。这些就看个人了,俗话说快与持久不可兼得,博主本人倾向于这种方式,毕竟开发速度快。
项目实战:
以一个实战项目来感受一下:利用STM32CubeMx+ Hal库新建一个工程,实现LED每隔1S翻转一次状态。
新建一个工程
File->New Project
选择单片机型号
1.搜索需要的单片机型号
2.点击选中相应的单片机,同时可以点击"星号"收藏,以便下次能够快速找到
3.点击"Start Project"创建工程
注意:如果第2步中没有点击选择相应的单片机,第3步中的"Start Project"无法点击哦
RCC时钟配置
System Core->RCC->High Speed Clock(HSE)->Crystal/Ceramic Resonator
时钟相关配置可以参考stm32的参考手册,后期也有计划记录下时钟相关的配置博客。这里先挖个坑,后面来填。
时钟树配置
时钟树的配置仔细核对与下图一致即可。
注意:鼠标需要先点击"Clock Configuration"切换到时钟树配置界面
为了核对方便
可以先将标号4中的内容改为168MHz,回车后软件会进行自动配置
然后对照下图从1->6的标号顺序逐个修改。
简单讲解:详细的讲解可以自己搜下哈~或者等博主以后来填坑。
标号1:正点原子stm32f4探索者开发板外接晶振为8MHz
标号2:选择HSE
标号3/5:PLLCLK 锁相环倍频
标号4:stm32f407zg系列最高支持168MHz
标号6:各种外设时钟频率(注意定时器的2倍频率啥的,芯片参考手册讲得比较详细)
GPIO配置
开发板上的LED是通过IO口输出高低电平来控制亮灭的,所以这里需要对IO口(开发板用的是PF9口)进行配置
1.切换到"Pinout&Configuration"界面
2.System Core->GPIO
3.PF9->GPIO_Output 将IO口配置成输出模式
1.点击选中PF9这个IO口进入下面的配置界面
2.GPIO mode:选择Output Push Pull 推挽输出
User Label可以自行命名,代码会生成相应的宏定义
eg.最终生成的宏定义代码如下图所示:
GPIO Pull-up/Pull-down:选择Pull-up 上拉
上拉,因为正点原子开发板上的LED原理图如下:
之前采用标准库函数,是通过直接修改代码进行配置的;而这里直接是图形化界面进行配置。
关于IO口的配置,这里做了些简单说明。后期也有计划记录下IO口相关的配置博客。这里先挖个坑,后面来填。
工程管理
Project Manager---Project
1.Project Manager
2.Project
3.Project Name 工程名字 最好不要用中文
4.Project Location 工程存储位置 最好不要用中文
5.Toolchain/IDE Min Version 工具链 用的是keil的话,按下图配置即可 IAR的话自己搜下吧
6.Mcu and Firmware Package 安装好Stm32CubeMx后,会自行填充好相关路径
Project Manager---Code Generator
1.Project Manager
2.Code Generator
3.Generated files 建议勾选这个选型 为每个外设创建单独的.h/.c文件,会使项目结构更加清晰
Generate peripheral initialization as a pair of.c/.h' files per peripheral
4.点击GENERATE CODE生成代码
Keil中代码编写
在Keil中编写代码,使LED灯1S翻转1次;
特别注意开发者自己代码的编写的位置
开源万岁:
gitlab: GitHub - JHZ97/CSDN_LED: CSDN教程的LED源码
参考文献:
结语:
一个人走得更快,一群人走得更远。