|
采用STM32F10系列单片机
利用定时器TIM3的PWM输出功能,利用端口复用PC7输出PWM,实现呼吸灯的效果
- /***************************************************
- 实验内容:定时器的PWM实现
- 使用定时器3的通道1,将其映射到PC6,实现呼吸灯的效果
- ****************************************************/
- #include "pwm.h"
- #define uint unsigned int
- void delay(uint z)
- {
- uint i,j;
- for(i=14286;i>0;i--)
- for(j=z;j>0;j--);
- }
- void TIM3_PWM_initial(uint arr,uint psc)
- {
- GPIO_InitTypeDef GPIO_InitStructuer;
-
- TIM_TimeBaseInitTypeDef time3_initial;
-
- TIM_OCInitTypeDef TIM_OCInitStructuer;
-
- RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);//使能定时器3的时钟(TIM3-CH1 映射到PC6)
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO,ENABLE);//使能GPIOC外设时钟和AFIO复用功能模块的时钟
-
- //初始化端口GPIOC的复用更能
- GPIO_InitStructuer.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
- GPIO_InitStructuer.GPIO_Pin=GPIO_Pin_6;//(TIM3-CH1 映射到PC6)
- GPIO_InitStructuer.GPIO_Speed=GPIO_Speed_10MHz;
- GPIO_Init(GPIOC,&GPIO_InitStructuer);
-
- //(TIM3-CH1 映射到PC6)
- GPIO_PinRemapConfig(GPIO_FullRemap_TIM3,ENABLE);//完全重映射
-
- //TIM3的初始化
- time3_initial.TIM_ClockDivision=TIM_CKD_DIV1;
- time3_initial.TIM_CounterMode=TIM_CounterMode_Up;//设置为向上计数
- time3_initial.TIM_Period=arr;//设置自动装载值
- time3_initial.TIM_Prescaler=psc;//设置预分频系数
- TIM_TimeBaseInit(TIM3,&time3_initial);
-
- //通道一的初始化函数
- TIM_OCInitStructuer.TIM_OCMode=TIM_OCMode_PWM2;//PWM模式2
- TIM_OCInitStructuer.TIM_OCPolarity=TIM_OCPolarity_High;//极性为高
- TIM_OCInitStructuer.TIM_OutputState=TIM_OutputState_Enable;
- TIM_OC1Init(TIM3,&TIM_OCInitStructuer);
-
- //使能预装载
- TIM_OC1PreloadConfig(TIM3,TIM_OCPreload_Enable);
-
- //使能定时器3
- TIM_Cmd(TIM3,ENABLE);
- }
- int main()
- {
- uint ledpwmval=0;
- uint flag=1;
- TIM3_PWM_initial(199,0);
-
- while(1)
- {
- delay(10);
- if(flag)
- {
- ledpwmval++;
- }
- else
- {
- ledpwmval--;
- }
-
- if(ledpwmval>199)
- {
- flag=0;
- }
- if(ledpwmval==0)
- {
- flag=1;
- }
- TIM_SetCompare1(TIM3,ledpwmval);
- }
- }
复制代码
|
评分
-
查看全部评分
|