当前位置: 首页 > news >正文

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

实验目的&#xff1a;驱动风扇&#xff0c;蜂鸣器&#xff0c;马达进行工作 目录 一&#xff0c;PWM相关概念 有源蜂鸣器和无源蜂鸣器 二&#xff0c;分析电路图&#xff0c;框图 三&#xff0c;分析RCC章节 1&#xff0c;确定总线连接 2&#xff0c;根据总线内容确定基…...

电工-学习电工有哪些好处

学习电工有哪些好处&#xff1f;在哪学习电工&#xff1f; 学习电工有哪些好处&#xff1f;在哪学习电工&#xff1f;学习电工可以做什么&#xff1f;优势有哪些&#xff1f; 学习电工可以做什么&#xff1f;学习电工有哪些好处&#xff1f; 就业去向&#xff1a;可在企业单位…...

Redis内存空间预估与内存优化策略:保障数据安全与性能的架构实践AIGC/AI绘画/chatGPT/SD/MJ

推荐阅读 AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 资源分享 「java、python面试题」来自UC网盘app分享&#xff0c;打开手机app&#xff0c;额外获得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

框架分析&#xff08;5&#xff09;-Django 专栏介绍Django核心概念以及组件讲解模型&#xff08;Model&#xff09;视图&#xff08;View&#xff09;模板&#xff08;Template&#xff09;路由&#xff08;URLconf&#xff09;表单&#xff08;Form&#xff09;后台管理&…...

常见前端面试之VUE面试题汇总七

20. 对 vue 设计原则的理解 1.渐进式 JavaScript 框架&#xff1a;与其它大型框架不同的是&#xff0c;Vue 被设计 为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上 手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的…...

空时自适应处理用于机载雷达——空时处理基础知识(Matla代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

磁盘阵列/视频集中存储/安防监控视频智能分析平台新功能:安全帽/反光衣/安全带AI识别详解

人工智能技术已经越来越多地融入到视频监控领域中&#xff0c;近期我们也发布了基于AI智能视频云存储/安防监控视频AI智能分析平台的众多新功能&#xff0c;该平台内置多种AI算法&#xff0c;可对实时视频中的人脸、人体、物体等进行检测、跟踪与抓拍&#xff0c;支持口罩佩戴检…...

23款奔驰GLE450轿跑升级原厂外观暗夜套件,战斗感满满的

升级的方案基本都是替换原来车身部位的镀铬件&#xff0c;可能会有人问&#xff1a;“难道直接用改色膜贴黑不好吗&#xff1f;”如果是贴膜的话&#xff0c;第一个是颜色没有那么纯正&#xff0c;这些镀铬件贴黑的技术难度先抛开不说&#xff0c;即使贴上去了&#xff0c;那过…...

win10系统rust串口通信实现

一、用cargo创建新工程 命令&#xff1a;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虚拟机&#xff08;JVM&#xff09;中&#xff0c;内存被划分为多个不同的区域&#xff0c;其中包括新生代&#xff08;Young Generation&#xff09;和老年代&#xff08;Old Generation&#xff09;。 新生代是用于存储新创建的对象的区域。大多数对象在创建后很快就变…...

Microsoft正在将Python引入Excel

Excel和Python这两个世界正在碰撞&#xff0c;这要归功于Microsoft的新集成&#xff0c;以促进数据分析和可视化 Microsoft正在将流行的编程语言Python引入Excel。该功能的公共预览版现已推出&#xff0c;允许Excel用户操作和分析来自Python的数据。 “您可以使用 Python 绘图…...

知识速递(六)|ChIP-seq分析要点集锦

书接上文组学知识速递&#xff08;五&#xff09;|ChIP-seq知多少&#xff1f;&#xff0c;当我们实验完成&#xff0c;拿到下机数据之后&#xff0c;我们最关心的就是&#xff0c;这个数据能不能用&#xff1f;所谓数据能不能用&#xff0c;其实我们会重点关注以下问题&#x…...

【附安装包】EViews 13.0安装教程|计量经济学|数据处理|建模分析

软件下载 软件&#xff1a;EViews版本&#xff1a;13.0语言&#xff1a;英文大小&#xff1a;369.46M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨64位下载链接&#xff1a;https://pan.baidu.com…...

Java 语言实现快速排序算法

【引言】 快速排序算法是一种常用且高效的排序算法。它通过选择一个基准元素&#xff0c;并将数组分割成两个子数组&#xff0c;一边存放比基准元素小的元素&#xff0c;另一边存放比基准元素大的元素。然后递归地对这两个子数组进行排序&#xff0c;最终达到整个数组有序的目的…...

Config: Git 环境搭建

...

最新AI系统ChatGPT网站程序源码/搭建教程/支持GPT4.0/Dall-E2绘画/支持MJ以图生图/H5端/自定义训练知识库

一、正文 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…...

leetcode 392. 判断子序列

2023.8.25 本题要判断子序列&#xff0c;可以使用动态规划来做&#xff0c;定义一个二维dp数组。 接下来就是常规的动态规划求解子序列的过程。 给出两种定义dp数组的方法。 二维bool型dp数组&#xff1a; class Solution { public:bool isSubsequence(string s, string t) …...

课程项目设计--spring security--认证管理功能--宿舍管理系统--springboot后端

写在前面&#xff1a; 还要实习&#xff0c;每次时间好少呀&#xff0c;进度会比较慢一点 本文主要实现是用户管理相关功能。 前文项目建立 文章目录 验证码功能验证码配置验证码生成工具类添加依赖功能测试编写controller接口启动项目 security配置拦截器配置验证码拦截器 …...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

如何应对敏捷转型中的团队阻力

应对敏捷转型中的团队阻力需要明确沟通敏捷转型目的、提升团队参与感、提供充分的培训与支持、逐步推进敏捷实践、建立清晰的奖励和反馈机制。其中&#xff0c;明确沟通敏捷转型目的尤为关键&#xff0c;团队成员只有清晰理解转型背后的原因和利益&#xff0c;才能降低对变化的…...