OpenEdv-开源电子网

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

STM32F407主频超到536M是的问题?

[复制链接]

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2016-3-16
在线时间
9 小时
发表于 2016-4-3 19:09:50 | 显示全部楼层 |阅读模式
用STM32F407的定时器3定时500ms,在定时器3中断服务程序中,让IO口状态反转,通过示波器来测试定时器的定时时间是否准确。发现在程序中设置定时500ms,结构示波器显示1.29us,于是调用 RCC_GetClocksFreq()函数查看系统主频,发现主频是536M多。不知道什么原因?大家帮忙看看,下面是我的代码:
void GPIO_Config(void)
{

        GPIO_InitTypeDef GPIO_InitStructure ;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOC,ENABLE);
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10|GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
        GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOI,&GPIO_InitStructure);
}



RCC_ClocksTypeDef* RCC_Clocks;

int main(void)
{
       

        GPIO_Config();
        bsp_Time3_Init(5000-1,8400-1);//定时500ms

        while(1)
        {         

                RCC_GetClocksFreq(RCC_Clocks);   
        }

}


void bsp_Time3_Init(uint32_t arr,uint32_t psc)
{
        /*定义定时器结构体*/
        TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
        /*使能定时器的时钟*/
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);      
        /*参数设置*/
        TIM_TimeBaseInitStructure.TIM_Period = arr; //设置自动重载计数周期值       
        TIM_TimeBaseInitStructure.TIM_Prescaler = psc; //设置分频系数
        TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
        TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1; //设置时钟分频因子
        TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0x0000;                /* TIM1 和 TIM8 必须设置 */       
        /*初始化定时器结构体*/
        TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);  
        /*配置定时器3中断*/
        Time3_NVIC_Configuration();
        /*允许定时器更新中断*/
        TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

        TIM_ARRPreloadConfig(TIM3, ENABLE);
        /*定时器使能*/
        TIM_Cmd(TIM3,ENABLE);

}


uint8_t ledflag2=0;
void TIM3_IRQHandler(void)
{
       

        if(TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET)
        {

                 ledflag2 = ~ledflag2;
                 if(ledflag2 ==0x00)
                 {
                    GPIOI->BSRRL = GPIO_Pin_8;

                 }
                 else
                 {
                    GPIOI->BSRRH = GPIO_Pin_8;
                 }
        }
        /*清除中断表示位*/
        TIM_ClearITPendingBit(TIM3,TIM_FLAG_Break);

}


调试结果如下:
主频 :536887720
定时时间:1.27us


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

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2016-3-16
在线时间
9 小时
 楼主| 发表于 2016-4-3 19:13:27 | 显示全部楼层
示波器测试图片如下:
H:\11.PNG
11.PNG
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
24
金钱
24
注册时间
2016-3-16
在线时间
9 小时
 楼主| 发表于 2016-4-4 09:50:10 | 显示全部楼层
问题已解决,自己没注意指针问题。清除标志位写错了。。
http://bbs.armfly.com/read.php?tid=18338&ds=1&page=e#a
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 18:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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