|
main.c
#include "stm32f10x.h"
u16 CCR1_Val=1000;
u16 CCR2_Val=0;
u8 a=0;
void Delay(__IO u32 nCount)
{
while(nCount--);
}
void RCC_Config(void)
{
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
}
void TIM3_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;//設(shè)置一個GPIO_InitStructure結(jié)構(gòu)體。
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;//選擇引腳6和7。
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//選擇輸出模式為復(fù)用推挽輸出。
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//設(shè)置引腳最高輸出速率為50MHz。
GPIO_Init(GPIOA,&GPIO_InitStructure);//將設(shè)定好的參數(shù)初始化。
}
void TIM3_Mode_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//設(shè)置一個TIM_TimeBaseStructure結(jié)構(gòu)體。
TIM_OCInitTypeDef TIM_OCInitStructure;//設(shè)置一個TIM_OCInitStructure結(jié)構(gòu)體。
TIM_TimeBaseStructure.TIM_Period=1000-1;//個人理解就是計幾個數(shù)。(由此可以得到PWM的周期)
TIM_TimeBaseStructure.TIM_Prescaler=0;//設(shè)置用來作為 TIMx 時鐘頻率除數(shù)的預(yù)分頻值。
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//設(shè)置時鐘分割。
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//選擇了計數(shù)器模式。
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);//將設(shè)置好的參數(shù)初始化。
TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;//設(shè)置TIM輸出模式PWM1。
TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;//選擇輸出比較狀態(tài)(?)
TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;//TIM 輸出比較極性高。
TIM_OCInitStructure.TIM_Pulse=CCR1_Val;//設(shè)置了待裝入捕獲比較寄存器的脈沖值。
TIM_OC1Init(TIM3, &TIM_OCInitStructure);//將設(shè)定好的參數(shù)初始化給通道1。
TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable);//使能TIM3在CCR1上的預(yù)裝載寄存器。
TIM_OCInitStructure.TIM_Pulse=CCR2_Val;
TIM_OC2Init(TIM3,&TIM_OCInitStructure);//通道2
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM3,ENABLE);//使能TIM3在 ARR 上的預(yù)裝載寄存器。
TIM_Cmd(TIM3,ENABLE);//使能TIM3的外設(shè)
}
int main(void)
{
RCC_Config();
TIM3_GPIO_Config();
TIM3_Mode_Config();
while(1)
{
if(CCR1_Val>0&&a<40&&CCR2_Val<1000)
{
CCR1_Val-=25;
CCR2_Val+=25;
TIM3_Mode_Config();
a++;
Delay(0XFFFF);
Delay(0XFFFF);
Delay(0XFFFF);
Delay(0XFFFF);
}
else
{
CCR1_Val+=25;
CCR2_Val-=25;
TIM3_Mode_Config();
Delay(0XFFFF);
Delay(0XFFFF);
a++;
if(a==80)a=0;
}
}
}
可以試試
|
|