搜索
查看: 15795|回复: 26

[STM32L476] 【NUCLEO-L476RG开发】LPTIM在STOP1模式下输出PWM

  [复制链接]

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
发表于 2015-10-31 13:05:05 | 显示全部楼层 |阅读模式
本帖最后由 creep 于 2015-11-9 22:26 编辑

   在上次的点灯测试中(【NUCLEO-L476RG开发】按惯例先点个灯)我们看到L476为了实现低功耗设计了很多和其他系列不同的外设和时钟配置,比如L4系列中除了我们常用的定时器,还有2个低功耗的定时器LPTIM1和LPTIM2,这2个定时器能够使用各种各样的时钟来驱动,这样能使功耗尽可能的降低,下面测试先使用内部的LSI在STOP1模式下驱动LPTIM1输出PWM。
1 LSI驱动LPTIM输出PWM
LPTIM1是个16bit的向上计数的定时器,它不但能在休眠模式下工作而且还能把MCU从低功耗模式下唤醒,其主要特性如下:
QQ拼音截图未命名.png
使用内部的LSI驱动LPTIM1时要先选择的时钟为LSI,然后配置LPTIM的时钟为LPTIM_CLOCKSOURCE_APBCLOCK_LPOSC(APB/HSI/LSI/LSE ),如果是使用LPTIM1的external input1 输入时钟源就选择 LPTIM_CLOCKSOURCE_ULPTIM。然后配置软件触发及输出占空比极性,详细配置如下: QQ拼音截图未命名.png

在下面的函数中配置了输出频率和占空比,设置Autoreload 为99,Pulse value为49. 那么输出的PWM频率应该是:FrequencyOutput = LSI  Clock Frequency / (Autoreload + 1) = 32768 / 100 = 327.680 Hz。占空比应该是:DutyCycle = 1 - ((PulseValue + 1)/ (Autoreload + 1)) = 50%,这里我们假设了内部LSI为32.768KHZ.
  1. #define PeriodValue             (uint32_t) (100 -1)
  2. #define PulseValue              (uint32_t) (50 -1)
  3. HAL_LPTIM_PWM_Start(&LptimHandle, PeriodValue, PulseValue);
复制代码
然后设置LPTIM1_OUT输出引脚PB2为复用模式:
QQ拼音截图未命名.png
在main函数中初始化后外设后是MCU进入STOP1模式:
  1. LPTIM1_PWM_Init();
  2.         HAL_PWREx_EnterSTOP1Mode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
  3.         while(1)
  4.         {               
  5.                 LED(sta);
  6.                 sta = !sta;
  7.                 HAL_Delay(10);
  8.         }
复制代码

编译下载后,使用逻辑分析仪看下PB2引脚的输出波形如下;
QQ拼音截图未命名.png
2 LSI 频率计算
从上面的波形中可以看到实际输出的PWM频率并不是我们计算的327.6HZ而是322.6HZ,这主要是由内部LSI不准确导致的,那么下面就测试下内部LSI的频率是多少。
1)使用MCO输出LSI测量
如果有相应的仪器辅助测量,比较简单的方法是使用MCO输出LSI直接测量,MCO输出的引脚对用PA8,经过下面的简单设置我们把LSI从PA8输出:
  1. HAL_RCC_MCOConfig(RCC_MCO1,RCC_MCO1SOURCE_LSI,RCC_MCODIV_1);                //PA8
复制代码
输出的波形如下,可以看到LSI的时钟频率为32.26KHZ,正好和我们上面计算的一样。
QQ拼音截图未命名.png
2)使用TIM测量LSI
在很多STM32系列中都可以使用TIM直接测量内部和外部时钟,这主要是使用了定时器的输入捕获功能,将内部时钟或者外部时钟通过内部或者外部和定时器的输入捕获输入引脚相连接,进而测试时钟的频率,这样可以直接得到时钟频率的值,然后可以使用这个值进行时钟校准,L4系列可以使用TIM15/TIM16/TIM17进行测量。
QQ拼音截图未命名.png
具体的配置如下,注意要将定时器TIM16的输入通道1和LSI的时钟输出相连接,然后计算2次上升沿之间的时间长度进而计算出LSI.
QQ拼音截图未命名.png
在中断函数中根据2次上升沿的时间计算LSI.
QQ拼音截图未命名.png
我们将计算的LSI通过串口输出如下:可以看到除了每次计算的LSI有细微差别之外,LSI的值和我们上面直接输出的并不一样,这主要是由于我们使用MSI作为系统时钟,MSI本身作为一个内部时钟就缺乏很高的精度,芯片出厂都会设置一个校准值,在每次系统复位时这个校准值加载到MSI中进行校准,但是实际上这个值并不是每个芯片都一样,所以说导致MSI不是很准确,那么我们依靠MSI作为系统和外设时钟计算出来的也不是很准确,但是对比理论值32768HZ更接近实际的LSI的值,如果我们使用LSI作为RTC时钟时用这个方法计算的时间应该比理论的32768HZ更准确。
至于MSI的校准值,我们可以通过同样的方法依靠LSE的准确性来得到一个较准确的值。
QQ拼音截图未命名.png
3 LSE 驱动LPTIM输出PWM
为了作为对比,我们使用STM32L476-NUCLEO上面的外部的LSE驱动LPTM输出PWM。
和使用LSI大部分配置一样,但是要注意LSE在后备区域,打开是要先进行PWR的访问权限设置:
  1. __HAL_RCC_PWR_CLK_ENABLE();
  2.         HAL_PWR_EnableBkUpAccess();
  3.         __HAL_RCC_LSE_CONFIG(RCC_LSE_ON);   
复制代码
在配置LPTIM时选择LSE时钟,
QQ拼音截图未命名.png
编译下载后看下输入的PWM如下,可以看到此时的输出PWM频率为327.6HZ,和理论值一样。

QQ拼音截图未命名.png
上面只是简单的测试了LPTIM在STOP下的PWM功能,LPTIM还有其他很有用的特性。

测试代码如下,注意程序下载后会自动进入STOP模式,要重新下载程序需要先复位否则可能连接不上STLINK.
LPTIM_PWM_LSI.rar (959.83 KB, 下载次数: 87)

评分

参与人数 1ST金币 +30 收起 理由
沐紫 + 30

查看全部评分

回复

使用道具 举报

该用户从未签到

77

主题

2004

帖子

5

蝴蝶豆

论坛元老

最后登录
2021-1-6
发表于 2015-10-31 13:46:31 | 显示全部楼层
橙哥周末也不休息啊
回复 支持 反对

使用道具 举报

该用户从未签到

3

主题

1454

帖子

0

蝴蝶豆

论坛元老

最后登录
2021-8-19
发表于 2015-10-31 14:47:47 | 显示全部楼层
图文并茂,谢谢楼主分享。
回复 支持 反对

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
 楼主| 发表于 2015-10-31 15:00:41 | 显示全部楼层
QianFan 发表于 2015-10-31 13:46
橙哥周末也不休息啊

大早上起看比赛,篮球比赛看完发现离下午的足球比赛还有段时间,就写个代码中场休息下!
回复 支持 反对

使用道具 举报

该用户从未签到

2

主题

116

帖子

0

蝴蝶豆

初级会员

最后登录
2015-11-11
发表于 2015-10-31 16:06:27 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

47

主题

3456

帖子

30

蝴蝶豆

版主

最后登录
2022-12-25
发表于 2015-10-31 17:21:16 | 显示全部楼层
多谢,橙哥分享,学习了。。
回复 支持 反对

使用道具 举报

该用户从未签到

60

主题

2111

帖子

31

蝴蝶豆

版主

最后登录
2023-6-21
 楼主| 发表于 2015-10-31 18:16:32 | 显示全部楼层

小哥,这是什么表情
回复 支持 反对

使用道具 举报

该用户从未签到

18

主题

686

帖子

0

蝴蝶豆

金牌会员

最后登录
2017-4-9
发表于 2015-10-31 20:01:19 | 显示全部楼层
这是什么表情
回复 支持 反对

使用道具 举报

该用户从未签到

57

主题

1216

帖子

0

蝴蝶豆

金牌会员

最后登录
2023-6-4
发表于 2015-10-31 21:34:33 | 显示全部楼层
回复

使用道具 举报

该用户从未签到

1

主题

234

帖子

0

蝴蝶豆

中级会员

最后登录
2019-1-4
发表于 2015-11-1 07:36:55 | 显示全部楼层
支持,支持,感谢分享
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|论坛-意法半导体STM32/STM8技术社区

GMT+8, 2024-4-29 16:19 , Processed in 1.193385 second(s), 43 queries .

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表