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根据网络编号)

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

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

相关文章

媒体服务器与视频服务器有什么区别

媒体服务器与视频服务器有什么区别 流媒体服务器用在远程教育&#xff0c;视频点播、网络电台、网络视频等方面。 直播过程中就需要使用流媒体服务器&#xff0c;一个完整的直播过程&#xff0c;包括采集、处理、编码、封包、推流、传输、转码、分发、解码、播放等过程&#xf…

Flink CDC学习笔记

第一章 CDC简介 1.1 什么是CDC ​ CDC (Change Data Capture 变更数据获取&#xff09;的简称。核心思想就是&#xff0c;检测并获取数据库的变动&#xff08;增删查改&#xff09;&#xff0c;将这些变更按发生的顺序记录下来&#xff0c;写入到消息中间件以供其它服务进行订…

无涯教程-机器学习 - 数据统计

在进行机器学习项目时&#xff0c;通常无涯教程会忽略两个最重要的部分&#xff0c;分别是 数学 和 数据 。这是因为知道ML是一种数据驱动的方法&#xff0c;并且ML模型只会产生与提供给它的数据一样好的或坏的输出。 在上一章中&#xff0c;讨论了如何将CSV数据上传到ML项目中…

【JSDocvscode】使用JSDoc、在vscode中开启node调试、使用vscode编写运行Python程序

JSDoc JSDoc是JavaScript的一种注释语法&#xff0c;同时通过JSDoc注释也可以规避js弱类型中不进行代码提示的问题 图形展示JSDoc的效果&#xff1a; 上述没有进行JSDoc&#xff0c;然后我们a点什么 是没有任何提示的 上述就是加上 JSDoc的效果 常用的 vscode 其实内置了 js…

倒计时:心理的镇静剂还是焦虑的火种?

倒计时&#xff1a;心理的镇静剂还是焦虑的火种&#xff1f; 目录 引言倒计时的作用与原理倒计时的双面性&#xff1a;缓解焦虑还是引发焦虑&#xff1f;如何正确使用倒计时结论 引言 在我们的日常生活和工作中&#xff0c;倒计时被广泛的应用。无论是在网购的抢购活动中&a…

每日后端面试5题 第八天

1.UDP和TCP协议的区别 1.UDP无连接&#xff0c;速度快&#xff0c;安全性低&#xff0c;适合高速传输、实时广播通信等。 2.TCP面向连接&#xff0c;速度慢&#xff0c;安全性高&#xff0c;适合传输质量要求高、大文件等的传输&#xff0c;比如邮件发送等。 &#xff08;还…

npm 创建 node.js 项目

package.json重要说明 package.json是创建任何node.js项目必须要有的一个文件。 因为在package.json文件中&#xff0c;有详细的项目描述&#xff0c; 包括&#xff1a; (1)项目名称&#xff1a;name (2)版本&#xff1a;version (3)依赖文件&#xff1a;dependencies 等…

flutter windows编译错误 flutter_assemble.vcxproj

flutter 编译windows是出现错误。 [ 44 ms] d:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(248,5): error MSB8066: &#xfffd;&#xfffd;E:\work\kkview_kuaichuan\kkview_kuaichuan\build\windows\C…

Python爬虫框架之快速抓取互联网数据详解

概要 Python爬虫框架是一个能够帮助我们快速抓取互联网数据的工具。在互联网时代&#xff0c;信息爆炸式增长&#xff0c;人们越来越需要一种快速获取信息的方式。而Python爬虫框架就能够帮助我们完成这个任务&#xff0c;它可以帮助我们快速地从互联网上抓取各种数据&#xf…

MySQL数据库学习【基础篇】

&#x1f4c3;基础篇 下方链接使用科学上网速度可能会更加快一点哦&#xff01; 请点击查看数据库MySQL笔记大全 通用语法及分类 DDL: 数据定义语言&#xff0c;用来定义数据库对象&#xff08;数据库、表、字段&#xff09;DML: 数据操作语言&#xff0c;用来对数据库表中的…

【Java架构-包管理工具】-Maven进阶(二)

本文摘要 Maven作为Java后端使用频率非常高的一款依赖管理工具&#xff0c;在此咱们由浅入深&#xff0c;分三篇文章&#xff08;Maven基础、Maven进阶、私服搭建&#xff09;来深入学习Maven&#xff0c;此篇为开篇主要介绍Maven进阶知识&#xff0c;包含坐标、依赖、仓库、生…

8.29一日总结(uni-app)

1.UNI-APP课件uniapp (notion.site)https://secretive-echo-5b2.notion.site/uniapp-4963799e330b4af4b842ccee6e2f62e8 2.链接 a.UNI-APP官网 uni-app快速上手 | uni-app官网 (dcloud.net.cn) b.安装HBuilder: HBuilderX-高效极客技巧 (dcloud.io) b.微信小程序网址:微信开…

vue3下的密码输入框(antdesignvue)

参考:vue下的密码输入框 注意:这是个半成品,有些问题(输入到第6位的时候会往后窜出来一个空白框、光标位置会在数字前面),建议不采用下面这种方式,用另外的(画六个input框更方便) 效果预览 实现思路 制作6个小的正方形div 用一个input覆盖在6个div上 给input设置透明(…

2023年下半年抖音小店运营全攻略

每年618过后&#xff0c;7、8月份&#xff0c;都是电商淡季。 尤其是服装类目&#xff0c;很多商家都是直接躺平。 但是到了9月份&#xff0c;一是换季&#xff0c;二是碰上开学季&#xff0c;电商旺季就开始来了&#xff01; 尤其是服装、文具、户外运营这些类目&#xff0…

行业报告|3D感知技术快速发展,打造“机器之眼”,助推各行业加速升级!

原创 | 文 BFT机器人 01 3D视觉感知全栈式平台&#xff0c;硬核实力蓄势待发 1.1 3D视觉感知为“机器之眼”&#xff0c;未来市场空间广阔 3D视觉感知技术充分弥补了2D成像技术的以上不足&#xff0c;可获取空间几何尺寸信息。 过去数十年2D成像技术蓬勃发展&#xff0c;分辨…

flume系列之:记录一次消费大量Debezium数据,数据包含dml语句比较大,造成数据堆积在channel的解决方法

flume系列之:记录一次消费大量Debezium数据,数据包含dml语句比较大,造成数据堆积在channel的解决方法 一、背景二、相关技术博客三、flume层面解决方法四、debezium数据采集层面解决方法一、背景 Debezium采集了大量的数据,数据包含DMl语句,数据本身比较大。flume消费了大…

Mybatis insert返回主键id

个人公众号&#x1f415;已经开通了&#xff0c;欢迎关注&#xff01; 面试宝典公众号&#xff1a;源1024 第一种方式&#xff1a;添加selectKey标签属性 useGeneratedKeys设置为 true &#xff0c;表示如果插入的表id以自增列为主键&#xff0c;则允许 JDBC 支持自动生成主键…

Python 操作 Redis 数据库介绍

Redis 作为常用的 NoSql 数据库&#xff0c;主要用于缓存数据&#xff0c;提高数据读取效率&#xff0c;那在 Python 中应该如果连接和操作 Redis 呢&#xff1f;今天就为大概简单介绍下&#xff0c;在 Python 中操作 Redis 常用命令。 安装 redis 首先还是需要先安装 redis …

mysql 基本操作2

目录 Update 将小白龙的数学成绩跟新为 80 分 将总成绩后三名的数学成绩30分 Delete 删除沙悟净的成绩 删除倒数第一名的成绩 Truncate 聚合函数 count 查看员工表里面的人数 查看男女员工的个数 查看男员工占所有员工个数的比例 sum 计算所有员工的工资和 计算各…

-9501 MAL系统没有配置或者服务器不是企业版(dm8达梦数据库)

dm8达梦数据库 -9501 MAL系统没有配置或者服务器不是企业版&#xff09; 环境介绍1 环境检查2 问题原因 环境介绍 搭建主备集群时&#xff0c;遇到报错-9501 MAL系统没有配置或者服务器不是企业版 1 环境检查 检查dmmal.ini配置文件权限正确 dmdba:dinstall&#xff0c;内容正…