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.rhkb.cn/news/105731.html

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

相关文章

Python案例|Matplotlib库实现的数据分析

数据展示是数据分析和挖掘中的重要环节&#xff0c;通过图形的形式可以直观、清晰地呈现数据内在的规律。 本文所用数据采用上一篇案例实现后的数据表&#xff0c;数据存储在newbj_lianJia.csv文件中&#xff0c;具体代码如下。 import pandas as pd #导入库 import matplot…

Linux安装Redis数据库,无需公网IP实现远程连接

文章目录 1. Linux(centos8)安装redis数据库2. 配置redis数据库3. 内网穿透3.1 安装cpolar内网穿透3.2 创建隧道映射本地端口 4. 配置固定TCP端口地址4.1 保留一个固定tcp地址4.2 配置固定TCP地址4.3 使用固定的tcp地址连接 Redis作为一款高速缓存的key value键值对的数据库,在…

AI 时代,程序员无需焦虑 | 《服务端开发:技术、方法与实用解决方案》(文末送书福利4.0)

文章目录 &#x1f4cb;前言&#x1f3af;程序员会被 AI 取代么&#xff1f;&#x1f3af;服务端开发尚难被 AI 取代&#x1f3af; 服务端开发何去何从&#xff1f;&#x1f3af;业界首部体系化、全景式解读服务端开发的著作&#x1f4ac;读者对象&#x1f4da;本书优势&#x…

Vue3学习

Proxy和definedProperty对比 Proxy 作为新标准将受到浏览器厂商重点持续的性能优化。Proxy 不兼容IE&#xff0c;也没有 polyfill, defineProperty 能支持到IE9。Proxy 能观察的类型比 defineProperty 更丰富。Object.definedProperty 是劫持对象的属性&#xff0c;新增元素需…

FPGA应用于图像处理

FPGA应用于图像处理 FPGA&#xff08;Field-Programmable Gate Array&#xff09;直译过来就是现场可编程门阵列。是一种可以编程的逻辑器件&#xff0c;具有高度的灵活性&#xff0c;可以根据具体需求就像编程来实现不同的功能。 FPGA器件属于专用的集成电流中的一种半定制电…

适配小程序隐私保护指引设置

由于小程序发布了一个公告&#xff0c;那么接下来就是怎么改简单的问题了。毕竟不太想大的改动历史上的代码。尽量简单的适配隐私策略就可以了。 整体思路也是参考现在App普遍的启动就让用户同意隐私策略&#xff0c;不同意不让用&#xff0c;同意了之后才能够继续使用。 公告…

SpringBoot入门篇1 - 简介和工程创建

目录 SpringBoot是由Pivotal团队提供的全新框架&#xff0c; 其设计目的是用来简化Spring应用的初始搭建以及开发过程。 1.创建入门工程案例 ①创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 ②开发控制器类 controller/BookController.jav…

第P2周:彩色图片识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 我的环境&#xff1a; 语言环境&#xff1a;Python3.10.7编译器&#xff1a;VScode深度学习环境&#xff1a;TensorFlow 2.13.0 一、前期工作&#xff1a; …

2023京东酒类市场数据分析(京东数据开放平台)

根据鲸参谋平台的数据统计&#xff0c;今年7月份京东平台酒类环比集体下滑&#xff0c;接下来我们一起来看白酒、啤酒、葡萄酒的详情数据。 首先来看白酒市场。 鲸参谋数据显示&#xff0c;7月份京东平台白酒的销量为210万&#xff0c;环比下滑约49%&#xff1b;销售额将近19…

前端工程化之规范化

规范化是我们践行前端工程化中重要的一部分。 为什么要有规范化标准 俗话说&#xff0c;无规矩不成方圆&#xff0c;尤其是在开发行业中&#xff0c;更是要有严谨的工作态度&#xff0c;我们都知道大多数软件开发都不是一个人的工作&#xff0c;都是需要多人协同的&#xff0…

2023MySQL+MyBatis知识点整理

文章目录 主键 外键 的区别&#xff1f;什么是范式&#xff1f;什么是反范式&#xff1f;什么是事务&#xff1f;MySQL事务隔离级别&#xff1f;MySQL事务默认提交模式&#xff1f;MySQL中int(1)和int(10)的区别MySQL 浮点数会丢失精度吗&#xff1f;MySQL支持哪几种时间类型&a…

矢量调制分析基础

前言 本文介绍VSA 的矢量调制分析和数字调制分析测量能力。某些扫频调谐频谱分析仪也能通过使用另外的数字无线专用软件来提供数字调制分析。然而&#xff0c;VSA 通常在调制格式和解调算法配置等方面提供更大的测量灵活性&#xff0c;并提供更多的数据结果和轨迹轨迹显示。本…

nginx(七十八)nginx配置http2

一 ngx_http_v2模块 1、本文不讲解HTTP2的知识2、只讲解nginx中如何配置HTTP2 ① 前置条件 1、openssl的版本必须在1.0.2e及以上2、开启https加密,目前http2.0只支持开启了https的网站编译选项&#xff1a;--with-http_ssl_module --with-http_v2_module 特点&#xff1a…

W6100-EVB-PICO进行UDP组播数据回环测试(九)

前言 上一章我们用我们的开发板作为UDP客户端连接服务器进行数据回环测试&#xff0c;那么本章我们进行UDP组播数据回环测试。 什么是UDP组播&#xff1f; 组播是主机间一对多的通讯模式&#xff0c; 组播是一种允许一个或多个组播源发送同一报文到多个接收者的技术。组播源将…

【文心一言】如何申请获得体验资格,并简单使用它的强大功能

目录 一、文心一言1.1、它能做什么1.2、技术特点1.3、申请方法 二、功能体验2.1、文心一言2.2、写冒泡排序代码 测试代码2.3、画一个爱心2.4、画一个星空 三、申请和通过3.1、申请时间3.2、通过时间 文心一言&#xff0c;国内首个大型人工智能对话模型&#xff0c;发布已经快一…

AndroidStudio升级后总是Read Time Out的解决办法

AndroidStudio升级后在gradle的时候总是Time out&#xff0c;遇到过多次&#xff0c;总结一下解决办法 1、gradle下载超时 在工程目录../gradle/wrapper/gradle-wrapper.properties中找到gradle版本的下载链接&#xff0c;如下图&#xff1a; 将其复制到迅雷里下载&#xff0…

让eslint的错误信息显示在项目界面上

1.需求描述 效果如下 让eslint中的错误&#xff0c;显示在项目界面上 2.问题解决 1.安装 vite-plugin-eslint 插件 npm install vite-plugin-eslint --save-dev2.配置插件 // vite.config.js import { defineConfig } from vite import vue from vitejs/plugin-vue import e…

MySQL高级篇——MySQL架构篇1(Linux下MySQL8的安装与使用)

目录 0 安装前0.1 Linux系统及工具的准备0.2 查看是否安装过MySQL0.3 MySQL的卸载 1 MySQL8的Linux版安装1.1 MySQL的4大版本1.2 下载MySQL指定版本1.3 CentOS7下检查MySQL依赖1.4 CentOS7下MySQL安装过程 2 MySQL登录2.1 首次登录2.2 修改密码2.3 设置远程登录 3 MySQL 8 的密…

【Linux】动态库和静态库

动态库和静态库 软链接硬链接硬链接要注意 自定义实现一个静态库(.a)解决、使用方法静态库的内部加载过程 自定义实现一个动态库&#xff08;.so&#xff09;动态库加载过程 静态库和动态库的特点 软链接 命令:ln -s 源文件名 目标文件名 软链接是独立连接文件的&#xff0c;他…

【从零学习python 】69. 网络通信及IP地址分类解析

文章目录 网络通信的概念IP地址IP地址的分类A类地址B类地址C类地址D类地址E类地址私有地址 进阶案例 网络通信的概念 简单来说&#xff0c;网络是用物理链路将各个孤立的工作站或主机相连在一起&#xff0c;组成数据链路&#xff0c;从而达到资源共享和通信的目的。 使用网络…