你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【NUCLEO-L476RG开发】LPTIM在STOP1模式下输出PWM 精华  

[复制链接]
creep 提问时间:2015-10-31 13: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, 下载次数: 84)

评分

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

查看全部评分

2 收藏 5 评论26 发布时间:2015-10-31 13:05

举报

26个回答
creep 回答时间:2016-7-21 22:51:55
alisa123 发表于 2016-7-21 18:19
楼主橙子,你好,我用stm32L476 的TIM2产生输出PWM,可不知为什么输出始终是高电平,我用寄存器配置的 ,麻 ...

好的,如果你用库函数配置的可以输出PWM的话,可以和用寄存器配置的在debug模式下对比是否一致!
alisa123 回答时间:2016-7-21 18:19:46
楼主橙子,你好,我用stm32L476 的TIM2产生输出PWM,可不知为什么输出始终是高电平,我用寄存器配置的 ,麻烦请帮忙看看到底哪里配置错了,谢谢啊!代码请连接,谢谢!https://www.stmcu.org.cn/module/forum/thread-606936-1-1.html
creep 回答时间:2015-10-31 15:00:41
QianFan 发表于 2015-10-31 13:46
橙哥周末也不休息啊

大早上起看比赛,篮球比赛看完发现离下午的足球比赛还有段时间,就写个代码中场休息下!
qianfan 回答时间:2015-10-31 13:46:31
橙哥周末也不休息啊
limale 回答时间:2015-10-31 14:47:47
图文并茂,谢谢楼主分享。
小小笼包 回答时间:2015-10-31 16:06:27
Paderboy 回答时间:2015-10-31 17:21:16
多谢,橙哥分享,学习了。。
creep 回答时间:2015-10-31 18:16:32

小哥,这是什么表情
肽宰1 回答时间:2015-10-31 20:01:19
这是什么表情
你好我好大家好! 回答时间:2015-10-31 21:34:33
aabird 回答时间:2015-11-1 07:36:55
支持,支持,感谢分享
wu1169668869 回答时间:2015-11-1 13:06:57
写个代码休息下 3.gif
这一整年都在休息了。。。
creep 回答时间:2015-11-1 13:15:58
wu1169668869 发表于 2015-11-1 13:06
写个代码休息下
这一整年都在休息了。。。

哈哈,相对于一直躺床上看比赛来说写代码也算休息!
戏如人生 回答时间:2015-11-1 17:13:13
橙子大哥是你么???
creep 回答时间:2015-11-1 22:56:34
戏如人生 发表于 2015-11-1 17:13
橙子大哥是你么???

你好,小蚂蚁兄弟!
戏如人生 回答时间:2015-11-2 21:40:48
creep 发表于 2015-11-1 22:56
你好,小蚂蚁兄弟!

真的是你啊 橙子大哥!!
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版