前几天折腾nucleo板子,准备修改一个项目,但是修改了半天也没有正常运行,郁闷,后来又重看了一遍《UM1779_rev2pub_STM32CubeF0_GettingStarted.pdf》才搞明白。一开始自己没有看全,以为驱动库的用法和以前(2年前,呵呵)差不多。没想到变化那么大,而且比以前好用多了,功能也更加的丰富。现在我就把文档中“如何开始自己的项目”那一段大概翻译一下,并不是逐字逐句地翻译,供大家参考,翻译水平很渣,希望不会误导大家。有什么不好的地方也请指出,谢谢。 在使用STM32CubeMX时会下载一个驱动包,那个包里有很多相应的例程,对自己的项目开始有很大的帮助,但是直接修改例程尤其是添加新的外设会出现外设不能运行的情况,这是因为新加外设的初始化程序没有在main.c中,而是在stm32f0xxx_hal_msp.c文件中。下面将完整的说一说如何开始自己的项目。第一步,创建你的工程:工程可以直接使用包里提供的模板(Templates)工程,也可以从提供的例程中创建。模板工程初始化了如下特性: --包含最小化的HAL、CMSIS、BSP驱动库 --包含所有驱动库的头文件 --define 了支持的STM32F0设备,因此可以相应的配置CMSIS和HAL驱动 --提供了用户直接可以使用的功能,如下: HAL初始化了ARM内核SysTick默认时基单元 延时函数HAL_Delay()需要使用的SysTick中断 系统时钟使用HSI配置的最小频率 注意:当你复制一个已存在的工程到别的地方时,要确保更新了头文件路径 第二步,添加所需的中间层模块到你的工程中: 需添加相应中间层的哪些文件,需要参考各个中间层提供的文档。你也可以从applications文件夹中参考需要添加哪些文件。 第三步,配置固件库: HAL和中间层的使用需要修改一系列的宏。在模板工程中,这些宏一般在xxx_conf_template.h中,按需要更改。 第四步,开始HAL库: 在进入main函数之后,应用程序会调用HAL_Init()API来初始化HAL库,这个函数完成以下任务: a) 配置FLASH的预取值和SysTick中断优先级(用户可通过stm32f0xx_hal_conf.h中的宏来修改) b) 配置SysTick产生1ms周期的中断,它的时钟使用的HSI(在这个阶段,时钟还没有配置,因此系统使用内部的8MHz HSI) c) 调用定义在stm32f0xx_hal_msp.c中的HAL_MspInit()回调函数,初始化底层的硬件 第五步,配置系统始终: 系统时钟的配置使用下面两个API : a) HAL_RCC_OscConfig():其配置系统使用内部和/或外部晶振,也包括PLL源。用户能够配置一个或者全部晶振。如果不需要PLL可以跳过其配置。 b) HAL_RCC_ClockConfig():配置系统时钟源,FLASH内存延迟和AHB与APB的分频。 第六步,外设初始化: a) 开始编写外设的HAL_PPP_MspInit函数,步骤如下: --使能外设时钟 --配置外设GPIO --配置DMA通道和使能DMA中断(如果需要) --使能外设中断(如果需要) b) 编辑stm32xxx_it.c文件,以调用需要的中断句柄 c) 编写进程完成的回调函数,如果需要使用外设的中断或者DMA时 d) 在main.c 文件中,初始化外设句柄结构体,然后调用初始化函数 第七步,编写自己的应用进程 注意:若需在中断中使用HAL_Delay()函数,一定要确保SysTick中断的优先级最高 |
Hi,楼主,不好意思啊,“STM32CubeMX时会下载一个驱动包”这个我下载的只有一个STM32CubeMX软件,没有你的说的提供的例程库,能把你下载的例程库上传吗或者给个链接,谢谢了 |
这是以后的方向,符合软件工程学。
|
32个赞 |
这个要支持,非常不错啊 |
不错,谢谢风向 |
翻译非常不错啊,这个要支持。 |
感谢~~~~~~~~~~~~~~ |
这个要支持 |
好资料,学习了 |
谢谢了~~~~~~~~~~~ |
总结的很好,支持一下。正要学习一下 |
总结的很好,支持一下。正要学习一下 |
正需要! |
强烈支持 |