硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4946|回复: 3
收起左侧

[有问必答] STM32F407主频超到536M是的问题?

[复制链接]

2

主题

1

回帖

2

积分

新手上路

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

        GPIO_InitTypeDef GPIO_InitStructure ;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOI,ENABLE);
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Pin=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
11.PNG

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117546
QQ
发表于 2016-4-4 00:01:06 | 显示全部楼层
问题已经解决,存在两个问题
1. 这里仅仅是定义了一个变量RCC_ClocksTypeDef* RCC_Clocks;,没有实体,需要分配内存空间,改成RCC_ClocksTypeDef   RCC_Clocks;
2. TIM_ClearITPendingBit(TIM3,TIM_FLAG_Break);标志清楚错误,应该是清楚定时器更新标志,改成  TIM_ClearITPendingBit(TIM3, TIM_FLAG_Update);
QQ图片20160404001232.png
回复

使用道具 举报

2

主题

1

回帖

2

积分

新手上路

积分
2
 楼主| 发表于 2016-4-4 09:46:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:
问题已经解决,存在两个问题
1. 这里仅仅是定义了一个变量RCC_ClocksTypeDef* RCC_Clocks;,没有实体,需要分配内存空间,改成RCC_ClocksTypeDef   RCC_Clocks;
2. TIM_ClearITPendingBit(TIM3,TIM_FLAG_Break);标志清楚错误,应该是清楚定时器更新标志,改成  TIM_ClearITPendingBit(TIM3, TIM_FLAG_Update);
.......
感谢大哥帮忙,问题完美解决!
QQ图片20160404000848.png
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-14 01:12 , Processed in 0.050940 second(s), 32 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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