前言:
ST官方没有给STM32L0系列配标准库,但是有HAL库。为了移植方便,也是为了顺应潮流吧,使用HAL库开撸。个人水平有限,如有错误,还请指正mr.li.ming@qq.com。
提示:1.使用的外部16M晶振,最大速度32MHz.
2.使用的CubeMX版本V4.20.1,使用L0的驱动库版本1.9.0.
第一步:使用CubeMX生成初始化代码
先打开CubeMX选择STM32L053C8T6
为了测试方便,使用内部晶振。点击Clock Configuration如下图配置
然后拐回来我们设置一下TIM2, 如图选择内部时钟
同时我们做个输出检测脚,因为我的电路板上PC13接一个蓝色LED,所以做个下图的配置。
下面配置定时器
点击OK, Internal Clock Division(CKD) 这里选No Division(选哪个都无所谓)其实仔细看过技术手册后发现这项配置跟定时器是没关系的,这句话是设置定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例的(与输入捕获相关),0表示滤波器的频率和定时器的频率是一样的。
然后配置定时器的更新中断
把中断使能复选框选中,优先级按需选择,我选择1点击OK
生成工程的配置
选择打开工程进入下一步操作
第二步:Keil中需要的操作
打开main.c在这个位置添加启动TIM2的代码,强调一下位置是 /* USER CODE BEGIN 2 */
/* USER CODE END 2 */ 这两行注释中间,CubeMX再次生成代码的时候不会删除用户代码。
这里我们找到了HAL库里中断处理回调函数的弱定义,去掉前面的__weak,复制到main.c
加上蓝色LED状态反转代码。
编译0 Error(s),0 Warning(s)
下载,重启电路板,现象是蓝灯亮了测一下蓝灯的控制脚信号,即PC13
频率484Hz的脉冲信号,理论上我们32 000 000经过32分频是1000 000,周期为1000,应该是每1ms翻转一次,由于误差,所以大概1.040ms翻转一次。基本符合要求,如果需要更精确可以适当调整。
希望对各位看官有所帮助,并能触类旁通。 使用HAL库的势在必行,多多进行尝试。
完整的pdf格式文档51黑下载地址:
STM32L053用HAL库TIM.pdf
(2.08 MB, 下载次数: 61)
|