前几天折腾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中断的优先级最高
|