SystemInit();
/* 使能GPIO(A~C)|ADC1|USART1 时钟 */
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA
| RCC_APB2Periph_GPIOB
| RCC_APB2Periph_GPIOC
| RCC_APB2Periph_AFIO
| RCC_APB2Periph_TIM1
// | RCC_APB2Periph_USART1
, ENABLE );
// RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2
// , ENABLE );
/******************CAN时钟使能**************************/
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3
| RCC_APB1Periph_USART2
// | RCC_APB1Periph_TIM4
, ENABLE);
NVIC_Configuration(); //中断向量配置
GPIO_Configuration(); //GPIO配置
Tim1_Configuration(); //PWM控制
Timer2_Configuration(); //定时器配置
while(1)
{
TIM1->SMCR|=0x0006; //开TIM1的输入触发
TIM1->DIER=0x0040; //开TIM1的触发中断
irq_zhuanzi=(u8)((GPIOA->IDR&0x00000007)); //读转子位置
//正转
switch(irq_zhuanzi) //根据转子位置,决定CCER输出相位和转子字偏移量
{
case 0x05:{
TIM1->CCER=0x3081;//1,4 ba
};break;
case 0x01:{
TIM1->CCER=0x3180; //4,5 bc
};break;
case 0x03:{
TIM1->CCER=0x3108; //2,5 ac
};break;
case 0x02:{
TIM1->CCER=0x3018; //2,3 ab
};break;
case 0x06:{
TIM1->CCER=0x3810; //3,6 cb
};break;
case 0x04:{
TIM1->CCER=0x3801; //1,6 ca
};break;
default:
break;
}
TIM2->CR1|=0x0001; //开TIM2
TIM2->DIER|=0x0050; //开TIM2中断
}
}
|