STM32PWM控制LED灯

发布时间 : 星期一 文章STM32PWM控制LED灯更新完毕开始阅读

用遥控器实现PWM输出的代码

main.c

#include \#include\#include\

void Delay(u32 n) { for(; n != 0; n--); }

int main(void) { u16 a=1; u16 b=0; GPIO_Config(); TIM4_Mode_Config(); while(1) { Delay(72000); if(a==1) { b++; } else { b--; } if(b>500) a=0; if(b==1) a=1; TIM_SetCompare3(TIM4,b); } }

GPIO.c

#include\

void GPIO_Config(void) {

GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO.h

#include \void GPIO_Config(void);

TIM.C

#include\

void TIM4_Mode_Config(void) {

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; //功能见TIM_TimeBaseInit函数 TIM_OCInitTypeDef TIM_OCInitStructure; //功能见TIM_OCInit函数

GPIO_PinRemapConfig(GPIO_Remap_TIM4,DISABLE); //TIM4复用功能映射

TIM_TimeBaseStructure.TIM_Period = 999; //当定时器从0计数到999,即为1000次,为一个定时周期

TIM_TimeBaseStructure.TIM_Prescaler = 0; //设置预分频:不预分频,即为72MHz TIM_TimeBaseStructure.TIM_ClockDivision = 0 ; //设置时钟分频系数:不分频

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式

TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //配置为PWM模式1 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;

TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于CCR1_Val时为高电平

TIM_OC3Init(TIM4, &TIM_OCInitStructure); //使能通道 TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); TIM_Cmd(TIM4, ENABLE); }

TIM.h

#include \

void TIM4_Mode_Config(void);

联系合同范文客服:xxxxx#qq.com(#替换为@)