新手入门
- 积分
- 12
- 金钱
- 12
- 注册时间
- 2020-11-11
- 在线时间
- 1 小时
|
2金钱
///////////////////////////////////////////////////////////
//°′¼üÇD»»Õ¼¿Õ±è
///////////////////////////////////////////////////////////
#include <stm32f10x.h>
#define KEY1 GPIO_Pin_0
#define KEY2 GPIO_Pin_13
#define KEY1_STATUS GPIO_ReadInputDataBit(GPIOA,KEY1)//¶áè¡°′¼ü1
#define KEY2_STATUS GPIO_ReadInputDataBit(GPIOC,KEY2)//¶áè¡°′¼ü2
////////////////////////////////////////////////////////////////////////
//í¨óÃÑóê±oˉêy
////////////////////////////////////////////////////////////////////////
#define TIME_MS 12000 //@72M
//3¤Ñóê±oˉêy
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
for(j=TIME_MS;j>0;j--);
}
//ÅäÖÃKEY¶Ôó|¶Ë¿ú
void KEY_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin = KEY1;//KEY1(PA.0)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = KEY2;//KEY2(PC.13)
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
//ÅäÖÃí¨óö¨ê±Æ÷TIM3£¬óÃóúPWMμ÷Ëù
void TIM3_PWMInit(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO
|RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB0(LED_R′úìæ·çéè)¸′óÃÎaTIM3_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //¸′óÿa©êä3öÄ£ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //PB1(LED_G)ÎaTIM3_CH3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //¸′óÃíÆíìêä3öÄ£ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Prescaler =1 ; //Ô¤·ÖÆμÖμ1+1=2£¬êäèë¼ÆêyÆ÷36MHz
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned1; //ÖDÑë¶ÔÆëÄ£ê½
TIM_TimeBaseStructure.TIM_Period =35999; //ÖüÆú35999+1=36000£¬ WMÆμÂê500Hz
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //ê±Öó·ÖÆμòò×ó
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE); ////TIM32¿·ÖÖØó3éä
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //PWMÄ£ê½1£oÖDÑë¶ÔÆëÄ£ê½ ÔúÏòéϼÆêyê±ÖD¶Ï±êÖ¾ÖÃ룬
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //ÕyÏòêä3ö¼«DÔ ¸ßμçÆ½óDD§
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //ÕyÏòêä3öÔêDí
TIM_OCInitStructure.TIM_Pulse = 999; //è·¶¨Õ¼¿Õ±è£¬Õa¸öÖμ¾ö¶¨áËóDD§μçÆ½μÄê±¼ä
TIM_OC2Init(TIM3, &TIM_OCInitStructure); //êä3öí¨μà2ÅäÖÃoˉêy
TIM_OC3Init(TIM3, &TIM_OCInitStructure); //êä3öí¨μà3ÅäÖÃoˉêy
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //ê1ÄüÔ¤×°ÔØ¼Ä′æÆ÷
TIM_OC3PreloadConfig(TIM3, TIM_OCPreload_Enable); //ê1ÄüÔ¤×°ÔØ¼Ä′æÆ÷
TIM_Cmd(TIM3,ENABLE); //Æô¶ˉTIM3
}
/* °′¼ü′|àíoˉêy
·μ»Ø°′¼üÖμ
0£¬Ã»óDèÎoΰ′¼ü°′ÏÂ
1£¬KEY1°′ÏÂ
2£¬KEY2°′ÏÂ
×¢òa′ËoˉêyóDÏìó|óÅÏè¼¶,KEY1>KEY2!! */
u8 KEY_Scan()
{
if(KEY1_STATUS==0 || KEY2_STATUS==0) //¼ì2a°′¼üêÇ·ñ°′ÏÂ
{
Delay_ms(100); //·à¶¶Ñóê±
if(KEY1_STATUS==1) //¼ì2aKEY1êÇ·ñ°′ÏÂ
return 1;
else if(KEY2_STATUS==1) //¼ì2aKEY2êÇ·ñ°′ÏÂ
return 2;
}
return 0; //ÎT°′¼ü°′ÏÂ
}
//ÅäÖÃËùóDíaéè
void Init_All_Periph(void)
{
SystemInit();
KEY_Configuration();
TIM3_PWMInit();
}
//Ö÷oˉêy
int main(void)
{
u16 width[3]={25000,35000};
u16 i=0,pwm=width[0];
Init_All_Periph();
while(1)
{
i=KEY_Scan();
if(i!=0)
{
pwm=width[i-1];
TIM_SetCompare1(TIM3, pwm);
TIM_SetCompare2(TIM3, pwm);
}
}
}
|
|