新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2019-9-20
- 在线时间
- 13 小时
|
1金钱
我之前发过,可能是图片有误,我也尝试过改占空比,用的是PB4,tim3ch1,复用推挽,还请原子哥帮忙再看看,才开始起步,对于内部的关系还不是很懂,
我设置的是一开始低电平啊TIM3->CCER|=1<<1; //OC1 低电平有效
贴代码如下
u16 mubiao=0;
u16 dangqian=0;
void TIM3_Int_Init(void)//把输出口和定时器一起设定
{
RCC->AHB1ENR|=1<<1;//GPIOB时钟使能
RCC->APB1ENR|=1<<1; //TIM3时钟使能
GPIO_Set(GPIOB,PIN4,GPIO_MODE_AF, 0, GPIO_SPEED_100M, 1); //设置 pb4 复用输出,推挽,100Mhz,下拉
GPIOB->ODR|=0<<4; //设置 PB4 输出 0
GPIO_AF_Set(GPIOB,4,2); //设置 PB4 为 AF2
TIM3->PSC=84-1; //预分频器,使定时器得到1MHz的计数频率
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 使能
TIM3->DIER|=1<<0; //允许更新中断
TIM3->CNT=0;
MY_NVIC_Init(1,3,TIM3_IRQn,2); //抢占1,子优先级3,组2
}
//TIM3 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->CCER|=1<<0; //OC1 输出使能
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&=~(1<<0);//清除中断标志位
}
}
//通用定时器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(5,50); //1Mhz 的计数频率,50hz的PWM,20ms,10个
while(1)
{
}
}
|
最佳答案
查看完整内容[请看2#楼]
我之前试过了这个寄存器,好像不行,改默认设置看的我眼晕,不过谢谢原子哥的回答,非常感谢,间接帮我,让我注意到端口的电平,昨天终于解决了,我用了另外一个一开始低电平的口,放弃了用tim3,用的tim9,对我没啥影响,大家如果有问题可以试试。
|