stm32f103的 time1互补输出PWM问题
时间:10-02
整理:3721RD
点击:
以下程序在stm32f103c8中CH1,CH2,CH3,CHN3,有输出PWM,但是CHN1,CHN2未有PWM。然后把程序移植到
stm32f103zet6则输出都正常。stm32f103c8是有高级定时器 time1 的 求高手解答
void BLDC_Time1_Init( unsigned int arr,unsigned int psc) //PWM初始化程序
{
RCC->APB2ENR|=1<<11; // 使能定时器1时钟
RCC->APB2ENR|=1<<2; //使能IO口A时钟
RCC->APB2ENR|=1<<3; //使能IO口B时钟
//RCC->APB2ENR|=1<<0; //开启辅助时钟
GPIOB->CRH&=0X000FFFFF; // 清除PB13PB14,15状态寄存器位
GPIOB->CRH|=0XBBB00000; // 设定PB13PB14,15//TIM1CH1N,TIM1CHH2N CH3N输出
GPIOA->CRH&=0XFFFFF000; // 清除PA8,9,10状态寄存器位
GPIOA->CRH|=0X00000BBB; // 设定PA8,9,10为复用功能TIM1CH1,2,3输出
//GPIOB->ODR|=1<<13;
//GPIOB->ODR|=1<<14;
//GPIOB->ODR|=1<<15;
//GPIOA->ODR|=1<<8;
//GPIOA->ODR|=1<<9;
//GPIOA->ODR|=1<<10;
TIM1->CR2&=0X0000;
TIM1->CCR1=500; //捕获比较预装载值
TIM1->CCR2=200;
TIM1->CCR3=400;
TIM1->ARR=arr; // 设定计数器自动重装值
TIM1->PSC=psc; // 预分频器不分频
// TIM1->CCER|=1<<0; // TIM1CH1 通道开关
// TIM1->CCER|=1<<2; // TIM1CH1N 通道开关
// TIM1->CCER|=1<<4; // TIM1CH2 通道开关
// TIM1->CCER|=1<<6; // TIM1CH2N 通道开关
// TIM1->CCER|=1<<8; // TIM1CH3 通道开关
// TIM1->CCER|=1<<10; // TIM1CH3N 通道开关
TIM1->CCMR1|=7<<4; // TIM1CH1 PWM2模式
TIM1->CCMR1|=7<<12; // TIM1CH2 PWM2模式
TIM1->CCMR2|=7<<4; // TIM1CH3 PWM2模式
TIM1->CCMR1|=1<<3; // TIM1CH1 预装载使能
TIM1->CCMR1|=1<<11; // TIM1CH2 预装载使能
TIM1->CCMR2|=1<<3; // TIM1CH3 预装载使能
TIM1->CR1|=0X80; // CR1 ARPE自动重装载预装载允许位使能
TIM1->CR1|=0X01; // 使能定时计数器1
TIM1->EGR|=1<<0;
TIM1->EGR|=1<<5;
TIM1->BDTR|=0x2D; // 死区时间设定,5US死区时间
TIM1->BDTR|=1<<15; // 刹车使能位置1,开启所有输出通道
TIM1->CCER=0x555; //主输出与互补输出都为高电平有效
}
stm32f103zet6则输出都正常。stm32f103c8是有高级定时器 time1 的 求高手解答
void BLDC_Time1_Init( unsigned int arr,unsigned int psc) //PWM初始化程序
{
RCC->APB2ENR|=1<<11; // 使能定时器1时钟
RCC->APB2ENR|=1<<2; //使能IO口A时钟
RCC->APB2ENR|=1<<3; //使能IO口B时钟
//RCC->APB2ENR|=1<<0; //开启辅助时钟
GPIOB->CRH&=0X000FFFFF; // 清除PB13PB14,15状态寄存器位
GPIOB->CRH|=0XBBB00000; // 设定PB13PB14,15//TIM1CH1N,TIM1CHH2N CH3N输出
GPIOA->CRH&=0XFFFFF000; // 清除PA8,9,10状态寄存器位
GPIOA->CRH|=0X00000BBB; // 设定PA8,9,10为复用功能TIM1CH1,2,3输出
//GPIOB->ODR|=1<<13;
//GPIOB->ODR|=1<<14;
//GPIOB->ODR|=1<<15;
//GPIOA->ODR|=1<<8;
//GPIOA->ODR|=1<<9;
//GPIOA->ODR|=1<<10;
TIM1->CR2&=0X0000;
TIM1->CCR1=500; //捕获比较预装载值
TIM1->CCR2=200;
TIM1->CCR3=400;
TIM1->ARR=arr; // 设定计数器自动重装值
TIM1->PSC=psc; // 预分频器不分频
// TIM1->CCER|=1<<0; // TIM1CH1 通道开关
// TIM1->CCER|=1<<2; // TIM1CH1N 通道开关
// TIM1->CCER|=1<<4; // TIM1CH2 通道开关
// TIM1->CCER|=1<<6; // TIM1CH2N 通道开关
// TIM1->CCER|=1<<8; // TIM1CH3 通道开关
// TIM1->CCER|=1<<10; // TIM1CH3N 通道开关
TIM1->CCMR1|=7<<4; // TIM1CH1 PWM2模式
TIM1->CCMR1|=7<<12; // TIM1CH2 PWM2模式
TIM1->CCMR2|=7<<4; // TIM1CH3 PWM2模式
TIM1->CCMR1|=1<<3; // TIM1CH1 预装载使能
TIM1->CCMR1|=1<<11; // TIM1CH2 预装载使能
TIM1->CCMR2|=1<<3; // TIM1CH3 预装载使能
TIM1->CR1|=0X80; // CR1 ARPE自动重装载预装载允许位使能
TIM1->CR1|=0X01; // 使能定时计数器1
TIM1->EGR|=1<<0;
TIM1->EGR|=1<<5;
TIM1->BDTR|=0x2D; // 死区时间设定,5US死区时间
TIM1->BDTR|=1<<15; // 刹车使能位置1,开启所有输出通道
TIM1->CCER=0x555; //主输出与互补输出都为高电平有效
}
已退回10积分