【stm-4】PWM驱动LED呼吸灯 PWM驱动舵机PWM驱动直流电机

1.PWM驱动LED呼吸灯 

void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);        //结构体初始化输出比较单元
void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);
void TIM_OC4Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct);

void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState);        //仅高级定时器使用,在使用高级定时器输出PWM函数时调用。否则PWM不能正常输出 

void TIM_SetCompare1(TIM_TypeDef* TIMx, uint16_t Compare1);

//单独更改通道1的CCR值
void TIM_SetCompare2(TIM_TypeDef* TIMx, uint16_t Compare2);
void TIM_SetCompare3(TIM_TypeDef* TIMx, uint16_t Compare3);
void TIM_SetCompare4(TIM_TypeDef* TIMx, uint16_t Compare4); 

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "pwm.h"
#include "delay.h"
#include "OLED.h"
uint8_t i;
int main(void)
{OLED_Init();PWM_Init();while(1){for(i=0;i<=100;i++){PWM_setcompare1(i);	//通过单独改变通道1(PA0)的CCR值,PWM的占空比、分辨率、频率随之改变Delay_ms(10);}for(i=0;i<=100;i++){PWM_setcompare1(100-i);Delay_ms(10);}}
}

(2) pwm.c

#include "Device/Include/stm32f10x.h"   // Device header
void PWM_Init(void)
{
//根据PWM基本结构框图,时基单元初始化、输出比较单元选择(TIM1通道初始化)RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	//打开时钟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的值。计10000个数TIM_TimeBaseInitstructure.TIM_Prescaler=720-1;//7200-1;//PSC.72MHZ下7200分频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);	//使用PA0口,对应第一个通道,使用OC1Init函数//TIM1通道初始化TIM_Cmd(TIM2,ENABLE);//计数器使能,启动定时器
}
void PWM_setcompare1(uint16_t compare)
{TIM_SetCompare1(TIM2,compare);
}

(3)pwm.h

#ifndef __PWM_H
#define __PWM_H
void PWM_Init(void);
void PWM_setcompare1(uint16_t compare);
#endif

2.PWM驱动舵机 

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "servo.h"
#include "delay.h"
#include "OLED.h"
#include "key.h"
uint8_t i;
uint8_t KeyNum;
float Angle;
int main(void)
{OLED_Init();servo_Init();Key_Init();OLED_ShowString(1,1,"Angle:");while(1){KeyNum=Key_GetNumber();if(KeyNum==1){Angle+=30;if(Angle>180){Angle=0;}}servo_SetAngle(Angle);OLED_ShowNum(1,7,Angle,3);}
}

(2)pwm.c

#include "Device/Include/stm32f10x.h"   // Device header
void PWM_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);	//打开时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;	//复用推挽输出(输出控制权转移给片上外设)GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;	//用PA1口通道2GPIO_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=20000-1;//定时器周期,实际就是ARR的值。计10000个数TIM_TimeBaseInitstructure.TIM_Prescaler=72-1;//7200-1;//PSC.72MHZ下7200分频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_OC2Init(TIM2,&TIM_OCInitstructure);	//使用PA0口,对应第一个通道,使用OC1Init函数TIM_Cmd(TIM2,ENABLE);//计数器使能,启动定时器
}
void PWM_setcompare2(uint16_t compare)
{TIM_SetCompare2(TIM2,compare);
}

 (3)pwm.h

#ifndef __PWM_H
#define __PWM_H
void PWM_Init(void);
void PWM_setcompare2(uint16_t compare);
#endif

(2)servo.c

#include "Device/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);
}

(3)servo.h

#ifndef __SERVO_H
#define __SERVO_Hvoid servo_Init(void);
void servo_SetAngle(float Angle);#endif

3.PWM驱动直流电机 

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "motor.h"
#include "delay.h"
#include "OLED.h"
#include "key.h"
uint8_t KeyNum;
uint8_t i;
int8_t speed;
int main(void)
{OLED_Init();motor_Init();Key_Init();OLED_ShowString(1,1,"speed:");while(1){KeyNum=Key_GetNumber();if(KeyNum==1){speed+=20;if(speed>100){speed=-100;}}Motor_SetSpeed(speed);OLED_ShowSignedNum(1,7,speed,3);}
}

(2)motor.c

#include "Device/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_setcompare3(speed);}else{GPIO_ResetBits(GPIOA,GPIO_Pin_4);GPIO_SetBits(GPIOA,GPIO_Pin_5);PWM_setcompare3(-speed);}
}

 (3)motor.h

#ifndef __MOTOR_H
#define __MOTOR_Hvoid motor_Init(void);
void Motor_SetSpeed(int8_t speed);#endif

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

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

相关文章

Python爬虫获取豆瓣电影Top100

大家好&#xff0c;我是秋意零。 今天分析一篇&#xff0c;Python爬虫获取豆瓣电影Top100。 在此之前&#xff0c;我没有学习过爬虫&#xff0c;只有一丢丢的Python基础。下面效果的实现源码几乎没经过我&#xff0c;而是AI百老师。我主要负责了对应的调试以及根据我想要的功…

分红76.39亿,分红率再创新高,成长活力无限的伊利带来丰厚回报

伊利47万股东&#xff0c;又等来了一个好消息。 4月29日&#xff0c;伊利股份发布2023年报&#xff0c;实现营业总收入1261.79亿元&#xff0c;归母净利润104.29亿元&#xff0c;双创历史新高&#xff0c;实现连续31年稳健增长。 在递交亮眼成绩单的同时&#xff0c;乳业巨头伊…

CSDN上是不是有机器人点赞和收藏?

我在CSDN上写作&#xff0c;主要是本来是记录学习工作中的一些知识点&#xff0c;看得人不多本来就能预想到的。 但是今天发现五一写的一篇博客&#xff0c;出现了很奇怪的阅读、点赞、收藏数。只有2个人阅读&#xff0c;但是有8个点赞&#xff0c;还有5个收藏。 我不禁怀疑CS…

【CSS基础--CSS选择器的常见用法】

CSS选择器的常见用法 1.CSS介绍1.1 基本语法规范1.2 引入样式1.3 规范 2. CSS选择器2.1 标签选择器2.2 类选择器2.3 ID选择器2.4 复合选择器 1.CSS介绍 CSS&#xff08;Cascading Style Sheet&#xff09;&#xff0c;层叠样式表&#xff0c;由于控制页面的样式。CSS能够对网页…

HTML Audio标签src使用base64字符

源码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Audio src base64</title> </head> <body><audio controls><source src"data:audio/mp3;base64,//OIxAAAAAAAAAA…

保研面试408复习 2——操作系统、计网

文章目录 1、操作系统一、进程、线程的概念以及区别&#xff1f;二、进程间的通信方式&#xff1f; 2、计算机网络一、香农准则二、协议的三要素1. 语法2. 语义3. 时序 标记文字记忆&#xff0c;加粗文字注意&#xff0c;普通文字理解。 1、操作系统 一、进程、线程的概念以及…

hadoop学习---基于Hive的聊天数据分析报表可视化案例

背景介绍&#xff1a; 聊天平台每天都会有大量的用户在线&#xff0c;会出现大量的聊天数据&#xff0c;通过对聊天数据的统计分析&#xff0c;可以更好的对用户构建精准的用户画像&#xff0c;为用户提供更好的服务以及实现高ROI的平台运营推广&#xff0c;给公司的发展决策提…

C语言:指针(1)

1. 内存和地址 内存划分为⼀个个的内存单元&#xff0c;每个内存单元的⼤⼩取1个字节。 计算机中常⻅的单位&#xff08;补充&#xff09;&#xff1a; ⼀个⽐特位可以存储⼀个2进制的位1或者0 C语⾔中给地址起了新的名字叫&#xff1a;指针。 内存单元的编号地址指针。 1.…

在Ubuntu上安装docker

一、安装docker 更新系统包列表&#xff1a; sudo apt-get update安装必要的依赖软件包&#xff0c;使apt可以通过HTTPS使用repository。 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common添加Docker的阿里云GPG密钥&#xff1a;…

CleanMyMac X 4.15.3 版本发布

CleanMyMac X 4.15.3 版本发布&#xff0c;一款苹果 macOS 系统好用的伴侣软件&#xff0c;其包含 1.一键深度清理。2.系统垃圾专清。3.大/旧文件专清。4.系统提速。5.性能悬浮窗。6.恶意软件防护。7.隐私保护。8.软件卸载器。9.软件更新器等 9 大功能&#xff0c;为您的苹果电…

【计算机毕业设计】基于SSM++jsp的电子竞技管理平台【源码+lw+部署文档+讲解】

目录 1 绪论 1.1 研究背景 1.2 目的和意义 1.3 论文结构安排 2 相关技术 2.1 SSM框架介绍 2.2 B/S结构介绍 2.3 Mysql数据库介绍 3 系统分析 3.1 系统可行性分析 3.1.1 技术可行性分析 3.1.2 经济可行性分析 3.1.3 运行可行性分析 3.2 系统性能分析 3.2.1 易用性指标 3.2.2 可…

Git知识点总结

目录 1、版本控制 1.1什么是版本控制 1.2常见的版本控制工具 1.3版本控制分类 2、集中版本控制 SVN 3、分布式版本控制 Git 2、Git与SVN的主要区别 3、软件下载 安装&#xff1a;无脑下一步即可&#xff01;安装完毕就可以使用了&#xff01; 4、启动Git 4.1常用的Li…