用该定时器的中断来控制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 亮度