GD32F103C8T6的定时器问题

[复制链接]
chaos21 发表于 2015-2-27 10:18 | 显示全部楼层 |阅读模式
时钟配置好了,TIM1和TIM2配置完后发现时钟都是一样的,都是8M,这是为什么?完整配置在下面,大神看看
 楼主| chaos21 发表于 2015-2-27 10:18 | 显示全部楼层
系统时钟配置
void RCC_Configuration(void)
{
       
   ErrorStatus HSEStartUpStatus;
       
   RCC_DeInit();
   //RCC_LSEConfig(RCC_LSE_ON);

    RCC_HSEConfig(RCC_HSE_ON);//8M

    HSEStartUpStatus = RCC_WaitForHSEStartUp();

    if(HSEStartUpStatus==SUCCESS)
    {
        //??HCLK(AHB??)=SYSCLK
        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        //PCLK1(APB1) = HCLK/2
        RCC_PCLK1Config(RCC_HCLK_Div2);
        //PCLK2(APB2) = HCLK
        RCC_PCLK2Config(RCC_HCLK_Div1);
                          //8/1*9=72M
                                RCC_ADCCLKConfig(RCC_ADCCLK_PCLK2_Div6);   //72M/6=12,ADC×î´óʱ¼ä²»Äܳ¬¹ý14M
                       
                          RCC_PLLConfig(RCC_PLLSource_PREDIV1, RCC_PLLMul_9);

        RCC_PLLCmd(ENABLE);

        while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

        RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

        while(RCC_GetSYSCLKSource()!=0x08);
    }
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM3 | RCC_APB1Periph_TIM14, ENABLE);
                RCC_APB2PeriphClockCmd( RCC_APB2Periph_TIM1 | RCC_APB2Periph_ADC1, ENABLE);
                RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA | RCC_AHBPeriph_GPIOB | RCC_AHBPeriph_GPIOC, ENABLE);
}
 楼主| chaos21 发表于 2015-2-27 10:19 | 显示全部楼层
TIM1和TIM2
void TIM1_FucInit(void)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        TIM_TimeBaseStructure.TIM_Period = 1999;
        TIM_TimeBaseStructure.TIM_Prescaler = 35;                                                                                 //72/72000000 = 1MHZ
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;                 //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòÉϼÆÊýģʽ
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);              //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»

        TIM_ITConfig(                                                //ʹÄÜ»òÕßʧÄÜÖ¸¶¨µÄTIMÖжÏ
                TIM1,
                TIM_IT_Update,
                ENABLE
                );

        TIM_Cmd(TIM1, DISABLE);                                      //ʹÄÜTIMxÍâÉè
}

void TIM2_FucInit(void)                                        //²úÉú300usµÄ¶¨Ê±£¬ÓÃÓÚ¿ØÖƲúÉú13¸ö24usµÄ·½²¨
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        TIM_TimeBaseStructure.TIM_Period = 1999;
        TIM_TimeBaseStructure.TIM_Prescaler = 35;                                                                                 //540*20/36000000 = 300us
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;                 //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIMÏòÉϼÆÊýģʽ
        TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);              //¸ù¾ÝTIM_TimeBaseInitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î»

        TIM_ITConfig(                                                //ʹÄÜ»òÕßʧÄÜÖ¸¶¨µÄTIMÖжÏ
                TIM2,
                TIM_IT_Update,
                ENABLE
                );

        TIM_Cmd(TIM2, DISABLE);                                      //ʹÄÜTIMxÍâÉè
}
 楼主| chaos21 发表于 2015-2-27 10:22 | 显示全部楼层
TIM1是挂在APB2高速总线上的,TIM2挂在APB1低速总线上,照理说我配置完后,TIM1是72M,而TIM2是36M,而我从示波器中得到的速度两个都是8M的。system_stm32f0xx.c中的系统时钟定义://#define SYSCLK_FREQ_HSE    HSE_VALUE
//#define SYSCLK_FREQ_24MHz  24000000  
//#define SYSCLK_FREQ_36MHz  36000000
//#define SYSCLK_FREQ_48MHz  48000000
//#define SYSCLK_FREQ_56MHz  56000000
#define SYSCLK_FREQ_72MHz  72000000
 楼主| chaos21 发表于 2015-2-27 10:25 | 显示全部楼层
还有就是,我用的是GD32F103C8T6,开发环境是KEIL4,我用的是stm32f0的库,因为我用stm32f1的库时连最基本的设置IO口都不能实现,而用f0的库则能实现,但是时钟出现了以上的问题。
 楼主| chaos21 发表于 2015-2-27 10:28 | 显示全部楼层
在线求解答
 楼主| chaos21 发表于 2015-2-27 10:30 | 显示全部楼层
工程目录
QQ图片20150227102936.png
kekeke 发表于 2015-2-27 13:56 | 显示全部楼层
两者之间需要改一些东西的,你不会直接移植上去的吧。时钟的设置需要修改下的。给你个例程看看
kekeke 发表于 2015-2-27 14:04 | 显示全部楼层
GD32 实验7 定时器中断实验.rar (273.98 KB, 下载次数: 97)
kekeke 发表于 2015-2-27 14:05 | 显示全部楼层
GD32F103x-移植指南.pdf (521.7 KB, 下载次数: 74)
yang_qingqing 发表于 2015-2-27 14:46 | 显示全部楼层
定时器时钟频率分配由硬件按以下2种情况自动设置:
1. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
2. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。

你的配置中APB1的分频系数是2,故而TIM2的时钟频率是APB1总线频率的2
倍,即72MHz
vivilzb1985 发表于 2015-3-6 15:44 | 显示全部楼层
注意各个寄存器的设置的吧,特别是涉及到分频这一块的。
shenmu2012 发表于 2015-3-8 16:24 | 显示全部楼层
if(HSEStartUpStatus==SUCCESS)这一句的吧,,你的外部晶振的没有正常运行的就进不到该部分程序中。
firstblood 发表于 2015-3-9 20:52 | 显示全部楼层
这个看下定时器的市中院的选择的问题吧。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部