新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2019-9-20
- 在线时间
- 13 小时
|
1金钱
如题,希望大神指点,帮帮忙,走了太多弯路了。。。
贴代码如下
u16 mubiao=0;
u16 dangqian=0;
void TIM3_Int_Init(void)//把输出口和定时器一起设定
{
RCC->AHB1ENR|=1<<1;//GPIOB时钟使能
GPIO_Set(GPIOB,PIN4,GPIO_MODE_AF, 0, GPIO_SPEED_100M, 0); //设置 pb4 复用输出,100Mhz,上拉
GPIO_AF_Set(GPIOB,4,2); //设置 PB4 为 AF2
RCC->APB1ENR|=1<<1; //TIM3时钟使能
TIM3->PSC=84-1; //预分频器,使定时器得到1MHz的计数频率
TIM3->CR1|=1<<2; //设置只有计数溢才产生更新中断
TIM3->DMAR|=1<<0; //允许定时器3计数溢出中断
TIM3->DIER|=1<<0; //允许更新中断
MY_NVIC_Init(0,2,TIM3_IRQn,2); //抢占1,子优先级3,组2
TIM3->CCMR1|=6<<4; //CH1 PWM1 模式
TIM3->CCMR1|=1<<3; //CH1 预装载使能
TIM3->CCER|=1<<0; //OC1 输出使能
TIM3->CCER|=1<<1; //OC1 低电平有效
TIM3->CR1|=1<<7; //ARPE 使能
}
//TIM14 PWM部分初始化
//PWM输出初始化
//arr:自动重装值
//psc:时钟预分频数
void MyTimer3_Startup(u16 num,u16 frequency)//定时器启动
{
mubiao=num;
dangqian=0;
TIM3->ARR=1000000/frequency-1; //设定重装值
TIM3->CCR1=TIM3->ARR/2; //CCR1等于重装值一半,是以占空比为50%
TIM3->CR1|=1<<0; //启动定时器TIM3计数
}
//定时器3中断服务程序
void TIM3_IRQHandler(void)
{
if(TIM3->SR&0X0001)//溢出中断
{
dangqian++;
if(dangqian==mubiao)
{
TIM3->CR1&=~(1<<0);//关闭定时器3
}
TIM3->SR=0x0000;
}
}
//通用定时器3中断初始化
//这里时钟选择为APB1的2倍,而APB1为42M
//arr:自动重装值。
//psc:时钟预分频数
//定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
//Ft=定时器工作频率,单位:Mhz
//这里使用的是定时器3!
int main(void)
{
delay_init(168); //延时初始化
Stm32_Clock_Init(336,8,2,7);//设置时钟,168Mhz
MY_NVIC_Init(0,2,TIM3_IRQn,2); //抢占1,子优先级3,组2
TIM3_Int_Init();
MyTimer3_Startup(10,500); //1Mhz 的计数频率,500hz的PWM,2ms,10个
while(1)
{
}
}
|
-
|