STM32WL开发之易智联LORA评估板上定时器TIMER的配置与应用

前言:在前一篇《STM32WL开发之易智联LORA评估板上按键KEY的配置与应用》中已经基于易智联的LoRa评估板LM401-Pro-Kit介绍了在其Demo例程上如何实现按键KEY控制LED闪烁的功能,本文将介绍如何基于LoRa评估板和Demo例程实现定时器的配置与应用。

基础知识:STM32的外设与总线

       STM32是意法半导体公司(ST)设计推出的一款以ARM Cortex-M 为内核的32位单片机。所以可以看出STM32的内核是ARM公司的,但ARM公司只设计内核不生产芯片,它主要做的事情就是将有关内核的技术授权给各半导体厂商生产使用例如ST、TI,大多数厂商都是以这个内核为基础去设计自己芯片上外设如SRAM、ROM、FLASH、USART、GPIO等,然后把这些外设集成到一个硅片上,就组成了我们现在所使用的芯片。所以STM32 芯片内部也大致的分为两部分:内核+片上外设。

        芯片内部架构如下图所示:

         说到这里我们知道芯片内部内核和外设分别由两个公司设计的,那他们要做到协同高效的工作,就必须有沟通的桥梁,这个桥梁就是总线。一般的计算机有五大组成部分运算器、控制器、存储器、输入设备、输出设备,它们之间的通信靠的就是总线。单片机就是一个小型的计算机,所以他内部的连接通信也是靠总线。

       单片机的外设一般分为内部外设和外部外设,内部外设就是集成到芯片内部的,外部外设是指单片机扩展的功能。单片机内部的外设一般包括:串口控制模块,SPI模块,I2C模块,A/D模块,PWM模块,CAN模块,EEPROM,比较器模块等等,它们都集成在单片机内部,有相对应的内部控制寄存器,可通过单片机指令直接控制。外设指的是单片机外部的外围功能模块,比如键盘控制芯片,液晶,A/D转换芯片等等。外设可通过单片机的I/O,SPI,I2C等总线控制。

       STM32芯片内部有多达11条总线,其中与外设相关的主要是AHB总线和APB总线。AHB总线是一种高性能系统总线,主要用于高性能模块(如CPU、DMA和DSP等)之间的连接。APB是外设总线,主要用于低带宽的周边外设之间的连接,又分为APB1和APB2总线。APB1上面连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3等,APB2上面连接的是高速外设包括 UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA~PE)、第二功能 IO 口等。APB总线最终连接到AHB总线上。

       STM32外设的操作步骤

       STM32的外设都在AHB、APB1、APB2总线上,其操作步骤大致如下:

        1、必须对设备进行使能。

        2、设置外设的时钟

        3、操作外设

                 具体操作包括:关联GPIO与外设、配置GPIO与外设、DMA或中断的配置与使能等。

Timer定时器

       单片机中的Timer很多时候完整的表达是 定时/计数器 ,某种意义上来说Timer最基本的功能就仅仅只是计数而已,定时这个功能也只是在计数这个基础功能之上实现的。

        定时器基本功能的流程如下:

      

时钟系统

       STM32的时钟系统是由振荡器(信号源)、定时唤醒器、分频器等组成的电路。常用的信号源有晶体振荡器和RC振荡器。就像人需要有心跳和脉搏一样,时钟是嵌入式系统的脉搏,处理器内核在时钟驱动下完成指令执行,状态变换等动作;外设部件在时钟的驱动下完成各种工作,比如串口数据的发送、A/D转换、定时器计数等。

        STM32本身非常复杂,外设非常多,对于同一个电路,时钟越快功耗越大,同时抗电磁干扰能力也会越弱,而且也并不是所有的外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十k的时钟即可,所以对于较复杂的MCU一般采用多时钟源的方法来解决这个问题。

        STM32WL的时钟系统框图如下:

        如上图所示,STM32WL中,有6重要的时钟源,为HSI、HSE、LSI、LSE、MSI、PLL,注意STM32WL相比STM32Fx等系列芯片,在PLL这里精简去了PLLISAI1和PLLSAI2。

        从时钟频率来分可以分为高速时钟源和低速时钟源;从时钟频率来分可以分为高速时钟源和低速时钟源;从来源可分为外部时钟源和内部时钟源,外部时钟源就是从外部通过接晶振的方式获取时钟源。

        LSI 是低速内部时钟,RC 振荡器,频率为 32kHz 左右。供独立看门狗、 RTC 和 LCD使用。

        LSE 是低速外部时钟,接频率为 32.768kHz 的石英晶体。这个主要是 RTC 的时钟源。

        HSE 是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz-48MHz。我们的开发板接的是 8MHz 的晶振。 HSE 也可以直接做为系统时钟或者 PLL 输入。

        HSI 是高速内部时钟,RC 振荡器, 频率为 16MHz。可以直接作为系统时钟或者用作PLL 输入。

        MSI 时钟信号由内部 RC 振荡器产生。其频率范围可通过时钟控制寄存器(RCC_CR)中的 MSIRANGE[3:0]位进行调整。

        PLL 为锁相环倍频输出。STM32WL只有一个PLL时钟源, PLL可由 HSE、 HIS 或者 MSI 提供时钟信号,并具有三个不同的输出时钟:

        1) 输出PLLRCLK,用于生成高速的系统时钟(SYSCLK,最高48MHz);

        2)输出PLLQCLK,可为SPI、RNG等提供时钟源;

        3)输出PLLPCLK,可为ADC等提供时钟源。

        PLL时钟图如下:

        从图中可以看出,主 PLL 的时钟源要先经过一个分频系数为 M 的分频器,然后经过倍频系数为 N 的倍频器,出来之后还需要经过分频系数为 R(输出 PLLR 时钟)、或者 P(输出 PLLP时钟)、或者 Q(输出 PLLQ 时钟),最后才生成最终的主 PLL 时钟。

定时器时钟源

        定时器要实现计数必须有个时钟源,基本定时器时钟只能来自内部时钟,高级控制定时器和通用定时器还可以选择外部时钟源或者直接来自其他定时器等待模式。我们可以通过 RCC 专用时钟配置寄存器(RCC_DCKCFGR)的 TIMPRE位设置所有定时器的时钟频率,我们一般设置该位为默认值 0,这时的最大定时器时钟为 48MHz,即基本定时器的内部时钟(CK_INT)频率为 48MHz。定时器时钟源一般来说都会采用内部时钟,高级定时器挂载在APB1总线,基本和通用定时器都是挂载在APB2总线下的,不过最后经过一系列倍频什么的都是48Mhz,计数器的最终的频率还需要经过PSC预分频计算才能得到。

        如上面的通用定时器框图,经过时钟源后就进入了PSC预分频器,就是CK_CNT,CK_CNT用来驱动计数器计数。 PSC 是16 位的预分频器,可以对定时器时钟进行 1~65536 之间的任何一个数进行分频,具体计算方式为:CK_CNT=48Mhz/(PSC+1)

        再之后就进入计数器CNT,CNT也是16位的计数器,最大计数值为65535,当计数值达到自动重装载寄存器的时候就产生更新事件,并重新进行计数。当然自动重装载寄存器的值也是我们设置的,自动重装载寄存器ARR也是一个16位的寄存器,当计数值达到这个值的时候,就会产生更新事件,比如中断事件,触发其他外设的事件,或者复位计数器的事件。所以最终定时时间为:(PSC+1)x(ARR+1)/ 48000000 秒

计数器

        基本定时器计数过程主要涉及到三个寄存器内容,分别是计数器寄存器(TIMx_CNT)、预分频器寄存器(TIMx_PSC)、自动重载寄存器(TIMx_ARR),这三个寄存器都是 16 位有效数字,即可设置值为 0至 65535。

定时器参数设置

        先看一下STM32WL中的定时器初始化的数据结构,如下:

/**
  * @brief  TIM Time base Configuration Structure definition
  */
typedef struct
{
  uint32_t Prescaler;             // 预分频器
  uint32_t CounterMode;        // 计数模式
  uint32_t Period;               // 定时器周期
  uint32_t ClockDivision;        // 时钟分频
  uint32_t RepetitionCounter; 	// 重复计算器
  uint32_t AutoReloadPreload;   // 预装载
} TIM_Base_InitTypeDef;
<think>好的,我现在需要处理用户关于STM32WLE5CCU6芯片的LoRa功能实现或资料的查询。首先,用户提到的引用内容似乎STM32WLE5系列相关,特别是LoRaWAN节点通信、评估简介以及低功耗处理。根据这些引用,我需要整理相关的技术文档和教程信息。 首先,用户提供的三个引用中,引用1提到了工程移植和应用移植,这可能涉及如何在STM32WLE5CCU6上配置LoRaWAN终端节点。引用2介绍了评估的硬件连接,特别是UART的配置,这可能对硬件设置有帮助。引用3讨论了低功耗模式的选择和处理,这对于LoRa设备的长时间运行非常重要。 接下来,我需要确定用户的需求是寻找教程或技术文档。因此,我应该提供来自ST官方的资料,如参考手册、应用笔记,以及第三方资源如评估文档和社区论坛。同时,需要确保这些资料涵盖了LoRa功能的具体实现步骤,包括硬件配置、软件移植、低功耗优化等。 另外,用户可能对实际的操作步骤感兴趣,比如如何移植LoRaWAN协议栈、如何配置外设(如ADC、UART),以及如何处理低功耗模式。这些问题在用户提供的引用中都有涉及,因此需要将这些内容整合到回答中,并附上引用标记。 我还需要检查是否有遗漏的信息,例如是否有其他相关的应用笔记或用户案例。此外,可能需要提醒用户参考官方的最新文档,因为固件和库可能会有更新,确保信息的时效性。 最后,生成的相关问题应围绕用户可能遇到的后续疑问,例如硬件设计注意事项、调试技巧、协议栈优化等,帮助用户进一步深入学习和解决问题。</think>根据提供的参考资料,以下是关于STM32WLE5CCU6芯片LoRa功能实现的技术文档和教程整理: ### 1. **官方技术文档** - **STM32WLE5参考手册** 包含芯片的寄存器定义、外设配置(如射频模块、ADC、UART)和低功耗模式说明,是开发基础文档[^1][^3]。 - **LoRaWAN协议栈应用笔记** ST官方提供的AN5403(《STM32WL系列LoRaWAN开发指南》)详细说明协议栈移植、AT命令交互及入网流程。 ### 2. **工程移植配置** - **硬件接口配置** 需注意UART引脚分配(如PA2/PA3用于AT指令通信)和射频天线匹配电路设计[^2]。 - **代码移植步骤** 参考示例工程(如LoRaWAN_End_Node),需调整时钟配置、射频参数(频段、扩频因子)和低功耗模式使能[^3]。 ```c // 示例:低功耗模式初始化(STM32CubeMX生成) void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInit = {0}; RCC_OscInit.OscillatorType = RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSI1; RCC_OscInit.HSIState = RCC_HSI_ON; RCC_OscInit.LSI1State = RCC_LSI_ON; HAL_RCC_OscConfig(&RCC_OscInit); // 启用低功耗时钟源 } ``` ### 3. **低功耗处理** - **模式选择** STM32WLE5支持Stop2模式(保留RAM,功耗约1.5μA),需关闭非必要外设时钟,通过RTC或外部事件唤醒。 - **ADC定时采集优化** 结合LPUART和DMA传输,在唤醒周期内快速完成数据采集LoRa报文发送。 ### 4. **第三方评估资料** - **智联LM401评估文档** 提供硬件原理图、LoRa模块驱动例程及功耗测试案例,可直接用于快速验证。 ### 5. **社区资源** - **ST社区论坛** 搜索关键词“STM32WLE5 LoRaWAN”,可找到移植问题讨论和调试经验分享。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值