HAL和LL库
HAL是ST为了实现代码在ST家族的MCU上的移植性,推出的一个库,称为硬件抽象层,很明显,这样做将会牺牲存储资源,所以项目最后的代码比较冗余,且运行效率大大降低,运行速度受制于flash的速度,所以很多人设计的时候出现了各种各样的问题。而LL库更精简,他更接近底层,直接操作寄存器来实现,二者在资源消耗上别人已做过比较,https://blog.csdn.net/wping1234/article/details/80197287。个人更看重代码的效率以及精简,所以选择使用LL库。
利用LL配置TIM1输出PWM
- 首先进行时钟配置,手中STM32F1的板子外部晶振为8MHz,将系统的主频配置为72MHz,得益于STM32CubeMX的可视化配置设计,时钟的配置变得轻松起来
- 使用STM32CubeMX配置定时器TIM1,本次设计PWM的周期为1s,将PWM输出控制LED灯,可以看出明显的效果,因此将TIM1的时钟进行7200的分频,对其计数10000次将会得到1s的定时时间,配置如下:
为了可以调节频率,保证调整后的频率可以维持1个周期,开启update中断。也可不开启,可输出PWM。
选择LL库生成代码:
其他的SWD的配置省略,配置好后使用STM32CubeMX生成代码。
软件对LL库的支持不及HAL,生成后需要手动修改和添加少量代码。
这两个地方是我手动修改的,自动生成的这一部分存在错误,请注意。
要开启定时器,则要使用LL库的库函数,关于定时器的控制的库函数在以下这个文件,
我们可以打开这个文件,然后打开他的头文件查看里面可用的函数,使用MDK查看不太方便,可以使用notepad++查看,利用notepad++的函数列表很方便,关于TIM的定时器,打开它需要寻找ENABLE这个关键字: