示例应用程序 STM32L053 Discovery探索板中预装了演示程序,用户可以通过触摸传感器在四种操作模式之间进行选择,并且在电子纸显示屏上将显示所消耗的电流。这些模式包括:运行模式(Run)、睡眠模式(Sleep)、低功耗睡眠模式(Low-power Sleep)和停止模式(Stop)。为了进一步展示STM32L053器件的低功耗特性,同时避免ST硬件抽象库的混乱,重新编写了一个新的应用程序,它使用较少的外设和电路板功能。这个新的示例应用程序包含演示应用程序中没有的两种低功耗模式(低功耗运行模式(Low-power Run)和待机模式(Standby)),并以大约每秒一次的速率进行连续测量。
终端仿真器为应用程序提供用户界面。图6是输出的屏幕快照。电流测量显示在窗口顶部,操作模式列在窗口底部。箭头指向当前模式,选择不同模式的说明显示在最下面。任何终端仿真器程序(例如PuTTY、Tera Term、CoolTerm等)都应该能正常工作,只要波特率设置为4800并且在每个换行符(LF)中都有一个隐含的回车符(CR)。如果STM32L053探索板背后的标签标记为“MB1143 B-01”或更高版本,则需要连接焊接桥SB2和SB3,使得USART可以与虚拟COM端口连接(探索板用户手册的第4.14节)。
图6:电流测量示例应用的用户界面
该应用程序的核心是一个有限状态机(FSM),每个状态对应六种操作模式中的一个。这些状态的进入动作是配置系统时钟、电源控制寄存器和M0 +内核寄存器,使得器件进入所需操作模式的函数。这些函数分别命名为enter_ <Mode>(),其中<Mode>由可以是下面中的一个:Run、LPRun、Sleep、LPSleep、Stop或Standby。有关这些功函数及其相应低功耗模式的更多信息,请参见STM32L0系列的低功耗模式页面。
除了FSM,还有一个处理当前测量功能的后台线程。每当MFX置位IRQ_OUT线时,表示当前的测量已经准备好(MCU上的PC13用于触发外部中断),它就会执行。该线程使用上一节中讨论的过程来获取当前的测量结果、显示结果以及请求一次新的测量。为了验证由IDD测量模块检测的电流测量的正确性,使用数字万用表进行比较。使用两种方法,每种模式进行了三次测量,并在表1中报告平均值。为了使用万用表进行稳定的测量,MFX未被初始化。这可以阻止后台线程运行,并使得MCU每秒暂时进入运行模式。结果显示,IDD模块并不是测量运行模式、睡眠模式和低功耗睡眠模式最准确的方法,但考虑到电路的简单性,结果仍然很接近。 表1:各种工作模式下MCU消耗电流的测量结果比较 模式 | IDD模块 | 万用表读数 | Run | 3.399 mA | 3.451 mA | LPRun | 44.052 µA | 44.063 µA | Sleep | 1.331 mA | 1.474 mA | LPSleep | 14.179 µA | 15.233 µA | Stop | 451 nA | 443 nA | Standby | 297 nA | 288 nA |
完整的示例代码 因为这是一个相对简单的应用程序,而且没有使用ST的硬件抽象库HAL,所有的代码都放在main.c文件中(在下面提供)。使用Keil的μVision5 IDE编写,它非常合理地进行注释和组织。对于那些刚接触Keil开发工具的新手,从头开始创建这个应用程序的过程如下。 1. 打开μVision5,然后转到Project > Manage > Pack Installer... 2. 在左侧窗口中选择器件(STMicroelectronics > STM32L0 Series > STM32L053 > STM32L053C8 > STM32L053C8Tx) 3. 在右侧窗口中,单击“Keil :: STM32L0xx_DFP”和“ARM :: CMSIS”旁边的Install按钮 4. 关闭Pack Installer窗口并转到Project> NewμVisionProject ... 5. 导航到将包含项目的文件夹,输入项目的名称(例如STM32L035-DISCO_current_meas),然后单击“Save” 6. 选择器件(在左下角的框中,导航到STMicroelectronics> STM32L0 Series > STM32L053> STM32L053C8> STM32L053C8Tx),然后单击OK 7. 展开“CMSIS”软件组件并选中“Core”对话框 8. 展开“设备”软件组件并从“启动”中勾选对话框,然后单击确定 9. 在项目菜单中,展开“目标1”,右键单击“源组1”,并选择添加现有文件到组“源组1”... 10. 浏览到main.c存储的位置,选择它,单击“添加”,然后单击“关闭” 11. 转到Project> Target for Target'Target 1'...(注意:您可能必须打开和关闭Group'Source Group 1'的选项...才能显示此选项) 12. 在调试选项卡下,从右上角的下拉菜单中选择ST-Link调试器 13. 在该下拉菜单旁边,单击设置,转到Flash下载选项卡,单击编程算法(STM32L0 64KB Flash)的唯一选项,然后单击确定 14. 再次单击确定,然后转到项目>构建目标 15. 最后,进入Flash>下载(一旦下载完成,可能不得不按下重置按钮来使用应用程序)
如果一切顺利,电路板应该被编程并准备好使用。只需打开终端仿真器,将波特率设置为4800,然后打开正确的COM端口。请注意,某些终端仿真程序在收到换行时不会自动打印回车,因此如有必要,必须更改设置。 示例代码:
main.c
(42.85 KB, 下载次数: 4)
结论 对于那些希望评估STM32L053系列微控制器的低功耗功能的人来说,STM32L053探索板是一个很好的工具。其内置的电流测量模块采用了与多功能控制器接口的分流电阻网络,以便从MCU中简化当前的测量过程。使用这个模块的最困难的部分是执行初始化过程,因为没有关于这个主题的文档。因此,研究了各种示例代码,并创建了一个充分的控制器寄存器映射表,以便在接入IDD测量模块时用作参考。同时,使用寄存器直接访问的方式重新编写了一个更简洁的示例应用程序,来演示如何使用模块来测量和报告STM32L053C8的每个低功耗模式中消耗的电流。通过这种方式,可以复制单个函数用于其他程序,而无需导入任何额外的库。 |