STM32 库函数版本 PWM 输出实验

用该定时器的中断来控制DS1的闪烁
pwm.h 文件

#ifndef _pwm_H_
#define _pwm_H_
#include "stm32f4xx.h"
#include "sys.h"

//定时器配置函数
void TIM14_Pwm_Init(u32 arr,u32 psc);

//GPIO口配置
void gpio_Init(void);

//pwm波配置
void pwd_Init(void);

#endif

pwm.c 文件

#include "pwm.h"

//定时器配置函数
void TIM14_Pwm_Init(u32 arr,u32 psc){
	
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitTypeDefStr;
	
	//使能定时器14时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM14,ENABLE);
	
	TIM_TimeBaseInitTypeDefStr.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInitTypeDefStr.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitTypeDefStr.TIM_Period = arr; //自动重装载值
	TIM_TimeBaseInitTypeDefStr.TIM_Prescaler = psc; //定时器分频
	//初始化定时器14
	TIM_TimeBaseInit(TIM14,&TIM_TimeBaseInitTypeDefStr);
	
}

//GPIO口配置
void gpio_Init(void){
	GPIO_InitTypeDef GPIO_InitStr;
	
	//使能GPIOF时钟
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
	
	GPIO_InitStr.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStr.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStr.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStr.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_InitStr.GPIO_Speed = GPIO_Speed_100MHz;
	GPIO_PinAFConfig(GPIOF,GPIO_PinSource9,GPIO_AF_TIM14);
	//初始化结构体IO口
	GPIO_Init(GPIOF,&GPIO_InitStr);
	
}

//pwm波配置
void pwd_Init(void){
	TIM_OCInitTypeDef TIM_OCInitTypeDefStr;
	
	TIM_OCInitTypeDefStr.TIM_OCMode = TIM_OCMode_PWM1;
	TIM_OCInitTypeDefStr.TIM_OCPolarity =TIM_OCPolarity_Low;
	TIM_OCInitTypeDefStr.TIM_OutputState = TIM_OutputState_Enable;
	//TIM_OCInitTypeDefStr.TIM_Pulse = 0x4567;
	//初始化输出比较参数
	TIM_OC1Init(TIM14,&TIM_OCInitTypeDefStr);
	
	TIM_OC1PreloadConfig(TIM14,TIM_OCPreload_Enable);//使能预装载寄存器
	
	TIM_ARRPreloadConfig(TIM14,ENABLE);//ARPE使能
	TIM_Cmd(TIM14,ENABLE);//使能TIM14
	
}






main.c 文件

#include "led.h"
#include "pwm.h"
#include "stm32f4xx.h"  
#include "delay.h"

 int main(void){
 
	u8 flag = 0;
	u32 campare = 0;
	delay_init(168);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
	TIM14_Pwm_Init(499,83);
	gpio_Init();
	pwd_Init();
	 while(1){
		 delay_ms(10);
		if(flag == 0){
			campare++;
		}else{
			campare--;
		}
		if(campare >= 250){
			flag =1;
		}
		if(campare == 0){
			flag = 0;
		}
		TIM_SetCompare1(TIM14,campare);
	 }
	
 }
 

[^1]如果没有错误,我们将看 DS0 不停的由暗变到亮,然后又从
亮变到暗。每个过程持续时间大概为 3 秒钟左右。

在这里插入图片描述
PWM 控制 DS0 亮度

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值