论坛元老
 
- 积分
- 3347
- 金钱
- 3347
- 注册时间
- 2013-4-10
- 在线时间
- 333 小时
|
发表于 2016-5-2 14:46:24
|
显示全部楼层
本帖最后由 likunxue 于 2016-5-2 22:48 编辑
试试我这个!
/********************************************************************************************
函数名: 空间失量调制SVPWM定时器1初始化函数
调 用: SVPWM_TIM1_int(void)
参 数: 无
********************************************************************************************/
void SVPWM_TIM1_int(void)
{
RCC->APB2ENR |= 1<<11; //TIM1时钟使能
RCC->APB2ENR |= 1<<2; //使能PORTA时钟
GPIOA->CRH &= 0xFFFF0000;
GPIOA->CRH |= 0x0000BBBB; //PA8,PA9,PA10,PA11 复用功能
BIT_ADM(GPIOA->ODR, 8) = 1;
BIT_ADM(GPIOA->ODR, 9) = 1;
BIT_ADM(GPIOA->ODR,10) = 1;
BIT_ADM(GPIOA->ODR,11) = 1;
//通道1的输出配置
BIT_ADM(TIM1->CCMR1,3) = 1; //CH1预装载使能
BIT_ADM(TIM1->CCMR1,4) = 0; //CH1_PWM1模式
BIT_ADM(TIM1->CCMR1,5) = 1;
BIT_ADM(TIM1->CCMR1,6) = 1;
BIT_ADM(TIM1->CCER,0) = 1; //CH1输出使能(PA8)
BIT_ADM(TIM1->CCER,1) = 0; //主输出极性CC1P (0高电平有效,1低电平有效)
//通道2的输出配置
BIT_ADM(TIM1->CCMR1,11) = 1; //CH2预装载使能
BIT_ADM(TIM1->CCMR1,12) = 0; //CH2_PWM1模式
BIT_ADM(TIM1->CCMR1,13) = 1;
BIT_ADM(TIM1->CCMR1,14) = 1;
BIT_ADM(TIM1->CCER,4) = 1; //CH2输出使能(PA9)
BIT_ADM(TIM1->CCER,5) = 0; //主输出极性CC2P (0高电平有效,1低电平有效)
//通道3的输出配置
BIT_ADM(TIM1->CCMR2,3) = 1; //CH3预装载使能
BIT_ADM(TIM1->CCMR2,4) = 0; //CH3_PWM1模式
BIT_ADM(TIM1->CCMR2,5) = 1;
BIT_ADM(TIM1->CCMR2,6) = 1;
BIT_ADM(TIM1->CCER,8) = 1; //CH3输出使能(PA10)
BIT_ADM(TIM1->CCER,9) = 0; //主输出极性CC3P (0高电平有效,1低电平有效)
//通道4的输出配置
BIT_ADM(TIM1->CCMR2,11) = 1; //CH4预装载使能
BIT_ADM(TIM1->CCMR2,12) = 0; //CH4_PWM1模式
BIT_ADM(TIM1->CCMR2,13) = 1;
BIT_ADM(TIM1->CCMR2,14) = 1;
BIT_ADM(TIM1->CCER,12) = 1; //CH4输出使能(PA11)
BIT_ADM(TIM1->CCER,13) = 0; //主输出极性CC4P (0高电平有效,1低电平有效)
//比较寄存器初始化
TIM1->CCR1 = 0; //初始化比较寄存器全部为0初始输出低电平
TIM1->CCR2 = 0;
TIM1->CCR3 = 0;
TIM1->CCR4 = 0;
//定时器1初始化其它功能设置
TIM1->ARR = SVP.PWMPRD; //设定计数器自动重装值PWM的周期
TIM1->PSC = 0 ; //预分频器0
BIT_ADM(TIM1->CR1,7) = 1; //定时器ARPE充许
BIT_ADM(TIM1->CR1,5) = 0; //边沿对齐模式
BIT_ADM(TIM1->CR1,6) = 0;
//BIT_ADM(TIM1->CR1,4) = 1; //向下计数
//设置MMS[2:0] 主模式选择,定时器的更新中断起动从定时器
BIT_ADM(TIM1->CR2,4) = 0;
BIT_ADM(TIM1->CR2,5) = 1;
BIT_ADM(TIM1->CR2,6) = 0;
BIT_ADM(TIM1->DIER,0) = 1; //开定时器中断
BIT_ADM(TIM1->BDTR,15)= 1; //MOE位,主输出使能,只有该位是1全部 PWM才用有输出
BIT_ADM(TIM1->SR,0) = 0; //清除中断标志
MY_NVIC_Init(1,0,TIM1_UP_IRQn,4); //抢占1,子优先级0,组4
BIT_ADM(TIM1->EGR,0) = 1; //UG位,产生更新事件,软件置1,硬件自动清零
BIT_ADM(TIM1->CR1,0) = 0; //初始化关闭定时器没有PWM输出
} |
|