“每一次的感应,都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】

“每一次的感应,都是对环境的温柔拥抱。”#STM32项目二 《感应开关盖垃圾桶》【上】

    • 前言
    • 预备知识
    • 1.定时器介绍1
      • 1.1软件延时的优缺点
      • 1.2定时器工作原理
      • 1.3定时器的分类
      • 1.4 STM32F103C8T6定时器资源
      • 1.5通用定时器介绍
    • 2.定时器介绍2
      • 2.1定时器计数模式
      • 2.2定时器时钟源
      • 2.3定时器溢出计算公式:
    • 3.使用定时器中断点亮LED灯
      • 3.1实验需求
      • 3.2配置工程
      • 3.3编程实现实验需求
    • 4.PWM概述
      • 4.1 STM32F103C8T6 PWM资源
      • 4.2 PWM输出模式
      • 4.3 PWM周期与频率
      • 4.4 PWM占空比
    • 5. PWM实现呼吸灯效果
      • 5.1实验需求
      • 5.2实验原理
      • 5.3配置工程
      • 5.4编程实现实验需求
    • 结束语

前言

  本篇博文介绍的是基于STM32F103C8T6单片机第二个项目《感应开关盖垃圾桶》,包含定时器介绍1,定时器介绍2,使用定时器中断点亮LED灯,PWM概述,PWM实现呼吸灯效果。看到这篇博文的朋友,可以先赞再看吗?

预备知识

  一、基本电路标识识别和接线,例如VCC,GND。
  二、电脑基本操作复制粘贴
  三、分文件编程
  四、C变量
  五、基本输入输出
  六、流程控制
  七、函数
  八、指针

  如果以上知识不清楚,请自行学习后再来浏览。如果我有没例出的,请在评论区写一下。谢谢啦!

1.定时器介绍1

1.1软件延时的优缺点

  1. 优点:

  简单易实现:软件延时通常只需要编写一小段代码,通过循环或者延时函数即可实现,不需要额外的硬件资源。

  对硬件要求低:软件延时不需要专门的硬件支持,只需要有基本的CPU运算能力即可。

  灵活性高:软件延时可以根据需要进行调整,可以很容易地改变延时的时间长度。

  节省成本:由于不需要额外的硬件资源,软件延时可以在很大程度上节省硬件成本。

  1. 优点:

  占用CPU资源:在软件延时期间,CPU需要一直执行延时代码,无法执行其他任务,这会导致CPU资源的浪费。

  影响系统性能:如果大量使用软件延时,会导致系统实时性变差,因为CPU在等待延时期间无法处理其他任务。

  精度受限:软件延时的精度可能受到操作系统调度、中断等因素的影响,不如硬件延时精确。

void Delay500ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 4;j = 129;k = 119;do{do{while (--k);} while (--j);} while (--i);
}

1.2定时器工作原理

  1. 时基的定义:

  **时基是一个时间显示的基本单位,也可以理解为时间基准。**它在不同的领域有不同的应用。

  在电子线路中,时基主要用来表示数字电路中的基准时钟,例如在示波器中,时基表示示波器上横轴一大格波形所占据的时间。时基决定了示波器相对采样率的大小,也在一定程度上决定了示波器显示波形与原波形的相符合程度。

  在计算机系统中,时基是用来衡量时间的基准,用于同步和计时以实现各种功能。时基的类型有多种,如硬件时钟、系统时钟等,它们各自在计算机系统中扮演不同的角色。时基的准确性对计算机系统的稳定性和准确性至关重要,它可以用来实现操作系统对不同进程的调度、对外部事件的响应等,同时在信息传输、网络通信等方面也发挥重要作用。

  此外,时基也可以指时间词中的“年、月、日、天”等语素,这些语素标明了计时的基准。

  1. 定时器工作原理:

  使用精准的时基,通过硬件的方式,实现定时器功能。定时器核心就是计数器。

在这里插入图片描述

1.3定时器的分类

  • 基本定时器(TIM6~TIM7),STM32单片机内部数量少,也用得少
  • 通用定时器(TIM2~TIM5),STM32单片机内部数量多用得也多
  • 高级定时器(TIM1TIM8),STM32单片机内部数量少,也用得少。

在这里插入图片描述

1.4 STM32F103C8T6定时器资源

在这里插入图片描述

1.5通用定时器介绍

  1. 16 位向上、向下、向上/向下自动装载计数器TIMx_CNT)。
  2. 16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的
    任意数值。
  3. 4 个独立通道TIMx_CH1~4),这些通道可以用来作为:
    A.输入捕获
    B.输出比较
    C.PWM 生成(边缘或中间对齐模式)
    D.单脉冲模式输出
  4. 可使用外部信号TIMx_ETR)控制定时器定时器互连(可以用 1 个定时器控制另外一个定时器
    的同步电路。
  5. 如下事件发生时产生中断/DMA:
    A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
    B.触发事件(计数器启动、停止初始化或者由内部/外部触发计数)
    C.输入捕获
    D.输出比较
    E.支持针对定位的增量(正交)编码器霍尔传感器电路
    F.触发输入为外部时钟或者按周期的电流管理

2.定时器介绍2

2.1定时器计数模式

计数模式计数溢出值计数重装值
向上计数CNT = ARRCNT = 0
向下计数CNT = 0CNT = ARR
中心对齐计数CNT = ARR - 1CNT = ARR
CNT = 1CNT = 0

在这里插入图片描述

2.2定时器时钟源

在这里插入图片描述

2.3定时器溢出计算公式:

在这里插入图片描述

在这里插入图片描述

  例如,要定时500ms,则:PSC=7199,ARR=4999,Tclk=72M

3.使用定时器中断点亮LED灯

3.1实验需求

  使用定时器中断方法,每500ms翻转一次LED1和LED2的状态

3.2配置工程

  1. 配置RCC,如下步骤

在这里插入图片描述

  1. 配置时序框图,如下图步骤。

在这里插入图片描述

  1. 配置GPIO口,如下图步骤。

在这里插入图片描述

在这里插入图片描述

  1. 将配置PB8默认输出高电平,PB9默认输出低电平。实现LED1默认关闭,LED2默认打开。

在这里插入图片描述

在这里插入图片描述

  1. 定时器介绍,如下图。

在这里插入图片描述

  1. 配置定时器2,如下图步骤。

在这里插入图片描述

  1. 定时器溢出参数介绍。

在这里插入图片描述

  1. 配置定时器溢出参数,如下图步骤。

在这里插入图片描述

  1. 打开定时器中断,如下图步骤。

在这里插入图片描述

  1. 配置工程基本信息,如下图步骤。

在这里插入图片描述

  1. 配置生成工程必要文件,如下图步骤。

在这里插入图片描述

  1. 生成工程,如下图步骤。

在这里插入图片描述

3.3编程实现实验需求

  1. 找到MX_TIM2_Init();函数体,确认htim2中什么元素接收定时器模式。

在这里插入图片描述

  1. 找到定时器中断服务函数,实现每隔0.5秒亮灭LED灯

在这里插入图片描述

  1. 修改定时器中断服务函数,实现每隔0.5秒亮灭LED灯。
    • 修改思路看代码注释
    • 定时器中断服务函数代码
//发生定时器中断,立马进入定时器中断服务函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
//一根定时器中断线上有很多中断源//检测定时器2中断源if(htim->Instance == TIM2){//检测到定时器2中断源后进行LED1和LED2状态的翻转HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_9);}
}
  1. 在主函数中调用启动定时器函数
HAL_TIM_Base_Start_IT(&htim2);

4.PWM概述

4.1 STM32F103C8T6 PWM资源

  • 高级定时器(TIM1):7路
  • 通用定时器(TIM2~TIM4);各4路

4.2 PWM输出模式

  1. PWM模式1:在向上计数时,一旦 CNT < CCRx 时输出为有效电平,否则为无效电平; 在向下计数时,一旦 CNT > CCRx 时输出为无效电平,否则为有效电平。
  2. PWM模式2:在向上计数时,一旦 CNT < CCRx 时输出为无效电平,否则为有效电平; 在向下计数时,一旦 CNT > CCRx 时输出为有效电平,否则为无效电平。

在这里插入图片描述

4.3 PWM周期与频率

在这里插入图片描述

4.4 PWM占空比

  由TIMx_CCRx寄存器决定。

5. PWM实现呼吸灯效果

5.1实验需求

  使用PWM点亮LED1和LED2实现交叉呼吸灯效果

5.2实验原理

  1. LED灯越来越亮和越来越暗的原理是:由不同的占空比决定
  2. 使用公式计算周期和频率:例如2KHz,则:PSC=71,ARR=499
  3. LED1连接到定时器4的3通道,LED2连接到定时器4的4通道。参考手册内容

在这里插入图片描述

5.3配置工程

  1. 配置SYS,如下图步骤。

在这里插入图片描述

  1. 配置RCC,如下图步骤。

在这里插入图片描述

  1. 配置时序框图,如下图步骤。

在这里插入图片描述

  1. 配置LED1相应引脚输出PWM波,如下图步骤。

在这里插入图片描述

  1. 配置LED2相应引脚输出PWM波,如下图步骤。

在这里插入图片描述

  1. 根据公式,配置定时器溢出值,使产生2000Hz的PWM波。如下图步骤。

在这里插入图片描述

  1. PWM输出参数理解

在这里插入图片描述

  1. 设置LED1和LED2相应引脚PWM输出参数有效电平为低电平,如下图步骤。

在这里插入图片描述

在这里插入图片描述

  1. 配置工程基础信息,如下图步骤。

在这里插入图片描述

  1. 配置生成工程必要文件,如下图步骤。

在这里插入图片描述

  1. 生成工程,如下图步骤。

在这里插入图片描述

5.4编程实现实验需求

  1. 定义LED1和LED2的占空比变量,定义PWM方向变量。
uint16_t pwmVal1 = 0;   //调整 LED1 PWM 占空比
uint16_t pwmVal2 = 500;   //调整 LED2 PWM 占空比
uint8_t dir = 1;        //设置改变方向。1:占空比变大;0:占空比变小
  1. 在定时器初始化函数后面打开定时器4通道3(LED1)和通道4(LED2)的PWM
//打开定时器4通道3和通道4的PWM
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_3);
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
  1. 循环实现呼吸灯效果思路请看代码注释。
while (1){/* USER CODE END WHILE *///延时1毫秒,防止灯一直灭HAL_Delay(1);//检测占空比变大方向if(dir) {pwmVal1++;  //LED1逐渐变亮pwmVal2--;  //LED2逐渐变暗}else //占空比变小方向{pwmVal1--;  //LED1逐渐变暗pwmVal2++;  //LED2逐渐变亮}if(pwmVal1 > 500)     //当LED1达到最亮,就让LED1逐渐变暗;当LED2达到最暗,就让LED1逐渐变亮{dir = 0;}else if(pwmVal1 == 0) //当LED1达到最暗,就让LED1逐渐变亮;当LED2达到最亮,就让LED1逐渐变暗{dir = 1;}//修改占空比的值,修改比较值,实现LED灯的呼吸效果__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_3,pwmVal1);__HAL_TIM_SetCompare(&htim4,TIM_CHANNEL_4,pwmVal2);/* USER CODE BEGIN 3 */}

结束语

  很高兴您能看到这里,点个赞再走呗。谢谢您啦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721637.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【VTKExamples::PolyData】第四十六期 Reflection

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例Reflection,并解析接口vtkReflectionFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 1. Reflection …

Docker容器详解

一、概述 1.1 基本概念&#xff1a; Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从Apache2.0协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚…

SpringCloud 各自组件的停更/升级/替换

一、停更不停用 现在 SpringCloud 不再修复 bug&#xff0c;也不再接收合并请求&#xff0c;也不再发布新版本&#xff0c;但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图&#xff0c;服务的注册和发现使用 Eureka&#xff0c;服务的负载和调…

深入理解c指针(七)

目录 十、回调函数和qsort函数 1、回调函数 2、简单介绍size_t 数据类型 3、qsort 排序函数 3.1 qsort函数简单举例1&#xff08;升序排序&#xff09; 3.2 qsort函数简单举例2&#xff08;字符串长度排序&#xff09; 3.3 简单讲解 -> 操作符 3.4 常见符号的ASCII…

如何利用会话式AI提升你的工作效率?

会话式AI如何改变我们的生活和工作 在当今时代&#xff0c;内容策略的重要性日渐凸显&#xff0c;良好的内容策略能够与流量及转化率紧密相连&#xff0c;成为企业在内容策略领域不容忽视的营销工具之一。 然而&#xff0c;目前内容同质化现象严重&#xff0c;企业若想在内容营…

iPaas数据传输的方式

一、iPaas平台概述 iPaas&#xff08;Integration Platform as a Service&#xff09;平台&#xff0c;作为一种先进的云计算服务模式&#xff0c;为开发者和企业提供了一种全面且灵活的应用集成解决方案。它构建在PaaS&#xff08;Platform as a Service&#xff09;基础之上…

【C++庖丁解牛】初始化列表 | Static对象 | 友元函数

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 目录 1. 再谈构造函数1.1 …

WiFi模块赋能智能手表:拓展功能与提升连接性

随着科技的不断进步&#xff0c;智能手表正逐渐成为现代人生活中不可或缺的智能配饰。其中&#xff0c;WiFi模块的应用为智能手表带来了更多强大的功能和更高的连接性&#xff0c;为用户提供了更为便捷、智能化的使用体验。本文将深入探讨WiFi模块在智能手表中的应用。 远程通信…

RK DVP NVP6158配置 学习

NVP6158简介 NVP6158C是一款4通道通用RX&#xff0c;提供高质量图像的芯片。它接受来自摄像机和其他视频信号的独立4通道通用输入来源。它将4通道通用1M至8M 7.5P视频格式数字化并解码为代表8位ITU-R BT.656/1120 4:2:2格式的数字分量视频&#xff0c;并将单独的BT.601格式与27…

40个Python字符串实例

Python 字符串是 Python 编程语言中最常用的数据类型之一&#xff0c;它可以表示文本或一组字符。Python 中的字符串是不可变的序列&#xff0c;意味着一旦创建&#xff0c;其值就不能被修改。下面是一些关于 Python 字符串的介绍。 概述 创建字符串&#xff1a;可以使用单引…

如何找回删除的文件?5个数据恢复方法

电脑已经成为我们生活和工作不可或缺的一部分。然而随着电脑使用频率的增加&#xff0c;误删文件的情况也时有发生。一旦重要的文件被误删&#xff0c;很多人会感到惊慌失措。实际上只要掌握了一些有效的数据恢复方法&#xff0c;就有可能找回那些被误删的文件。本文将为你介绍…

指针中的回调函数与qsort的深度理解与模拟

今天给大家在更新一下指针类型的知识&#xff0c;这里讲到了一个库函数sqort&#xff0c;以及回调函数的理解。 望喜欢 目录 回调函数 qsort函数 qsort模拟实现 回调函数 回调函数就是⼀个通过函数指针调用的函数。 如果你把函数的指针&#xff08;地址&#xff09;作为参数…

Mac清理电脑垃圾工具CleanMyMac X4.15中文免费版下载

嘿&#xff0c;亲爱的Mac用户们&#xff0c;你们是否曾经想象过你的电脑是一座美丽的城市&#xff0c;而垃圾文件则是那些不速之客&#xff0c;悄悄堆积&#xff0c;影响着城市的整体美观。今天&#xff0c;我们就来聊聊Mac为什么会产生垃圾文件&#xff0c;这些垃圾文件会对你…

【科研基础】插图摘录

FedSL: Federated Split Learning for Collaborative Healthcare Analytics on Resource-Constrained Wearable IoMT Devices Blockchain-Based Trustworthy and Efficient Hierarchical Federated Learning for UAV-Enabled IoT Networks

机械五要素手持气象站的应用

TH-SQ5在数字化和智能化的时代背景下&#xff0c;气象监测技术正日益成为众多行业不可或缺的利器。其中&#xff0c;机械五要素手持气象站以其便携性、实时性和多功能性受到了广泛关注。下面讲解一下手持气象站是什么以及应用&#xff1a; 一、机械五要素手持气象站概述 机械五…

白酒:制曲工艺的环境因素与微生物生态关系

在豪迈白酒的酿造过程中&#xff0c;制曲工艺是非常关键的一环。而环境因素与微生物生态关系对于制曲工艺的成功与否起着决定性的作用。云仓酒庄深谙此道&#xff0c;在制曲过程中注重环境因素的调控&#xff0c;并深入研究微生物生态关系&#xff0c;以提升豪迈白酒的品质和风…

【Java EE 】认识文件与Java文件操作

目录 &#x1f340;认识文件&#x1f338;树型结构组织 和 目录&#x1f338;文件路径&#xff08;Path&#xff09;&#x1f338;其他知识 &#x1f333;Java 中操作文件&#x1f338;File 概述&#x1f33b;属性&#x1f33b;构造方法&#x1f33b;方法 &#x1f338;代码示例…

【论文精读】I-JEPA

摘要 计算机视觉中&#xff0c;常采用基于不变性和基于生成的方法进行自监督学习。对比学习&#xff08;CL&#xff09;是典型的基于不变性的方法&#xff0c;通过预训练方法优化编码器&#xff0c;使其能生成同一图像的两个或多个视图的相似嵌入&#xff0c;其中图像视图通常由…

【Linux实践室】Linux常用命令

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

【vue.js】文档解读【day 1】 | 模板语法2

如果阅读有疑问的话&#xff0c;欢迎评论或私信&#xff01;&#xff01; 本人会很热心的阐述自己的想法&#xff01;谢谢&#xff01;&#xff01;&#xff01; 文章目录 模板语法JavaScript表达式仅支持表达式调用函数&#xff1f;受限的全局访问 指令参数动态参数动态参数中…