发布时间 : 星期一 文章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);