IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 蓝桥杯_嵌入式:PWM_基础配置实验(库函数) -> 正文阅读

[嵌入式]蓝桥杯_嵌入式:PWM_基础配置实验(库函数)

目录

前言:

代码部分:

1.pwm.h:

2.pwm.c:

3.main.c:

总结



前言:

PWM的输出也是定时器的基本功能之一,

这里我们将使用GPIOA中的GPIO_Pin_7做为TIM3第二通道的PWM输出实验


代码部分:

1.pwm.h:

#ifndef __PWM_H
#define __PWM_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"


void TIM3_PWM_Init(u16 arr, u16 psc);


#endif 


2.pwm.c:

#include "pwm.h"


void TIM3_PWM_Init(u16 arr, u16 psc) //GPIOA_Pin_7   --TIM3-通道2
{
	GPIO_InitTypeDef GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_OCInitTypeDef TIM_OCInitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);  
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);    //使能GPIO外设时钟使能
	
	
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;       //TIM3_CH2
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOA,&GPIO_InitStruct); 
	
	TIM_TimeBaseInitStruct.TIM_Period=arr;    //设置在下一个更新事件装入活动的自动重装载寄存器周期的值
	TIM_TimeBaseInitStruct.TIM_Prescaler=psc;   //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct);   
	
	TIM_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM2;    //选择定时器模式:TIM脉冲宽度调制模式2
	TIM_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;   //比较输出使能
	TIM_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_High;    //输出极性:TIM输出比较极性高
	TIM_OCInitStruct.TIM_Pulse=0    ;//设置待装入的脉冲值
	TIM_OC2Init(TIM3,&TIM_OCInitStruct);    
	
	TIM_CtrlPWMOutputs(TIM3,ENABLE);  // 主输出使能	
	
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);       //CH2预装载使能	 
	TIM_ARRPreloadConfig(TIM3,ENABLE);                        //使能TIM3在ARR上的预装载寄存器
	TIM_Cmd(TIM3,ENABLE);                                    //使能TIM3
}


3.main.c:

#include "stm32f10x.h"
#include "lcd.h"
#include "led.h"
#include "key.h"
#include "pwm.h"
u32 TimingDelay = 0;

void Delay_Ms(u32 nTime);


int main(void)
{
	u16 PWM=0;
	u8 flag=1;
	SysTick_Config(SystemCoreClock/1000);
  STM3210B_LCD_Init();
	LCD_Clear(Green);
	LCD_SetBackColor(Black);//2
	LCD_SetTextColor(White);//3	
	
	TIM3_PWM_Init(899,0);
	while(1)
	{
		Delay_Ms(10);
		if(flag)  PWM++;
		else PWM--;
		
		if(PWM>300) flag=0;
		if(PWM==0)  flag=1;
		
		TIM_SetCompare2(TIM2,PWM);

	}
}


void Delay_Ms(u32 nTime)
{
	TimingDelay = nTime;
	while(TimingDelay != 0);	
}

如果要查看pwm输出效果,要使用杜邦线接LED插在PA7引脚上才能看到代码完成程度

注意:关于如何控制PWM的占空比,如此文章展示的代码TIM_SetCompare2(TIM2,PWM);中的第二个? ? ? ? ? ? 入口参数就是我们控制PWM占空比的关键。

? ? ? ? ? TIM3_PWM_Init(899,0);中的第一个参数就是占空比的上限。

? ? ? ? ? 若要控制占空比为30%,则需要为TIM_SetCompare2(TIM2,300);? ?

? ? ? ? ??和? ?TIM3_PWM_Init(999,0);

? ? ? ? ??计算原理为300/1000为30%


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-02-04 11:11:54  更:2022-02-04 11:12:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:25:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码