cortex-A7核PWM实验--STM32MP157
实验目的:驱动风扇,蜂鸣器,马达进行工作
目录
一,PWM相关概念
有源蜂鸣器和无源蜂鸣器
二,分析电路图,框图
三,分析RCC章节
1,确定总线连接
2,根据总线内容确定基地址
3.分析RCC章节所需寄存器
1,RCC_MP_AHB4ENSETR寄存器
2,RCC_MP_APB1ENSETR寄存器
四,分析GPIO章节寄存器
1,GPIOx_MODER寄存器
2,GPIOx_AFRL寄存器
五,分析TIM4章节
1,概述:编辑
2,特点:
计数方式:
3.内部框图
4,捕获 / 比较寄存器 CCR(Capture / Compare 1register)
5,分频工作原理
6,分析TIM4寄存器
1,分析TIMx_CR1寄存器
2,分析TIMx_CCMR1寄存器
3,分析TIMx_CCER寄存器
4,分析TIMx_PSC寄存器
5,分析TIMx_ARR寄存器
6,分析TIMx_CCR1寄存器
六,风扇,马达
一,PWM相关概念
PWM:(Pulse Width Modulation)脉冲宽度调制:是一种占空比可变的脉冲波形,是一种对模拟信号电平进行数字编码的方法
脉冲: 方波信号,高低电平变化会产生方波信号
周期:高低电平变化所需要的时间,单位ms
频率:周期和频率之间成倒数关系,单位:HZ,1s中可以产生多少个方波信号
占空比:在一个方波内,高电平占整个周期的百分比

有源蜂鸣器和无源蜂鸣器
1,源不是电源,是震荡源
2,有源蜂鸣器内部有一个震荡源,高电平发出响声,编程给高低电平即可
3,无源蜂鸣器内部没有震荡源,需要特定的方波信号驱动进行工作,价格较便宜
4,本实验开发板有缘当无源使用,产生PWM方波
二,分析电路图,框图
1.根据扩展版原理图 网络编号:结合资源扩展板 对应引脚:
蜂鸣器:TIM4_CH1 === PB6
马达:TIM16_CH1 === PF6
风扇:TIM1_CH1 === PE9
2.实验以蜂鸣器为例
框图

分析:
1,需要分析芯片手册 RCC/GPIO/TIM4章节
2,RCC:使能GPIOB组/TIM4组控制器
3,GPIO:1)设置复用功能, 2)设置复用功能TIM4_CH1
4,TIM4:产生PWM方波信号
三,分析RCC章节
1,确定总线连接
根据Memory and bus architecture 章节中 Memory map and register boundary addresses 篇确定GPIO总线:APB4;TIM总线:APB1
2,根据总线内容确定基地址
RCC: 0x5000 0000
GPIOB:0x5000 3000
TIM4: 0x4000 2000
根据基地址和寄存器的偏移量确定寄存器的地址: 寄存器地址 = 基地址 + 偏移地址
3.分析RCC章节所需寄存器
1,RCC_MP_AHB4ENSETR寄存器
作用:使能GPIOB组控制器
地址:0x5000000 + 0xA28 = 0x50000A28
伪代码:RCC_MP_AHB4ENSETR [1] = 1
2,RCC_MP_APB1ENSETR寄存器
作用:使能TIM4组寄存器
地址:0x5000000 + 0xA00 = 0x50000A00
伪代码:RCC_MP_APB1ENSETR [2] = 1
四,分析GPIO章节寄存器
1,GPIOx_MODER寄存器
作用:设置GPIOB引脚模式为复用功能模式(共四种:输入,输出,复用,模拟)
地址:0x50003000 + 0x00 = 0x50003000
操作:GPIOB_MODER [13:12] = 10
2,GPIOx_AFRL寄存器
作用:设置GPIOB引脚复用功能为TIM4_CH1功能
地址:0x50003000 + 0x20 = 0x50003020
伪代码:GPIOB_AFRL [27:24] = 0010 (复用功能 根据 Pinouts, pin description and alternate functions章节确定要给定的值)
五,分析TIM4章节
1,概述:
1,自动重载计数器,可编程分频器
2,输出方波
3,定时器预分频器,RCC时钟控制器预分频器
4,独立通道
2,特点:

1,16位递增,递减,递增/递减自动重载计数器
2,递增,递减:边沿对齐模式
3,递增/递减:中心对齐模式
计数方式:
例:递增计数器:驱动递增计数器时钟信号,每来一个时钟周期,计数器中的值进行加1操作,加到和递增计数器中的值相等以后,从0开始,开启下一个时钟周期
3.内部框图

1,系统提供时钟源209MHz,通过PSC(prescaler)预分频器分频,分频值为209分频(自定义)
2,定时器启动后,自动重载计数器ARR(Auto-reload register)中的值会自动加载到递减计数器CNT(counter)中
3,时钟信号驱动递减计数器进行工作,一个时钟周期内,计数器中数字连续减1操作,直到减到0后,自动重载计数器(ARR)中的值自动加载到递减计数器中,开启下一个时钟周期
4,捕获 / 比较寄存器 CCR(Capture / Compare 1register)
作用: 1,产生PWM方波
2,当递减计数器(CNT)中的值和捕获比较寄存器(CCR)中的值相等之后,电平会发生翻转
5,分频工作原理

CK_PSC:系统提供的时钟源
CEN:使能信号
Timerclock = CK_CNT:计数器时钟
Counter register :计数器寄存器
Update event(UEV):更新事件
Prescaler control register:预分频控制寄存器
Prescaler buffer:分频器缓冲区
Prescaler counter:分频器计数器
TIMx_CR1寄存器中ARPE的值会影响自动重载计数器加载,=0,立即加载, =1,下一时钟周期加载
6,分析TIM4寄存器
1,分析TIMx_CR1寄存器
作用:初始化寄存器相关操作
地址:0x40002000 + 0x00 = 0x40002000
伪代码:
TIM4_CR1[7] = 1 ==== 设置自动重载预加载寄存器(ARR)使能
TIM4_CR1[6:5] = 00 ==== 边沿对齐模式(CNT采用递减模式,边沿对齐)
TIM4_CR1[4] = 1 ==== 设置计数器CNT设置为递减计数方式
TIM4_CR1[0] = 1 ==== 设置计数器CNT使能
2,分析TIMx_CCMR1寄存器
作用:配置比较捕获寄存器
地址:0x40002000 + 0x18 = 0x40002018
伪操作:TIM4_CCMR1 [16][6:4] = 0110 ==== 设置通道1比较捕获模式为PWM模式
TIM4_CCMR1 [3] = 1 ==== 设置捕获 / 比较寄存器预加载使能
TIM4_CCMR1 [1:0] = 00 ==== 设置输出通道为通道1
3,分析TIMx_CCER寄存器
作用:设置比较捕获寄存器(CCR)默认输出极性
地址:0x40002000 + 0x20 = 0x40002020
伪代码:TIM4_CCER [3][1] = 00 / 01 ==== 设置比较捕获寄存器,默认输出极性高/低电平(自定义)
TIM_CCER [0] = 1 ==== 设置比较捕获寄存器输出使能
4,分析TIMx_PSC寄存器
作用:设置系统时钟分频值
地址:0x40002000 + 0x28 = 0x40002028
伪代码:TIM4_PSC = 209 - 1 (自定义)
5,分析TIMx_ARR寄存器
作用:设置自动重载计数器(ARR)中的的值
地址:0x40002000 + 0x2C = 0x4000202C
伪代码:TIM4_ARR = 1000(自定义)
6,分析TIMx_CCR1寄存器
作用:设置捕获比较器(CCR)中的值
地址:0x40002000 + 0x34 = 0x40002034
伪代码:TIM4_CCR1 = 300(自定义)
六,风扇,马达
风扇和马达根据网络编号,通道和对应引脚编号更改寄存器中的值即可
另:马达不用设置CR1寄存器边沿对齐模式和递减计数方式
风扇和马达多一个寄存器BDTR
TIMx_BDTR
作用:主输出使能
地址:0x40002000 + 0x44 = 0x40002044
伪代码:TIMx_BDTR [15] = 1(x根据网络编号)
相关文章:
cortex-A7核PWM实验--STM32MP157
实验目的:驱动风扇,蜂鸣器,马达进行工作 目录 一,PWM相关概念 有源蜂鸣器和无源蜂鸣器 二,分析电路图,框图 三,分析RCC章节 1,确定总线连接 2,根据总线内容确定基…...
电工-学习电工有哪些好处
学习电工有哪些好处?在哪学习电工? 学习电工有哪些好处?在哪学习电工?学习电工可以做什么?优势有哪些? 学习电工可以做什么?学习电工有哪些好处? 就业去向:可在企业单位…...
Redis内存空间预估与内存优化策略:保障数据安全与性能的架构实践AIGC/AI绘画/chatGPT/SD/MJ
推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间 https://dr…...
Pandas数据分析教程-数据处理
pandas-02-数据清洗&预处理 B. 数据处理1. 重复值处理2. map逐元素转换3. 值替换4. 改变索引值5. 离散化与分箱6. 检测过滤异常值7. 排列与随机采样8. 根据类别生成one-hot向量,向量化文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤…...
php 多维数组排序,根据某一列排序(array_multisort()和array_column()联用)
array_multisort()和array_column()联用效果直接叠满,11>100 先来看下两个函数的介绍和用法 array_column(): 一般模式,不需要其中字段作为id,只需要提取val值 <?php // 可能从数据库中返回数组 $a [[id > 5698, first_name > Peter, last_name > G…...
框架分析(5)-Django
框架分析(5)-Django 专栏介绍Django核心概念以及组件讲解模型(Model)视图(View)模板(Template)路由(URLconf)表单(Form)后台管理&…...
常见前端面试之VUE面试题汇总七
20. 对 vue 设计原则的理解 1.渐进式 JavaScript 框架:与其它大型框架不同的是,Vue 被设计 为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上 手,还便于与第三方库或既有项目整合。另一方面,当与现代化的…...
空时自适应处理用于机载雷达——空时处理基础知识(Matla代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
磁盘阵列/视频集中存储/安防监控视频智能分析平台新功能:安全帽/反光衣/安全带AI识别详解
人工智能技术已经越来越多地融入到视频监控领域中,近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能,该平台内置多种AI算法,可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍,支持口罩佩戴检…...
23款奔驰GLE450轿跑升级原厂外观暗夜套件,战斗感满满的
升级的方案基本都是替换原来车身部位的镀铬件,可能会有人问:“难道直接用改色膜贴黑不好吗?”如果是贴膜的话,第一个是颜色没有那么纯正,这些镀铬件贴黑的技术难度先抛开不说,即使贴上去了,那过…...
win10系统rust串口通信实现
一、用cargo创建新工程 命令:cargo new comport use std::env; use std::{thread, time}; use serialport::{DataBits, StopBits, Parity, FlowControl}; use std::io::{self, Read, Write}; use std::time::Duration;fn main() -> io::Result<()> {let m…...
新生代与老年代
在Java虚拟机(JVM)中,内存被划分为多个不同的区域,其中包括新生代(Young Generation)和老年代(Old Generation)。 新生代是用于存储新创建的对象的区域。大多数对象在创建后很快就变…...
Microsoft正在将Python引入Excel
Excel和Python这两个世界正在碰撞,这要归功于Microsoft的新集成,以促进数据分析和可视化 Microsoft正在将流行的编程语言Python引入Excel。该功能的公共预览版现已推出,允许Excel用户操作和分析来自Python的数据。 “您可以使用 Python 绘图…...
知识速递(六)|ChIP-seq分析要点集锦
书接上文组学知识速递(五)|ChIP-seq知多少?,当我们实验完成,拿到下机数据之后,我们最关心的就是,这个数据能不能用?所谓数据能不能用,其实我们会重点关注以下问题&#x…...
【附安装包】EViews 13.0安装教程|计量经济学|数据处理|建模分析
软件下载 软件:EViews版本:13.0语言:英文大小:369.46M安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baidu.com…...
Java 语言实现快速排序算法
【引言】 快速排序算法是一种常用且高效的排序算法。它通过选择一个基准元素,并将数组分割成两个子数组,一边存放比基准元素小的元素,另一边存放比基准元素大的元素。然后递归地对这两个子数组进行排序,最终达到整个数组有序的目的…...
Config: Git 环境搭建
...
最新AI系统ChatGPT网站程序源码/搭建教程/支持GPT4.0/Dall-E2绘画/支持MJ以图生图/H5端/自定义训练知识库
一、正文 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧!…...
leetcode 392. 判断子序列
2023.8.25 本题要判断子序列,可以使用动态规划来做,定义一个二维dp数组。 接下来就是常规的动态规划求解子序列的过程。 给出两种定义dp数组的方法。 二维bool型dp数组: class Solution { public:bool isSubsequence(string s, string t) …...
课程项目设计--spring security--认证管理功能--宿舍管理系统--springboot后端
写在前面: 还要实习,每次时间好少呀,进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
sipsak:SIP瑞士军刀!全参数详细教程!Kali Linux教程!
简介 sipsak 是一个面向会话初始协议 (SIP) 应用程序开发人员和管理员的小型命令行工具。它可以用于对 SIP 应用程序和设备进行一些简单的测试。 sipsak 是一款 SIP 压力和诊断实用程序。它通过 sip-uri 向服务器发送 SIP 请求,并检查收到的响应。它以以下模式之一…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
