OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3971|回复: 1

请大家帮忙看下将这段由库函数编写定时器的程序转为寄存器操作的哪里有没有写错了

[复制链接]

6

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2013-6-17
在线时间
7 小时
发表于 2013-6-18 14:58:12 | 显示全部楼层 |阅读模式

库程序代码:
void TIM_Configuration(void)
{
  TIM_TimeBaseInitTypeDef   TIM_TimeBaseStructure;
 
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  TIM_DeInit(TIM2);

  TIM_TimeBaseStructure.TIM_Period=5000;
  TIM_TimeBaseStructure.TIM_Prescaler=0;
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
  TIM_PrescalerConfig(TIM2,359,TIM_PSCReloadMode_Immediate);//时钟频率为72MHz/(359+1)=200000
  TIM_ARRPreloadConfig(TIM2, DISABLE);
  TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

  TIM_Cmd(TIM2, DISABLE);
}
改成寄存器部分我是这样子编写的:
void TIM2_Init(void)
{
     RCC->APB1ENR|=1<<0;
  TIM2->ARR=5000; 
  TIM2->SC=359;  
  TIM2->CR1|=0x0001;////使能定时器2,该寄存器第5位为DIR 0为向上计数模式 1为向下计数模式
  TIM2->DIER|=1<<0;
  TIM2->DIER|=1<<6;
  
  TIM2->EGR=0x0001;
  TIM2->CR1|=0x0080;
  TIM2->DIER|=0x0001;
  TIM2->CR1&=~(0x0001);     
    MY_NVIC_Init(1,3,TIM2_IRQChannel,2);//抢占1,子优先级3,组2        
}
但程序运行的结果不一样 应该是哪里写错了。

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

55

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-5-24
在线时间
9 小时
发表于 2013-6-18 17:52:44 | 显示全部楼层
库函数操作中TIM2时钟木有分频,寄存器操作中有360分频。顺便告诉你,TIM2不分频的话时钟是36M的哦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 14:46

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表