STM32CubeMx教程---LED闪烁实验

目录

写作目的:

开发环境:

Stm32三种开发模式:

寄存器开发

标准库开发

HAL库开发

项目实战:

新建一个工程

选择单片机型号

RCC时钟配置

时钟树配置

GPIO配置

工程管理

Project Manager---Project

Project Manager---Code Generator

Keil中代码编写

开源万岁:

参考文献:

结语:


写作目的:

        构建知识体系;提升写作能力;

开发环境:

        硬件平台:正点原子探索者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源码

参考文献:

STM32cubemx教程及STM32入门(一)

STM32的几种开发方式,你都知道吗?

时隔10年,STM32标准外设库再次升级

结语:

一个人走得更快,一群人走得更远。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HAL库是STM32CubeMX中的一个软件库,全称为Hardware Abstraction Layer,即硬件抽象层。它提供了一组简化的API函数,用于控制STM32芯片上的所有硬件资源。使用HAL库可以大大简化STM32芯片的开发流程。 下面是STM32CubeMX中使用HAL库的教程: 1. 打开STM32CubeMX软件,创建一个新工程。 2. 在“Project Manager”中选择你的芯片类型和芯片型号。 3. 在“Pinout & Configuration”选项卡中选择你需要使用的芯片引脚,并将它们分配给相应的功能。 4. 在“Clock Configuration”选项卡中配置你的时钟。 5. 在“Configuration”选项卡中选择你需要使用的外设,并进行相应的配置。 6. 确认所有配置后,点击“Generate Code”按钮生成代码。 7. 打开生成的工程文件,在“Core”文件夹中找到“main.c”文件。 8. 在“main.c”文件中找到“HAL_Init()”函数,并在它下面添加你的代码。 例如,如果你想在LED灯上闪烁,可以使用以下代码: ```c #include "main.h" #include "stm32f4xx_hal.h" int main(void) { HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize all configured peripherals */ MX_GPIO_Init(); /* Infinite loop */ while (1) { HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); HAL_Delay(1000); } } ``` 在这里,我们使用了HAL库中的函数“HAL_GPIO_TogglePin()”,它可以用来控制GPIO引脚的输出状态。我们还使用了“HAL_Delay()”函数来实现延时。 9. 将代码烧录到STM32芯片上,然后运行它,你会看到LED灯在周期性地闪烁。 这就是使用HAL库在STM32CubeMX中进行开发的基本步骤。当然,这只是一个简单的例子,如果你需要使用更复杂的外设,需要进行更多的配置和编程。但是使用HAL库可以让这一切变得更加简单和高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值