中级会员
 
- 积分
- 215
- 金钱
- 215
- 注册时间
- 2020-3-5
- 在线时间
- 36 小时
|
5金钱
void SENIOR_TIMER_PWM_Init(u16 arr , u16 psc , u8 TIMEX,u8 CHX,u16 duty)
{
TIM_TypeDef* TIMX;
RCC->APB2ENR|=1<<TIMEX; //定时器时钟使能
TIMX=(TIM_TypeDef*)(TIM1_BASE+TIMEX*0x400); //定时器寄存器的首地址
TIMX->ARR=arr; //自动重装载值
TIMX->PSC=psc; //预分频值
TIMX->CR1|=0<<4; //定时器向上计数模式
switch(CHX)
{
case CH1:
switch(TIMEX)
{
case TIME1:
GPIO_init(IOA,8,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 A8
GPIO_PinAF_Set(GPIOA,8,1); //具体复用功能设置
break;
case TIME8:
GPIO_init(IOC,6,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 C6
GPIO_PinAF_Set(GPIOC,6,3); //具体复用功能设置
break;
}
TIMX->ARR=arr; //自动重装载值
TIMX->PSC=psc; //预分频值
TIMX->CR1|=0<<4; //定时器向上计数模式
TIMX->CCMR1|=6<<4; //PWM1模式
TIMX->CCER&=~(1<<1); //高电平有效
TIMX->CCER|=1<<0; //通道输出使能
TIMX->CCMR1|=1<<3; //使能预装载
TIMX->CCR1=duty; //预装载值
break;
case CH2:
switch(TIMEX)
{
case TIME1:
GPIO_init(IOA,9,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 A9
GPIO_PinAF_Set(GPIOA,9,1); //具体复用功能设置
break;
case TIME8:
GPIO_init(IOC,7,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 C7
GPIO_PinAF_Set(GPIOC,7,3); //具体复用功能设置
break;
}
TIMX->CCMR1|=1<<11; //使能预装载
TIMX->CCMR1|=6<<12; //PWM1模式
TIMX->CCER|=1<<4; //通道输出使能
TIMX->CCER&=~(1<<5); //高电平有效
TIMX->CCR2=duty; //预装载值
break;
case CH3:
switch(TIMEX)
{
case TIME1:
GPIO_init(IOA,10,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 A10
GPIO_PinAF_Set(GPIOA,10,1); //具体复用功能设置
break;
case TIME8:
GPIO_init(IOC,8,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 C8
GPIO_PinAF_Set(GPIOC,8,3); //具体复用功能设置
break;
}
TIMX->CCMR2|=1<<3; //使能预装载
TIMX->CCMR2|=6<<4; //PWM1模式
TIMX->CCER|=1<<8; //通道输出使能
TIMX->CCER&=~(1<<9); //高电平有效
TIMX->CCR3=duty; //预装载值
break;
case CH4:
switch(TIMEX)
{
case TIME1:
GPIO_init(IOA,11,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 A11
GPIO_PinAF_Set(GPIOA,11,1); //具体复用功能设置
break;
case TIME8:
GPIO_init(IOC,9,AF_PP,SPEED_100HZ); //GPIO初始化复用功能 C9
GPIO_PinAF_Set(GPIOC,9,3); //具体复用功能设置
break;
}
TIMX->CCMR2|=1<<11; //使能预装载
TIMX->CCMR2|=6<<12; //PWM1模式
TIMX->CCER|=1<<12; //通道输出使能
TIMX->CCER&=~(1<<13); //高电平有效
TIMX->CCR4=duty; //预装载值
break;
};
TIMX->CR1|=1<<7; //自动重载预装载使能TIMx_ARR寄存器进行缓冲
TIMX->CR1|=1<<0; //使能定时器
}
这个是pwm单通道输出的函数,我用的时候比如频率100KHZ,占空比为80%
但是出来上位机图像是

输出的波形完全不对,不知道有人能帮忙解答下吗
|
|