STM32-HAL-定时器(无源蜂鸣器的驱动)

news/2024/4/19 8:20:45/文章来源:https://blog.csdn.net/sinat_41690014/article/details/130367291

文章目录

  • 一、蜂鸣器的介绍
  • 二、常用的无源蜂鸣器的电路
  • 三、测试准备
  • 四、初始化片上外设
    • 4.1 初始化定时器4的通道2为PWM输出模式
    • 4.2 编写驱动代码
    • 4.3 Logic分析仪查看波形
    • 4.4 代码分析

一、蜂鸣器的介绍

  • 有源蜂鸣器:

    有源蜂鸣器内部有一个发声电路,也就是“源”(震荡源,与无源蜂鸣器的区别),只要通电就可以响。

  • 无源蜂鸣器:

    无源蜂鸣器相当于扬声器,无源蜂鸣器直接接直流电,只在刚接触和离开的时候发声(利用电磁感应现象,通电、断电时推动振膜发声),一般使用方波信号源驱动发声。

二、常用的无源蜂鸣器的电路

在这里插入图片描述

1、从电路图中可以看出,蜂鸣器的驱动源来自单片机的定时器4的通道2产生的PWM方波

2、其中添加了IN4148二极管为的是再使用方波信号源驱动时,防止突然断电产生的高压反向电动势击穿其他的原件以及使用寿命的缩短。

3、其中使用的SS8085三极管作为开关器件使用,当基极电压为高电平时,三极管处于饱和状态,电路通电。

三、测试准备

  • 基于STM32F407VGT6的网络开发板(其他也可)
  • 安装windows系统并安装CubemxKeil MDK的电脑

四、初始化片上外设

4.1 初始化定时器4的通道2为PWM输出模式

在这里插入图片描述设置定时器4的Clock Source Internal Clock

  • 时钟源设置为外部高速时钟

在这里插入图片描述
【重要】查看开发板的板载晶振的频率(根据自己的开发板的晶振频率设置),因此设置输入的时钟的频率为25Hz,经过分频后最后设置频率为最大168MHz

  • 时钟树设置,经过分频、倍频后

在这里插入图片描述
经过代码查看,在"stm32f4xx_hal_rcc_ex.h" 头文件中,定时器4所在的时钟桥为APB1,查看时钟树后定时器4所在的外设桥时钟频率为84MHz.

在这里插入图片描述

  • 针对TIM4-Channel2 -PWM生成进行参数设置
Internal Clock内部时钟源,即晶振震荡源作为时钟
PWM Generation CH2PWM输出为通道2
Prescaler-(16位计数)定时器的分频系数(PSC):84-1
Counter Mode向上计数模式:UP
Counter Period-(16位计数)自动重装载值(ARR):1000 - 1
Internal Clock Division(CKD)不分频,频率非很高:No Division
auto-reload-preload自动重装载:Enable
ModePWM mode 1 向上计数
Plus(CCR)寄存器值:500
CH PolarityPWM极性,初始电平为下降沿

在这里插入图片描述

PWM的频率计算式

PWM的频率

定时器的计数频率计算式

在这里插入图片描述

设置后的PWM的频率为PWM-Freq = 84MHz / (84*1000) = 1kHz
时钟的计数频率为 CLK_CNT = Clcok-Freq / (PSC + 1) = 1MHz
计数一次的时间为 1 / CLK_CNT = (PSC + 1) / Clock-Freq = 1 / 1MHz = 1us
完成一次整周期的计数时间为 (ARR + 1)*1us = 1000 * 1uS = 1ms
高点评占空时间为CCR * 1us = 500us
设置的CCR值为 500 因此占空比为 500 / 1000 = 50%
  • 设置生成Keil- MDK代码文件

4.2 编写驱动代码

简单写两个函数可以表达意思即可。

[设置定时器的CCR寄存器的值]
#define BELL_PWM_FREQ                   2000000void beep_SetFreq(uint16_t freq)
{	uint32_t Period = BELL_PWM_FREQ / freq;uint16_t Pulse  = Period  / 2;HAL_TIM_PWM_Init(&htim4);// 初始化定时器的PWM模式HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_2);// 启动定时器的PWM模式	/* Set the Autoreload value , frequency*//*设置频率和占空比*/__HAL_TIM_SET_AUTORELOAD (&htim4, Period - 1);__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_2,Pulse);	
}void beep_off(void)
{	HAL_TIM_PWM_Stop(&htim4,TIM_CHANNEL_2);// 停止定时器的PWM输出
}void beep_on(void)
{beep_SetFreq(2000);//设置自动重装载值为2000 ARR寄存器的值为1000 占空比为50%HAL_Delay(1000);beep_off();
}/* USER CODE BEGIN 2 */beep_on();/* USER CODE END 2 */[result]
鸣响一秒后结束
修改不同的值会得到不同频率的鸣叫声

4.3 Logic分析仪查看波形

逻辑分析仪分析的波形的PWM参数设置是基于代码修改的

  • ARR = 2000 000/2000 - 1 = 1000 - 1
  • CCR = 1000 / 2 = 500
  • PWM-Freq = 84M / (1000 * 84) = 1kHz
  • Duty = 500 / 1000 = 50%

在这里插入图片描述

4.4 代码分析

这是一个宏定义,用于设置STM32中的定时器的自动重装载寄存器的值,从而实现定时器的计数周期。

  • &htim4 是定时器4的句柄,表示要设置的定时器。
  • Period 表示要设置的定时器计数周期的值,单位为定时器时钟周期数。
__HAL_TIM_SET_COMPARE(&htim4,TIM_CHANNEL_2,Pulse);	

这是一个宏定义,用来设置STM32中的定时器的比较值,从而实现定时器的计数和输出控制。

  • &htim4 是定时器4的句柄,表示要设置的定时器。
  • TIM_CHANNEL_2 表示要设置的定时器通道,表示比较输出的通道。
  • Pulse 表示要设置的比较值,用于控制定时器的输出和计数。

使用时需要先配置好定时器的基本参数,如时钟源、分频系数、计数方式等,然后再使用宏定义来设置自动重装载寄存器的值和比较值,从而实现定时器的计数周期控制和计数输出控制。

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

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

相关文章

数据湖Iceberg-Hive集成Iceberg(3)

文章目录 Hive集成Iceberg环境准备Hive与Iceberg的版本对应关系如下上传jar包,拷贝到Hive的auxlib目录中修改hive-site.xml,添加配置项启动 HMS 服务启动 Hadoop 创建和管理 Catalog默认使用 HiveCatalog指定 Catalog 类型使用 HiveCatalog使用 HadoopCa…

C++学习记录——이십 map和set

文章目录 1、setmultiset 2、map3、map::operator[] 1、set vector/list/deque等是序列式容器,map,set是关联式容器。序列式容器的特点就是数据线性存放,而关联式容器的数据并不是线性,数据之间有很强的关系。 它们的底层是平衡…

在当前互联网行情下,Android想转音视频开发,会有前景吗?

前言 近年来,由于三年疫情的影响,很多公司都开始陆陆续续的在裁员,Android开发工作岗位也是,可能有些从事Android开发的朋友还没有意识到,Android开发岗位正在变少,求职者,僧多粥少&#xff0c…

视频大文件传输的演变:从“卷轴男孩”到自动化

200年前,从纽约市到英国伦敦的单程旅行需要乘坐一艘跨大西洋轮船将近三周——如果你能负担得起的话,那就是。那些不能在满是汗水、狭窄的帆船上安顿大约一个半月的人。 今天,视频专业人士能够在几小时甚至几分钟内跨越相同的物理距离传输大量…

《用于估计血压变化的光电体积描记图和心电图的特征》阅读笔记

目录 一、摘要 二、十大问题 Q1论文试图解决什么问题? Q2这是否是一个新的问题? Q3这篇文章要验证一个什么科学假设? Q4有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员? Q5论文中提…

微信小程序第五节——登录那些事儿(超详细的前后端完整流程)

📌 微信小程序第一节 ——自定义顶部、底部导航栏以及获取胶囊体位置信息。 📌 微信小程序第二节 —— 自定义组件 📌 微信小程序第三节 —— 页面跳转的那些事儿 📌 微信小程序第四节—— 网络请求那些事儿 😜作 …

MFC之CRect详解

2023年4月25日,周二晚上。 今天查了不少关于CRect类及其相关内容的资料,学到了不少东西,所以我决定写一篇详细的关于CRect类及其相关内容的文章,以记录今天所学。 CRect类 在 MFC 中,CRect 类表示一个矩形区域。它是…

linux 命令之 tar -czvf和 tar -xzvf

文章目录 一、概述:二、基础知识 一、概述: tar 用于linux 系统中压缩和解压 二、基础知识 tar常用命令参数说明 tar命令的czvf/xzvf参数分别代表的意义如下: -c 或–create 建立新的备份文件。 -x或–extract或–get 从备份文件中还原文件…

SparkStreaming学习之——无状态与有状态转化、遍历kafka的topic消息、WindowOperations

目录 一、状态转化 二、kafka topic A→SparkStreaming→kafka topic B (一)rdd.foreach与rdd.foreachPartition (二)案例实操1 1.需求: 2.代码实现: 3.运行结果 (三)案例实操2 1.需求: 2.代码实现: 3.运行结果 三、W…

Eclipse代码提示突然失灵的解决方案

不知道改动了啥,突然间Eclipse的代码提示就失效了,发现缺少后极不方便。 使用快捷键:Alt/ 提示 No Default Proposals 为什么使用快捷键:Alt/ 会提示“No Default Proposals。”呢? 网上提示可能是热键冲突 但是一套…

数据可视化大屏电商数据展示平台开发实录(Echarts柱图曲线图、mysql筛选统计语句、时间计算、大数据量统计)

数据可视化大屏电商数据展示平台 一、前言二、项目介绍三、项目展示四、项目经验分享4.1 翻牌器4.1.1 翻牌器-今日实时交易4.1.2.翻牌器后端统计SUM函数的使用 4.2 不同时间指标的数据MySql内部的时间计算 4.3 实时交易播报MySql联表查询和内部遍历循环 4.4 每日交易量4.4.1.近…

5.5 高斯型求积公式简历

学习目标: 我会按照以下步骤学习高斯求积公式简介: 理解积分的概念:学习什么是积分以及积分的几何和物理意义,如面积、质量、电荷等概念。 掌握基本的积分技巧:掌握基本的积分公式和技巧,如换元法、分部积…

流辰信息微服务平台:数字化转型的优良工具!

在互联网迅猛发展的今天,越来越多的企业倾向于新兴领域带来的便利性和灵活性了,其中,微服务平台就是其中之一了。流辰信息微服务平台是专注于研发系统开发、数据治理、数据分析的平台,致力于为各中大小型企业提供优质的微服务解决…

Java——字符串的排列

题目链接 牛客网在线oj题——字符串的排列 题目描述 输入一个长度为 n 字符串,打印出该字符串中字符的所有排列,你可以以任意顺序返回这个字符串数组。 例如输入字符串ABC,则输出由字符A,B,C所能排列出来的所有字符串ABC,ACB,BAC,BCA,CBA和CAB。 数…

打造卓越游戏 | 2023 Google 游戏开发者峰会

一款游戏从初始构想的开发到辉煌赛季的策划,开发者们每时每刻都在倾注心血潜心钻研,Google 也致力于在整个开发和发布生命周期中为您提供帮助。我们很高兴能在今年如约而至的 Google 游戏开发者峰会中与您分享诸多更新,展示我们为助力您打造精…

如何有效的开展接口自动化测试,一篇就行

一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测试效率和测试质量,减少人工测试的工作量和测试成本,并且能够快速发现和修复接口错误&…

PCL点云库(2) — IO模块

目录 2.1 IO模块接口 2.2 PCD数据读写 (1) PCD数据解析 (2)PCD文件读写示例 2.3 PLY数据读写 (1)PLY数据解析 (2)PLY文件读写示例 2.4 OBJ数据读写 (1&#xff…

C语言指针2大问题:指针类型有什么用?指针如何运算?

如题,本篇博客主要解决2个疑点:指针类型的用处,指针如何运算。 1.指针类型 C语言中的指针类型,在X86环境下大小是4个字节,在X64环境下大小是8个字节。既然指针的大小和指针类型无关,那么指针类型究竟有什么…

银行系统【GUI/Swing+MySQL】(Java课设)

系统类型 Swing窗口类型Mysql数据库存储数据 使用范围 适合作为Java课设!!! 部署环境 jdk1.8Mysql8.0Idea或eclipsejdbc 运行效果 ​​​​​​​ 本系统源码地址:​​​​​​​https://download.csdn.net/download/qq_50…

从零开始写ChatGLM大模型的微调代码

cursor 的下载及安装(免费版每月100次,升级pro 20刀/月) cursor是一款与openai合作的,使用gpt-4的一款编程工具,它可以让你通过gpt-4进行辅助编程,以此提高效率。 下载地址:https://www.curso…