基于stm32f103vet6的pwm呼吸灯
Õâ?ö?ÌÐòÎÒÇ×?â?ýÁË??ÎÒÓõÄÊÇ?Ü???æ?ª???åV5.0º?Êý?Ì?þ?âÓõÄ3.5
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
void RCC_Configuration(void);
void TIM_GPIO_Config(void);
void PWM_Mode_Config(void);
int main(void)
{
u8 led_fx=1;//µÆÁÁµÄ??Ïò??ÓÐÁÁµ??µ??ºÍ?µµ?ÁÁ??ºôÎüµÆ?ÍÊÇÕâÑù???äµÄ
u16 led_dt=0;
RCC_Configuration();
TIM_GPIO_Config();
PWM_Mode_Config();
while(1)
{
delay_nms(10);
if(led_fx==1)//
{led_dt++;}
else{led_dt--;}
if(led_dt>100)//ÏÂÃæ?ÌÐòµÄ??Ê?ÖÜÆÚÊÇ100??ËùÒÔled_dt?Óµ?100?Í×Ô?õµ?0??Ò??ÍÊÇpwmÊä
?ö?ß/µÍµçÆ??ÖÐøÊ??äµÄ???Ì??
led_fx=0;
if(led_dt==0)
led_fx=1;
TIM_SetCompare1(TIM4,led_dt);//?Ñled_dtµÄÖµË͵???Ê?Æ?4µÄCCR?Ä?æÆ?ÖÐ?Ä?äÕ??Õ?È???
ÍÊǺóÃæÌáµ?µÄÌø?äÖµpulse
}
}
void TIM_GPIO_Config(void)//ÅäÖõÄÊÇPB6?Ë?ÚµÄ??ÓÃÍÆÍìÊä?ö??ÒòΪÊä?öPWM??
{
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure); }
void RCC_Configuration(void)
{
SystemInit();//?õÊ???ϵÍ?Ê?ÖÓ
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE); //Ê?ÄÜ?Ë?ÚBÊ?ÖÓºÍ??ÓÃ??ÄÜÊ?ÖÓ
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); //Ê?ÄÜ??Ê?Æ?Ê?ÖÓ }
void PWM_Mode_Config(void)
{
u32 CCR2_Val;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseStructure.TIM_Prescaler = 1;
//Ô??ÖƵÆ?Ϊ1?ÍÊÇ??Ê?Æ?µÄ??×?ƵÂÊΪ36M???ñÔò(Ϊ0?òÕßÆäËûµÄÊýÊ?,TIMclock=72M/(pres+1))Ϊ72M
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//ÏòÉÏ?ÆÊý
TIM_TimeBaseStructure.TIM_Period =99; //36M/(99+1)=360K
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
//????Ì?TIMx_CNT