新手上路
- 积分
- 21
- 金钱
- 21
- 注册时间
- 2020-11-11
- 在线时间
- 3 小时
|
3金钱
*******头文件*************************
#ifndef __BLN__H
#define __BLN__H
#include "stm32f10x.h"
void TIM2_PWM_init(u16 arr,u16 psc);
void BLN(void);
#endif
*******.c文件****************************
#include<C:\Users\86156\Desktop\新建工程模板\HARDWEAR\BLN.h>
void TIM2_PWM_init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); //使能GPIO和复用时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载值 arr
TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置预分频值 psc (0不分频)
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseInit(TIM2 , &TIM_TimeBaseStructure);
//TIM2-CH1 PWM设定
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //定时器输出值小于比较值,低电平有效 led为低电平有效
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 0; //总脉宽
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_Cmd(TIM2 , ENABLE);
}
*******主函数**********************************
void BLN(void)
{
u16 pwm0=1; //作比较值,在0~300循环增减
u16 t0=0; //控制增减,t0=0控制递增过程,t0=1控制递减过程
while(1)
{
if(t0==0&&pwm0<300)
pwm0++;
if(t0==0&&pwm0==300)
t0=1;
if(t0==1&&pwm0>0)
pwm0--;
if(t0==1&&pwm0==0)
t0=0;
TIM_SetCompare1(TIM2,pwm0);
}
}
|
|