PWM实现蜂鸣器

tim4.h

#ifndef __TIM4_H__
#define __TIM4_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_tim.h"
void timer4_init();#endif

tim4.c

#include "tim4.h"void timer4_init()
{// 1. 设置GPIOB,TIM4的时钟使能   RCC_MP_AHB4ENSETR  RCC_MP_APB1ENSETRRCC->MP_AHB4ENSETR |= (0x1 << 1);RCC->MP_APB1ENSETR |= (0x1 << 2);// 2. 设置PB6引脚为复用功能       GPIOB_MODERGPIOB->MODER &= (~(0x3 << 12));GPIOB->MODER |= (0x2 << 12);// 3. 设置PB6引脚为TIM4_CH1功能   GPIOB_AFRLGPIOB->AFRL &= (~(0xF << 24));GPIOB->AFRL |= (0x2 << 24);// 4. 设置预分频寄存器,TIM4_PSC[15:0]  CK_PSC = 209MHz  //      提供给TIM4的时钟源的频率是209MHzTIM4->PSC = 20900-1;    // 5. 设置PWM方波的最终的周期  TIM4_ARR[15:0]  自动装载寄存器//      得到一个1000-2000Hz的方波TIM4->ARR =10000;// 5. 设置PWM方波的占空比   TIM4_CCR1[15:0]  比较寄存器TIM4->CCR1 = 7000;// 6. 设置TIM4_CH1通道为PWM1模式  //      TIM4_CCMR1[16]  TIM4_CCMR1[6:4]  pwm模式1  = 0b0110TIM4->CCMR1 &= (~(0x1 << 16));TIM4->CCMR1 &= (~(0x7 << 4));TIM4->CCMR1 |= (0x6 << 4);// 7. 设置TIM4_CH1通道使能TIMx_CCR1预加载使能寄存器  比较寄存器使能//      TIM4_CCMR1[3] = 0x1TIM4->CCMR1 |= (0x1 << 3);// 8. 设置TIM4_CH1通道输出PWM方波的极性,//    TIM_CCER[3] = 0b0 TIM4_CCER[1] = 0x1 or 0x0TIM4->CCER &= (~(0x1 << 3));TIM4->CCER |= (0x1 << 1);//TIM4->CCER &= (~(0x1 << 1));// 9. 设置TIM4_CH1通道的输出使能位,输出PWM方波 //      TIM4_CCER[0] = 0x1TIM4->CCER |= (0x1 << 0);// 10. 设置TIM4_CH1通道的预装载寄存器的缓冲区的使能//      TIM4_CR1[7] = 0x1TIM4->CR1 |= (0x1 << 7);// 11. 设置定时器的计数方式,边沿对齐//      TIM4_CR1[6:5] = 0x0TIM4->CR1 &= (~(0x3 << 5));// 12 设置定时器计数的方向,采用递减计数/递增计数 //      TIM4_CR1[4] = 0x1 TIM4->CR1 |= (0x1 << 4);// 13. 使能TIM4_CH1计数器 //      TIM4_CR1[0] = 0x1TIM4->CR1 |= (0x1 << 0);
}

main.c

#include "tim4.h"void delay(int ms){int i,j;for(i=0;i<ms;i++){for(j=0;j<2000;j++);}}int num[10] = {0xFC,0x60,0xDA,0xF2,0x66,0xB6,0x3E,0xE0,0xFE,0xF6};int main(){timer4_init();while(1){}//保证程序不结束return 0;}

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

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

相关文章

头部首发优志愿头部u_sign生成与TLS指纹处理! + 数据可视化技术讲解【Python爬虫】

目录 针对大学名称 大学排名, 综合指数,学校情况等数据进行爬取 找对应得数据包 请求发现数据有加密 发现加密参数 搜索加密参数&#xff0c;好进行分析 分析过程 数据可视化 针对大学名称 大学排名, 综合指数,学校情况等数据进行爬取 首先进行鼠标右键&#xff0c;进行…

数据结构-顺序表的大小

一、固定大小的顺序表的缺陷&#xff1a; 1、不能随着数据的增多而增大 2、收到栈空间的限制 栈的大小&#xff1a;window下是1M 二、可变大小的顺序表的设计 1、什么是存储单元 cpu访问内存&#xff08;通过地址&#xff09; 8个二进制位称为一个存储单元&#xff08;一…

如何预防[[MyFile@waifu.club]].wis [[backup@waifu.club]].wis勒索病毒感染您的计算机?

导言&#xff1a; 近期&#xff0c;一种新兴的威胁[[MyFilewaifu.club]].wis [[backupwaifu.club]].wis勒索病毒&#xff0c;引起了广泛关注。这种恶意软件通过其高度复杂的加密算法&#xff0c;威胁着用户和组织的数据安全。本文将深入介绍[[MyFilewaifu.club]].wis [[backup…

(7)Linux GDB以及gcc和g++

&#x1f4ad; 前言 本章我们将带着大家高雅的学一学令众多习惯图形化页面的朋友难受的 gdb 调试&#xff0c;这部分知识可以选择性学习学习&#xff0c;以后倘若遇到一些问题时能在 Linux 内简单调试&#xff0c;还是很香的。然后在讲讲 gcc 和 g&#xff0c;系统讲解程序运行…

​C语言顺序查找算法以及代码​

通过前面对静态查找表的介绍&#xff0c;静态查找表即为只做查找操作的查找表。静态查找表既可以使用顺序表表示&#xff0c;也可以使用链表结构表示。虽然一个是数组、一个链表&#xff0c;但两者在做查找操作时&#xff0c;基本上大同小异。 本节以静态查找表的顺序存储结构为…

【Spring】11 EnvironmentAware 接口

文章目录 1. 简介2. 作用3. 使用3.1 创建并实现接口3.2 配置 Bean 信息3.3 创建启动类3.4 启动 4. 应用场景总结 Spring 框架为开发者提供了丰富的扩展点&#xff0c;其中之一就是 Bean 生命周期中的回调接口。本文将着重介绍一个与环境&#xff08;Environment&#xff09;相关…

docker vue项目打成镜像并推送到仓库

shell 脚本 #!/bin/bash image_nameweb version$1 echo ${version}echo build...... docker build -t ${image_name}:${version} . echo build doing..... sleep 10 image_idsudo docker images | grep ${image_name} | awk -F" " {print $3} | head -n 1 echo ${im…

Atcoder Beginner Contest 332 (A - F 题)

目录 [A - Online Shopping](https://atcoder.jp/contests/abc332/tasks/abc332_a)Problem StatementConstraintsInputOutputSample Input 1Sample Output 1Sample Input 2Sample Output 2Sample Input 3Sample Output 3 SolutionCode [B - Glass and Mu](https://atcoder.jp/c…

高并发下接口幂等性解决方案

高并发下接口幂等性解决方案 1. 幂等性概念: ①. 一个幂等操作指任意多次执行所产生的影响跟一次执行的影响相同.②. 幂等函数(幂等方法):a. 可以使用相同参数重复执行,并能获得相同结果的函数.b. 这些函数不会影响数据状态,也不用担心重复执行会对数据造成改变.c. 如:"…

Crocoddyl: 多接触最优控制的高效多功能框架

系列文章目录 前言 我们介绍了 Crocoddyl&#xff08;Contact RObot COntrol by Differential DYnamic Library&#xff09;&#xff0c;这是一个专为高效多触点优化控制&#xff08;multi-contact optimal control&#xff09;而定制的开源框架。Crocoddyl 可高效计算给定预定…

太阳能供电+4G摄像头搭建EasyCVR鱼塘养殖远程视频监控方案

一、背景需求 随着我国农业的快速发展&#xff0c;以及对新兴技术的应用&#xff0c;养殖业、农牧业、种植业等也面临着全新的挑战与机遇。对鱼塘养殖行业来说&#xff0c;养殖区域面积大、管理难&#xff0c;经常会遇到偷钓者、盗窃鱼苗、非法入侵等监管难题。在国家大力扶持…

2023年OceanBase开发者大会-核心PPT资料下载

一、峰会简介 2023年OceanBase开发者大会主要涵盖了OceanBase的最新技术进展、产品更新以及开发者工具的发布。大会发布了OceanBase 4.1版本&#xff0c;公布了两大友好工具&#xff0c;升级了文档的易用性&#xff0c;并统一了企业版和社区版的代码分支。这些举措全面呈现了O…

基于局域网和广域网训练推理加速策略

一、基于局域网的多GPU上并行训练 TensorFlow 的 MirroredStrategy 和 PyTorch 的 DistributedDataParallel 它们可以帮助您在多个 GPU 或多个计算节点上训练大型模型。这些策略的核心目标是提高训练速度,同时保持模型的准确性和稳定性。 加速的底层原理 TensorFlow 的 Mirro…

Android Studio导出Excel的一些感悟

目前&#xff0c;我一共用了四种依赖。分别用于导出Excel。 第一种&#xff1a; // https://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxlimplementation group: net.sourceforge.jexcelapi, name: jxl, version: 2.6.12 缺点&#xff1a;1、已经很久没有更新…

一文教会pandas

今天的笔试题令我感触很深&#xff0c;回顾一下之前写的都是低代码想想都。。。 anareport[[reportid,anndt,stockid]].drop_duplicates().rolling(window10,min_periods1).sum().groupby([anndt,stockid])[reportid].count() dfanareport[[reportid,anndt,stockid]].drop_dup…

构建高效持久层:深度解析 MyBatis-Plus(02)

目录 引言1. 逻辑删除1.1 概述1.2 逻辑删除的优势1.3.为什么使用逻辑删除1.4 综合案例 2. 乐观锁和悲观锁2.1.什么是乐观锁和悲观锁2.2.乐观锁和悲观锁的区别2.3.综合案例 3. 分页插件总结 引言 在现代软件开发中&#xff0c;数据库操作是不可或缺的一环。为了提高系统的性能、…

awk统计日志

部分日志文本格式内容 [2023-12-18 22:40:52.301][INFO ][221][com.excellent.common.core.security.filter.UrlRedirectFilter.doFilter:131] ----------------->>> 请求进入拦截器&#xff0c;IP&#xff1a;14.111.199.218, CLIENT&#xff1a;ANDROID&#xff0c…

避坑指南:uni-forms表单在uni-app中的实践经验

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;uni-app篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来JavaScript篇专栏内容:uni-app中forms表单的避坑指南篇 该篇章已被前端圈子收录,点此处进入即可查看更多优质内…

LeetCode-152. 乘积最大子数组

问题描述 原题链接 给你一个整数数组 nums &#xff0c;请你找出数组中乘积最大的非空连续子数组&#xff08;该子数组中至少包含一个数字&#xff09;&#xff0c;并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 子数组 是数组的连续子序列。 问题分析 …

计算机网络考研辨析(后续整理入笔记)

文章目录 体系结构物理层速率辨析交换方式辨析编码调制辨析 链路层链路层功能介质访问控制&#xff08;MAC&#xff09;信道划分控制之——CDMA随机访问控制轮询访问控制 扩展以太网交换机 网络层网络层功能IPv4协议IP地址IP数据报分析ICMP 网络拓扑与转发分析&#xff08;重点…