【蓝桥杯——物联网设计与开发】基础模块3 - 定时器

目录

一、定时器资源

二、LPTIM

(1)LPTIM 介绍

(2)STM32CubeMX 软件配置

(3)代码编写

(4)实验现象

三、踩坑日记


一、定时器资源

        🔵超低功耗的 STM32L071xx 器件包括三个通用定时器,一个低功耗定时器,一个基本定时器,两个看门狗定时器和 SysTick 定时器。

图1        定时器资源
  • 计数器分辨率:决定计数的范围,16位计数器计数范围为(0-65535)
  • 计数器类型:向上计数、向下计数、向上/向下计数
  • 预分频系数:1-65536,对输入定时器的时钟进行分频
  • 捕捉/比较通道:捕获外部触发信号、PWM 输出、单脉冲输出等 
表1 定时器特征比较
定时器计数器分频率计数器类型预分频系数DMA请求产生捕获/比较通道数互补输出

TIM2

TIM3

16位

向上、向下、向上/向下

1-65536允许4不能

TIM21

TIM22

16位向上、向下、向上/向下1-65536不允许2不能

TIM6

TIM7

16位向上1-65536允许0不能

1. 4个可同步的通用定时器(TIM2TIM3TIM21TIM22

  • 其中 TIM3 的通道3(即引脚 PB0),可用于拓展的脉冲模块作输入捕获通道;

2. LPTIM 低功耗定时器(下文介绍);

3. SysTick Timer: 这个定时器专门用于操作系统,但也可以用作标准的计数器。它是基于一个24位的自动重新加载能力和一个可编程的时钟源。当计数器到达0时,它具有可掩蔽的系统中断生成功能。


二、LPTIM

(1)LPTIM 介绍

        低功耗计时器有一个独立的时钟,如果它被 LSELSL 或外部时钟锁定,它也处于停止模式。它能够从停止模式唤醒设备。 

        这个低功耗计时器支持以下功能:

  • 具有 16 位自动重载寄存器的 16 位上计数器
  • 16位比较寄存器
  • 可配置的输出: (脉冲、PWM)
  • 连续/一次模式
  • 软件触发/硬件触发
  • 可选择时钟来源:

        - 内部时钟来源(LSELSIHSIAPB

        - 外部时钟源通过 LPTIM 输入(即使没有内部时钟源运行,脉冲计数器应用程序也使用)

  • 可编程数字故障滤波器
  • 编码器模式


(2)STM32CubeMX 软件配置

🔅“工程建立、时钟树配置、Debug 串行线配置、代码生成配置”【蓝桥杯——物联网设计与开发】基础模块1- GPIO输出  一文中有讲解,这里不再赘述❗️

1️⃣点击引脚 PC15 → 选择 GPIO_Output 模式(此处默认为推挽输出);

图2        LD5引脚配置

2️⃣点击 "GPIO" → 点击引脚 PC15 → 将 "GPIO output level" 栏修改为 "High",即将 PC15 引脚初始化为高电平;

⚠️此处修改不是必须的,应当根据题意要求进行配置,这里默认为上电熄灭;

图3        LD5 初始化配置

3️⃣点击 "Timers" → 选择 "LPTIM1" → 在模式一栏中选择 "Counts internal clock events"

  • 此处使能低功耗定时器 LPTIM1,并将模式配置为"计数内部时钟",LPTIM1 的时钟源为内部时钟;
图4        LPTIM1 使能

4️⃣点击 "Clock Configuration" 栏 → 配置 LPTIMCLK (低功耗定时器时钟源)为 "PCLK1" (外设时钟1);

图5        LPTIM 时钟源配置

5️⃣返回 "Pinout & Configuration" 栏,对 LPTIM 参数进行配置;

  • 时钟分频配置为32分频,即 LPTIM 时基时钟为1MHz
  • 预装载更新模式配置为 "Update End Of Period",即在周期结束时更新;
图6        LPTIM 参数配置

6️⃣在 "NVIC Settings" 栏,使能 LPTIM 中断;

图7        LPTIM 中断使能

7️⃣生成代码即可;

(3)代码编写

🟢️main函数

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define PERIOD	1000
/* USER CODE END PD */
/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_LPTIM1_Init();
  /* USER CODE BEGIN 2 */
  /* 启动定时器并设置周期,此处设置为1000,即1ms中断一次 */
  HAL_LPTIM_Counter_Start_IT(&hlptim1, PERIOD);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }
  /* USER CODE END 3 */
}

        在 while(1) 死循环之前,调用函数

HAL_LPTIM_Counter_Start_IT(&hlptim1, PERIOD);

以中断的方式启动 LPTIM 开始计数,此处周期设置为1000;

由于 LPTIM 时基时钟为 1MHz,则1000个周期为1ms,即1ms中断一次;

🟠️中断回调函数

/* USER CODE BEGIN 0 */
/* LPTIM 自动重载匹配回调函数 - 1ms进入一次 */
void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim)
{
	/* 静态变量定义,用于1s计数 */
	static uint16_t cnt_1s = 0;
	/* 计数满1000次即1s */
	if(++cnt_1s == 1000)
	{
		/* 变量清零,用于下一次计数 */
		cnt_1s = 0;
		/* LD5状态翻转,便于观察现象 */
		HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_15);
	}
}
/* USER CODE END 0 */

        ⚠️查阅头文件 "stm32l0xx_hal_lptim.h" → 在第618行,查找中断回调函数声明;

        声明函数 void HAL_LPTIM_AutoReloadMatchCallback(LPTIM_HandleTypeDef *hlptim);

        该函数每 1ms 进入一次,在函数内部声明静态变量用于 1s 计数,当时间达到 1s 时,将变量清零,并翻转 LD5 状态,便于现象观察;

(4)实验现象

  • LD5 状态每间隔 1s 取反;

三、踩坑日记

        🔅使用中断回调函数,一定要在进入死循环之前调用定时器中断方式启动函数,否则中断无法工作;

图8        LPTIM 启动函数调用
  • 22
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 蓝桥杯物联网设计开发考试不会要求考生编写 OLED 和 LoRa 的驱动程序。而是更注重考察考生在物联网设计开发方面的综合能力和技术应用能力。 物联网设计开发是指将各种物理设备和传感器通过互联网连接起来,实现数据的采集、传输、处理和应用。在这个过程中,OLED 和 LoRa 是常见的硬件设备和无线通信技术。 OLED(Organic Light-Emitting Diode)属于一种发光二极管显示器。它具有自发光、超薄、高对比度和低功耗等优点。在物联网应用中,OLED 可以用于显示各种传感器的数据或者设备的工作状态。 LoRa(Long Range)是一种低功耗、远距离的无线通信技术。它适用于物联网场景下的远距离传输和低功耗要求。LoRa 可以实现传感器数据的远程传输和远程控制等功能。 在蓝桥杯物联网设计开发考试中,考生可能会遇到使用 OLED 和 LoRa 的实际应用案例。但不要求考生编写硬件驱动程序。考察的重点更多在于考察考生对物联网的整体设计能力、对数据传输和处理的技术理解和实践经验。 因此,考生需要掌握物联网系统的搭建和调试技巧、熟悉各种通信协议和传输技术、了解各种传感器的工作原理和数据处理方法。掌握这些基础知识和技能,能够实际应用到物联网实际项目中,才能在蓝桥杯物联网设计开发考试中取得好的成绩。 ### 回答2: 蓝桥杯物联网设计开发考试会给oled和lora驱动。 蓝桥杯物联网设计开发考试是一个对物联网相关知识的综合考核,其中会考察对各种传感器、驱动设备的使用能力。而oled和lora作为物联网应用中常用的两种驱动设备,理应在考试中被考察。 OLED是一种有机发光二极管显示技术,可以实现高对比度、高亮度、宽视角的显示效果。在物联网设计中,使用OLED可以将各种数据或者信息以直观的方式呈现出来,提高用户体验。因此,考试中会对OLED的使用方法进行考察,包括初始化、显示文本或图片等相关操作。 Lora是一种低功耗远距离无线通信技术,适用于物联网中传感器节点之间的数据传输。它具有长距离传输能力和低功耗的特点,可以实现在数百米至几公里范围内的无线通信。在物联网设计中,使用Lora可以实现传感器的数据采集和上传,从而构建起一个完整的无线传感器网络。因此,考试中也会对Lora的使用方法进行考察,包括Lora模块的初始化、数据发送和接收等相关操作。 综上所述,蓝桥杯物联网设计开发考试会考察对于oled和lora的驱动。通过对这些驱动设备的了解和掌握,可以更好地实现物联网应用的开发设计。 ### 回答3: 蓝桥杯物联网设计开发考试不会直接给出 OLED 和 Lora 驱动程序。然而,物联网设计开发考试通常会涉及对各种传感器、通信模块以及外设的使用和集成,包括 OLED 和 Lora。对于 OLED 和 Lora 驱动程序的使用,考试题目可能要求考生自行编写或集成相应的驱动程序。 对于 OLED,考生可能会被要求了解 OLED 的工作原理和驱动方式,并实现相关功能,如显示文本、图像等。考试中可能会要求考生使用相应的开发平台和库来编写 OLED 驱动代码,并结合实际应用场景进行相应的功能实现和调试。 对于 Lora,考生可能会要求了解 Lora 的工作原理和通信协议,并实现与其他设备之间的远程通信。考试中可能会要求考生使用开发板和相应的 Lora 模块来实现通信功能,并结合具体场景对其进行应用和调试。 总之,蓝桥杯物联网设计开发考试鼓励考生在实际应用中掌握和使用各种硬件驱动和通信模块。虽然不会直接给出 OLED 和 Lora 驱动程序,但通过考试的实践和学习,考生可以提升自己的硬件驱动和通信模块的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

逝灮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值