TIM-输出比较(PWM)——STM32

news2024/12/25 2:37:13

TIM-输出比较——STM32

Oc (Output Compare) 输出比较
输出比较可以通过比较CNT与CCR寄存器值的关系,来对输出电平进行置1、置0或翻转的操作,用于输出一定频率和占空比的PWM波形
每个高级定时器和通用定时器都拥有4个输出比较通道高级定时器的前3个通道额外拥有死区生成和互补输出的功能

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一步,RCC开启时钟,把我们要用的TIM外设和GPIO外设的时钟打开
第二步,配置时基单元,包括这前面的时钟源选择
第三步,配置输出比较单元,里面包括这个CCR的值、输出比较模式、极性选择、输出使能这些参数。
第四步,配置GPIO,把PWM对应的GPIO口,初始化为复用推挽输出的配置。
第五步,就是运行控制了。启动计数器,这样就能输出PWM了。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
预装功能就是影子寄存器(和缓冲寄存器类似)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
带个N的就是高级定时器里互补通道的配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果你不想把所有成员都列一遍赋值,那就可以先用Stiuctlnit赋一个初始值,再更改你想改的值就行了,
在这里插入图片描述
只有把GPIO设置成复用推挽输出
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#include "stm32f10x.h"                  // Device header

void PWM_Inint(void)
{
	//第一步开启时钟,初始化RCC,选择TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	//设置输出PWM的GPIO端口
		//使能GPIOA的时钟 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	
	//GPIOA模式初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//第二步选择时基单元的时钟,选择内部时钟,选择TIM2
	TIM_InternalClockConfig(TIM2);
	
	//第三步配置时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;//时钟分频系数 1分频
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;//计数的模式 向上计数
	//频率为1KHz,占空比为50%的PWM波形
	//计数器溢出频率:CK CNT_OV = CKCNT /(ARR + 1)= CK PSC /(PSC + 1)/(ARR +1)
	//配置定时为1s,则CK CNT_OV=1;CKCNT=72MHz=72000000;
	TIM_TimeBaseInitStruct.TIM_Period = 100 - 1;//周期,ARR自动重装器的值 范围0~65536
	TIM_TimeBaseInitStruct.TIM_Prescaler = 720 - 1;//PSC预分频器的值 范围0~65536
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0; //重复计数器的值 高级计数器才有
	TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
	
	//第四步配置输出中断
	TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//更新中断
	
	//清除中断标志位,能够避免刚初始化完就进中断的问题
	TIM_ClearFlag(TIM2,TIM_IT_Update);
	
	//第五步,配置输出比较单元,里面包括这个CCR的值、输出比较模式、极性选择、输出使能这些参数。
	TIM_OCInitTypeDef TIM_OCInitStruct;
	//先对结构体中的全部成员赋予初始值
	TIM_OCStructInit(&TIM_OCInitStruct);
	//在修改需要用到成员的值
	TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1;//设置输出比较的模式
	TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High;//设置输出比较的极性
	TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable;//设置输出比较的使能
	TIM_OCInitStruct.TIM_Pulse = 0;//50;//用来设置CCR 
	TIM_OC1Init(TIM2,&TIM_OCInitStruct);

	//第六步,运行控制
	TIM_Cmd(TIM2,ENABLE);
}

//让LED呈现呼吸灯的效果,那就是不断更改CCR的值就行了
void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2,Compare);

}

#ifndef _PWM_H
#define _PWM_H

void PWM_Inint(void);
void PWM_SetCompare1(uint16_t Compare);

#endif

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "KEY.h"
#include "PWM.h"

uint8_t i;//定义一个全局变量

int main(void)
{

	
	while(1)
	{
			for(i=0;i<100;i++)
			{
				PWM_SetCompare1(i);
				Delay_ms(10);
			}
			
			for(i=0;i<100;i++)
			{
				PWM_SetCompare1(100-i);
				Delay_ms(10);
			}
	}
}

引脚重映射

在这里插入图片描述
需要用到AFIO。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果你想让PA15、PB3、PB4这三个引脚当做GPIO来使用的话;
在这里插入图片描述
如果你想重映射定时器或者其他外设的复用引脚
在这里插入图片描述

	//第一步开启时钟,初始化RCC,选择TIM2
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	
		//实现重映射,将TIM2_CH2通道重映射到PA15
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//打开AFIO时钟
	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2,ENABLE);
	//关闭PA15端口的复用
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
	
	//设置输出PWM的GPIO端口
		//使能GPIOA的时钟 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);	
	//GPIOA模式初始化
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;//复用推挽输出
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15;//GPIO_Pin_0;//将PA0改到PA15了
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct);

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

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

相关文章

2023年股票质押违约处置研究报告

第一章 行业概况 1.1 产品定义 股票质押违约处置是指在股票质押融资中&#xff0c;当质押人&#xff08;股票持有者&#xff09;无法按照约定履行还款义务时&#xff0c;质权人&#xff08;通常为金融机构&#xff09;对质押股票进行处置的一系列活动。这个行业涉及到多个领域…

DAY 55 mysql数据库管理

常用的数据类型&#xff1a; 类型说明int整型&#xff0c;用于定义整数类型的数据fload单精度浮点4字节32位&#xff0c;准确表示到小数点后六位double双精度浮点8字节64位char固定长度的字符类型&#xff0c;用于定义字符类型数据。varchar可变长度的字符类型text文本image图…

Python基础合集 练习23 (错误与异常语句处理3)

‘’’ raise语句 raise[ExceptionName[(reason)]] 其中ExceptionName[(reason)]是可选参数用来指定抛出异常名称和原因,如果省略该参数,就会原样输出当前的错误 ‘’’ 在下面程序中,使用raise语句抛出ValueError异常 def num_calu(): book int(input(输入图书数量: )) stu…

探秘C语言:位运算符的奥秘

本篇博客会讲解C语言中的6个位操作符&#xff1a;按位取反(~)、按位与(&)、按位或(|)、按位异或(^)、左移(<<)、右移(>>)。这6个操作符都是操作整数的二进制位的。在学习这6个位操作符之前&#xff0c;大家需要先掌握“整数在内存中的存储”这个知识点&#xf…

数电中需要注意的问题

逻辑函数表达式之间的相互转换 &#xff08;更多请详见PPT&#xff09;若题目要求用&#xff1a; 与非门实现逻辑函数&#xff0c;则画卡诺图圈出值为1的然后化简 或非门实现逻辑函数&#xff0c;则画卡诺图圈出值为0的然后化简 与或非门实现逻辑函数&#xff0c;则画卡诺图圈…

一文了解获得 Zebec Labs 投资的 Coral Finance,空投计划或在不久推出

在前不久&#xff0c;Zebec Labs宣布对链上衍生品协议Coral Finance进行150万美元的投资&#xff0c;以帮助该协议完成早期启动并&#xff0c;并在后续持续的为其提供孵化支持。Coral Finance将在不久部署在Nautilus Chain主网上。据了解&#xff0c;Coral Finance是Nautilus C…

51单片机电路基础

一.电平特性 单片机是一种数字集成芯片&#xff0c;数字电路中只有两种电平:高电平和低电平。 高电平: 5V低电平: 0V TTL电平信号被利用的最多是因为通常数据表示采用二进制&#xff0c;5V等价于逻辑“1”&#xff0c;0V等价于逻辑“0”。 TTL电平规定高电平输出电压>2.…

博客系统的后端设计(一) - 准备工作与设计数据库

文章目录 准备工作1. 创建一个 Maven 项目2. 引入依赖3. 创建目录结构 设计数据库 这次开始进行博客系统后端的进度&#xff0c;本篇博客讲的是 准备工作和 设计数据库两个步骤。 准备工作 1. 创建一个 Maven 项目 2. 引入依赖 在地址栏中搜素 https://mvnrepository.com/&a…

【微信小程序开发】【SpringBoot】解决真机调试中无法向后台请求数据的问题

前言 最近做了一个微信小程序SpringBoot的一个项目&#xff0c;在编译器中用localhost请求后台可以实现&#xff0c;但是在手机上进行真机调试就无法正确的从后台请求数据&#xff0c;问题已经解决&#xff0c;下面是我的一点经验 获取本机的ip地址&#xff08;ipv4&#xff09…

解决电脑由于找不到vcruntime140_1.dll,无法继续执行代码的方法

vcruntime140_1.dll是微软Visual C程序的运行库文件之一。它包含一些程序所需的函数和其他重要数据&#xff0c;这些程序通常是用Visual C编写的。如果缺少这个文件&#xff0c;可能会导致一些程序无法正常运行&#xff0c;电脑提示vcruntime140_1.dll无法继续执行代码&#xf…

C++三大特性—继承“名字搜索与默认成员函数”

继承中的类的作用域 每个类定义自己的作用域&#xff0c;在这个作用域中定义自己的成员。当存在继承关系时&#xff0c;派生类的作用域嵌套在基类的作用域之中。如果一个名字在派生类的作用域中无法解析&#xff0c;那么编译器将继续在外层的基类中寻找该名字的定义。 继承关系…

next.js博客搭建_初始化next项目(第一步)

文章目录 ⭐前言⭐next初始化TypeScript 开发项目安装react的ui框架&#xff08;tDesign&#xff09;设计布局 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本期给大家分享next项目搭建博客的开始。 背景 因为我的博客网站https://yongma16.xyz是基于vue2搭建的&am…

Centos7快速安装Kibana并连接ES使用

Elasticsearch 提供了一个名为 Kibana 的官方可视化界面。Kibana 是一个开源的数据可视化和管理工具&#xff0c;用于 Elasticsearch。它提供了丰富的功能&#xff0c;如仪表板、图表、地图等&#xff0c;帮助您更好地理解、搜索和可视化存储在 Elasticsearch 中的数据。 在 C…

营收、利润增速第一!海尔智家为何领跑?

“企业只有保持领先的能力&#xff0c;才有可能取得经济成果。” 管理学大师德鲁克曾如此强调。所谓“领先”&#xff0c;就是独一无二的、有价值的东西。利润&#xff0c;是企业在某个领域取得领先优势后&#xff0c;必然获得的回报。 这种“领先优势”&#xff0c;在各行业…

gpt4入口在哪里-怎么使用chatGPT4

Chat GPT 4.0 PLUS详细介绍 Chat GPT 4.0 PLUS是一款基于人工智能技术的自然语言处理模型&#xff0c;它是目前最先进的Chat GPT系列中的一员。Chat GPT 4.0 PLUS具有极高的精度和稳定性&#xff0c;可以帮助用户实现高品质、高效率的自然语言处理体验。下面详细介绍Chat GPT 4…

Python小姿势 - # Python爬虫技术

Python爬虫技术 许多人认为爬虫技术只能用于网页内容抓取&#xff0c;其实爬虫技术还可以用于更多的场景&#xff0c;比如数据挖掘、信息处理等。在这里&#xff0c;我们就来学习如何使用Python来编写爬虫。 首先&#xff0c;我们需要准备一个Python爬虫的开发环境。Python是一…

嵌入式Linux底层系统开发 +系统移植+内核文件系统(基础)

嵌入式Linux系统移植要点&#xff1a; 搭建交叉编译开发环境bootloader的选择和移植kernel的配置、编译、移植和调试根文件系统的制作 前两个要点通常芯片厂家提供。后边两个要点是公司的工作重点。 学习方法&#xff1a;先整体后局部&#xff0c;层层推进 如何编译—>如何…

idea修改 项目代码,浏览器页面不生效 解决方案

使用快捷键ctrl shift delete&#xff0c;清理浏览器缓存 1、问题描述 idea修改前端项目代码&#xff0c;运行谷歌浏览器不起作用。 我也试过 rebuild project, 重启idea&#xff0c;等方法都不管用。 再次运行谷歌浏览器&#xff0c;还是没有变化。 2、尝试了以下方法&am…

ElasticSearch学习随笔之分词算法

ElasticSearch 1、ElasticSearch学习随笔之基础介绍 2、ElasticSearch学习随笔之简单操作 3、ElasticSearch学习随笔之java api 操作 4、ElasticSearch学习随笔之SpringBoot Starter 操作 5、ElasticSearch学习随笔之嵌套操作 6、ElasticSearch学习随笔之分词算法 ElasticSea…

JUC之Java内置锁的核心原理

文章目录 JUC之Java内置锁的核心原理Java对象结构对象头对象体对齐字节 Mark Word的结构信息64位Mark Word的构成 偏向锁偏向锁的设置偏向锁的重偏向偏向锁的撤销偏向锁的膨胀 轻量级锁执行过程轻量级锁的分类普通自旋锁自适应自旋锁 重量级锁偏向锁、轻量级锁与重量级锁的对比…