stm32单片机个人学习笔记8(TIM输出比较)

news2024/11/17 15:42:35

前言

本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

一、输出比较

1.简介

2.输出比较通道

3.输出比较模式

二、PWM

1.基本结构

2.参数计算

三、舵机

1.简介

2.硬件电路

四、直流电机驱动(TB6612)

1.简介

2.硬件电路

 

VM为驱动电压输入端,这个电压一般与电机的额定电压一致

VCC为逻辑电平输入端,这个要和控制器的电源一致 

五、实例一(PWM驱动LED呼吸灯)

1.初始化时基单元

2.初始化输出比较

3.配置GPIO定时器输出PWM波的引脚(设置为复用推挽输出,因为该模式下才能由片上外设控制GPIO口,不然普通推挽输出下是由输出寄存器控制GPIO口)

PWM.c 

#include "stm32f10x.h"                  // Device header

void PWM_Init(void)
{
	//开启内部时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

	//GPIO口初始化
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
	
	//设置为内部时钟模式
	TIM_InternalClockConfig(TIM2);
	
	//时基单元初始化
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStructure.TIM_Period = 100 - 1;		//ARR
	TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1;		//PSC
	TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
	
	//输出比较模初始化
	TIM_OCInitTypeDef TIM_OCInitStructure;
	TIM_OCStructInit(&TIM_OCInitStructure);
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse = 0;						//CCR
	TIM_OC1Init(TIM2, &TIM_OCInitStructure);
	
	//运行控制,启动定时器
	TIM_Cmd(TIM2, ENABLE);
}

void PWM_SetCompare1(uint16_t Compare)
{
	TIM_SetCompare1(TIM2, Compare);
}

 main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "PWM.h"

uint8_t i;

int main(void)
{

	OLED_Init();
	PWM_Init();
	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引脚重映射功能 

1.开启AFIO时钟

2.选择重映射模式

	//AFIO重映射
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
	GPIO_PinRemapConfig(GPIO_PartialRemap1_TIM2, ENABLE);
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);

 在PWM.c中添加这一句即可

六、实例二(PWM驱动舵机) 

PWM.c模块不需要更改,只要封装一个舵机模块即可

Servo.c 

#include "stm32f10x.h"                  // Device header
#include "PWM.h"

void Servo_Init(void)
{
	PWM_Init();
}

void Servo_SetAngle(float Angle)
{
	PWM_SetCompare2(Angle/180*2000+500);
}

 七、实例三(PWM驱动直流电机)

Motor.c

根据速度的正负来判断电机正转还是反转

#include "stm32f10x.h"                  // Device header
#include "PWM.h"

void Motor_Init(void)
{
	PWM_Init();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void Motor_SetSpeed(int8_t Speed)
{
	if (Speed>=0)
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_4);
		GPIO_ResetBits(GPIOA,GPIO_Pin_5);
		PWM_SetCompare1(Speed);
	}
	else
	{
		GPIO_SetBits(GPIOA,GPIO_Pin_5);
		GPIO_ResetBits(GPIOA,GPIO_Pin_4);
		PWM_SetCompare1(-Speed);
	}
}

 main.c

按键可以用来调速度 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Motor.h"
#include "Key.h"

int8_t Speed;
uint8_t KeyNum;

int main(void)
{
	OLED_Init();
	Motor_Init();
	Key_Init();
	OLED_ShowString(1,1,"Speed:");
	
	while (1)
	{
		KeyNum = Key_GetNum();
		if (KeyNum == 1)
		{
			Speed += 20;
			if (Speed > 100)
			{
				Speed = -100;
			}
		}
		Motor_SetSpeed(Speed);
		OLED_ShowSignedNum(2,1,Speed,3);
	}
}

 

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

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

相关文章

第一批学Ai绘画的人,到底是怎么变现的?变现方式详细拆解!

Ai绘画技术发展到现在&#xff0c;已经有不少人通过这个渠道实现了变现。 我们在羡慕别人赚钱的同时&#xff0c;也应该从中不断地总结&#xff0c;思考哲轩变现方式的共同之处&#xff0c;在总结出找到属于自己的变现方式。 今天我就结合一些以往变现的成功案例&#xff0c;…

UnityShader 一种RGB分离效果

UnityShader 一种RGB分离效果 前言项目ASE截图 前言 看到一种RGB分离的Shader效果&#xff0c;记录一下。 项目 ASE截图

JavaEE: 探索网络世界的核心-IP协议

文章目录 IP 协议协议头格式IP 地址IP地址的数量限制解决IP不够用的问题 IP 地址的网段划分子网掩码ABCDE五类网络 特殊的 IP 地址 IP 协议 协议头格式 4位版本号: 只有两个取值,4(IPv4)和6(IPv6). IPv2,IPv5这些在实际中是没有的,可能是理论上/实验室中存在~ 4位首部长度: IP…

Adobe PR与AE的区别与联系(附网盘地址)

从事视频后期制作的小伙伴&#xff0c;对于PR&#xff08;Premiere&#xff09;和AE&#xff08;After Effects&#xff09;应该不会陌生。随着短视频的兴起&#xff0c;就连我们普通用户&#xff0c;拍摄完视频&#xff0c;都会去糟取精的剪辑一下&#xff0c;而PR正是一款功能…

【ESP32】Arduino开发 | I2C控制器+I2C主从收发例程

有关I2C控制器的详细介绍放在了IDF开发的文章中&#xff0c;跳转栏目目录可以找到对应的文章。 1. API Arduino启动时就已经实例化了两个I2C设备类&#xff0c;分别对应Wire和Wire1对象。 1.1 初始化 bool begin(int sda, int scl, uint32_t frequency0); // returns true, i…

安全教育培训小程序系统开发制作方案

安全教育培训小程序系统是为了提高公众的安全意识&#xff0c;普及安全知识&#xff0c;通过微信小程序的方式提供安全教育培训服务&#xff0c;帮助用户了解并掌握必要的安全防范措施。 一、目标用户 企业员工&#xff1a;各岗位员工&#xff0c;特别是IT部门、财务、行政等对…

08-Registry搭建docker私仓

08-Registry搭建docker私仓 Docker Registry Docker Registry是官方提供的工具&#xff0c;用于构建私有镜像仓库。 环境搭建 Docker Registry也是Docker Hub提供的一个镜像&#xff0c;可以直接拉取运行。 步骤&#xff1a; 拉取镜像 docker pull registry启动Docker R…

Html 转为 MarkDown

在 RAG 中,通常需要将 HTML 转为 Markdown,有很多第三方 API 都支持 HTML 的转换,本文使用一个代码文档的例子 https://www.joinquant.com/help/api/help#name:Stock,将聚宽 API 转为 Markdown。本文通过两种方式进行实现,使用收费和开源的解决方案。聚宽 API 格式转为 Ma…

接口自动化测试数据怎么来?涉及资金的接口如何在线上回归?

最近&#xff0c;有一位小伙伴提出一个问题&#xff1a; 目前在用pytest做接口自动化&#xff0c;因为一开始就想要把这套接口自动化用到生产环境&#xff0c;所以考虑的问题比较多一点点。 请问&#xff1a; 1.在做接口自动化的过程中&#xff0c;参数的数据应该从哪里来比较…

【virtuous】ron与rout的区别

ron:直流阻抗&#xff0c;大信号电阻 rout:交流阻抗&#xff0c;,小信号电阻

钰泰-ETA1611 升压IC

描述 ETA1611是一款高效升压转换器&#xff0c;内部集成了22V电源MOSEFT。它以的 1MHz 频率运行&#xff0c;允许使用小型外部组件&#xff0c;同时仍能提供效率。它可以驱动高达 2A 的输出电流。通过 EN 引脚集成的真正 PWM 调光功能可以进一步以数字方式设置更低的输出电压。…

SNIDA

saliency mask M n _n n​ obtained from SOD is pasted onto the background mask to obtain the mask M I ( s ) _{I(s)} I(s)​ of the input image I as a prior 辅助信息 作者未提供代码

Python体素化脑信息图混淆矩阵相似性指标评估

&#x1f3af;要点 使用相似性度量等算法类别学习评估大脑神经相似性。使用混淆矩阵分类器评估相似性&#xff0c;使用斯皮尔曼相关性关联相似度矩阵与混淆矩阵。特征化体素选择&#xff0c;优化相似性度量矩阵&#xff0c;用分类器近似大脑状态信息。将先验分布建模为二项分布…

FastAPI前置知识及快速入门

FastAPI fastapi&#xff0c;一个用于构建 API 的现代、快速&#xff08;高性能&#xff09;的web框架。 fastapi是建立在Starlette和Pydantic基础上的&#xff0c;Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包…

MyBatis——Plus——入门

常用注解 MyBatis——Plus怎么知道他是访问哪张表 常用配置

Codeforces Round 975 (Div. 2)

传送门&#xff1a;https://codeforces.com/contest/2019 B. All Pairs Segments 题意&#xff1a; 首先样例解释一下&#xff1a; 一共有&#xff1a;[1,2],[1,3],[1,5],[1,6],[1,7],[2,3],[2,5],[2,6],[2,7],[3,5],[3,6],[3,7],[5,6],[5,7],[6,7] 点 1&#xff0c;7 在5个…

Android SQLite的基本使用、生成Excel文件保存到本地

1. Android SQLite的基本使用 1.1. SQLiteOpenHelper Android 底层已经通过一个SQLiteOpenHelper的抽象类将数据库的创建&#xff0c;以及修改&#xff0c;更新等都放在了里面。 要使用它必须实现它的OnCreate(SQLiteDatabase db)&#xff0c;onUpgrade(SQLiteDatabase db, int…

一些硬件知识(二十五)

cadence设置led颜色&#xff1a; 切换到Current propeties才会有颜色选选项&#xff0c;点击红色就可以选择其他的颜色&#xff1a; 手机字库是维修人员对FLASH MEMORY的俗称&#xff0c;其真实名字是闪速存储器&#xff0c;简称闪存&#xff0c;相当于手机的“硬盘”&#xff…

【Linux网络】详解TCP协议(3)

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux网络 &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 TCP的流量控制和滑动窗口 的相关内容。 如果看到最后您觉得这篇…

VB.net读写NDEF标签URI智能海报WIFI蓝牙连接

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 Public Class Form1Dim oldpicckey(0 To 5) As Byte 卡片旧密码Dim newpicckey(0 To 5) As Byte 卡片新密码Function GetTagUID() As StringDim status As ByteDim myctrlword As …