如题。定时器1为主定时器,2 3 4为从定时器。
void MYTIM_Init(u16 arr,u16 psc)
{
RCC->APB2ENR|=1<<11; //TIM1时钟使能
RCC->APB2ENR|=0x03<<2; //PA PB使能 PD
GPIOA->CRH&=0XFFFFFFF0;//PA8 输出
GPIOA->CRH|=0X0000000B;//复用功能输出
GPIOA->CRL&=0X0FFF00FF;//PA2 3 7 输出
GPIOA->CRL|=0XB000BB00;//复用功能输出
GPIOB->CRH&=0XFFFFFF0F;//PB9 输出
GPIOB->CRH|=0X000000B0;//复用功能输出
GPIOC->CRH&=0XFFF0FFFF;//PC12 输出
GPIOC->CRH|=0X00030000;//推挽输出
GPIOC->ODR|=1<<12; //PD.2输出高
TIM1->BDTR|=0xC0; //ARPE使能
TIM1->ARR=arr;//设定计数器自动重装值
TIM1->  SC=psc;//预分频器不分频
TIM1->CCMR1=0x0078; // CH1 PWM7模式, ARR预装载使能
TIM1->CCER|=1<<0; //OC1 输出使能
TIM1->CCR1=arr/2;
TIM1->CR2=0x0040;
TIM1->CCER|=1<<5; // 低电平有效
TIM1->CR1 |=0x80; //ARPE使能
TIM1->BDTR|=0x8000; //使能定时器1输出
RCC->APB1ENR|=1<<1; // TIM3时钟使能
TIM3->ARR=40000; // 设定计数器自动重装值, 是4个MCLK时钟
TIM3->  SC=0; // 预分频器????
TIM3->SMCR=0x0007; // Timer1的OC1的更新事件来触发
TIM3->DIER|=0X01; //允许触发中断
MY_NVIC_Init(2,2,TIM3_IRQChannel,2);//抢占2,子优先级2,组2
RCC->APB1ENR|=1<<0; // TIM2时钟使能
TIM2->ARR=40000; // 设定计数器自动重装值, 是4个MCLK时钟
TIM2->  SC=1; // 预分频器????
TIM2->CCMR2=0x6868; // CH3,CH4,PWM6模式, 预装载使能
TIM2->SMCR=0x0007; // Timer1的OC1的更新事件来触发
TIM2->CCER|=3<<8;
TIM2->CCER|=1<<12; // OC3 高电平有效 PA2 ICG OC4 输出使能 高电平有效    A3 SH
TIM2->CCR3=200; // 比较寄存器为值1
TIM2->CCR4=100; // 比较寄存器为值1
TIM2->CR1=0x0080; // ARPE使能
RCC->APB1ENR|=1<<2; // TIM2时钟使能
TIM4->ARR=3; // 设定计数器自动重装值, 是4个MCLK时钟
TIM4->  SC=psc; // 预分频器????
TIM4->CCMR2=0x6800; // CH2,PWM6模式, 预装载使能
TIM4->SMCR=0x0007; // Timer1的OC1的更新事件来触发
TIM4->CCER|=1<<12; // OC2 输出使能
TIM4->CCR4=2; // 比较寄存器为值1, 占空比1:3
TIM4->CR1=0x0080; // ARPE使能
}
void start(void)
{
TIM1->CR1|=0x01; //使能定时器1
TIM2->CR1|=0x01; // 使能定时器2
TIM4->CR1|=0x01; // 使能定时器4
}
int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
MYTIM_Init(32,0);
start();
while(1)
{
start();
PCout(12)=!PCout(12);
delay_ms(1000);
TIM1->CR1&=~(0x01); // 停止MCLK时钟
TIM2->CR1&=~(0x01); // 停止SH ICG
TIM4->CR1&=~(0x01); // 停止AD触发
delay_ms(1000);
}
}
示波器上完全看不到1000ms的延时。求解什么情况?
定时器的Timer_CR1寄存器的0位是这样写的,不知道各位大神们怎么理解?
|