金牌会员
- 积分
- 1419
- 金钱
- 1419
- 注册时间
- 2011-11-27
- 在线时间
- 122 小时
|
发表于 2013-9-12 18:37:29
|
显示全部楼层
谢谢分享,下载学习~~
有一处不明:
//////////////////////////////////////////////////////////////////////////////////
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
//电机1
void dianji1(u16 arr,u16 psc,u16 ccr,u8 dir)
{
RCC->APB1ENR|=1<<1; //TIM3时钟使能
RCC->APB2ENR|=1<<0; //使能AFIO
RCC->APB2ENR|=1<<2; //使能PORTA时钟
TIM3->CCMR1|=7<<4; //CH1 WM2模式
TIM3->CCMR1|=1<<3; //CH1预装载使能
TIM3->CCER|=1<<0; //OC1 输出使能
TIM3->CR1=0x80; //ARPE使能
TIM3->CR1|=0x01; //使能定时器3
TIM3->ARR=arr; //设定计数器自动重装值
TIM3->SC=psc; //预分频器不分频
TIM3->CCR1=ccr; // 占空比
if(dir==0) //正转
{
GPIOA->CRL&=0XF0FF00FF;//PA2输出
GPIOA->CRL|=0X0B003300;//输出
GPIOA->ODR|=1<<2;//PA2上拉
GPIOA->ODR|=0<<3;//PA3上拉 ??? 这里可能是注释有误,但是这种情况一般写成: GPIOA->ODR &=~(1<<3);
GPIOA->ODR|=1<<6;//PA6上拉
}
else if(dir==1) //反转
{
GPIOA->CRL&=0XF0FF00FF;//PA3输出
GPIOA->CRL|=0X0B003300;//输出
GPIOA->ODR|=0<<2;//PA2上拉 ???
GPIOA->ODR|=1<<3;//PA3上拉
GPIOA->ODR|=1<<6;//PA6上拉
}
else if(dir==2) //停止
{
GPIOA->CRL&=0XF0FF00FF;//PA6输出
GPIOA->CRL|=0X03003300;//输出
GPIOA->ODR|=0<<2;//PA2上拉 ???
GPIOA->ODR|=0<<3;//PA3上拉 ???
GPIOA->ODR|=0<<6;//PA6上拉 ???
}
} |
|