打印

GD32F103C8T6的定时器问题

[复制链接]
4439|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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

使用特权

评论回复
5
chaos21|  楼主 | 2015-2-27 10:25 | 只看该作者
还有就是,我用的是GD32F103C8T6,开发环境是KEIL4,我用的是stm32f0的库,因为我用stm32f1的库时连最基本的设置IO口都不能实现,而用f0的库则能实现,但是时钟出现了以上的问题。

使用特权

评论回复
6
chaos21|  楼主 | 2015-2-27 10:28 | 只看该作者
在线求解答

使用特权

评论回复
7
chaos21|  楼主 | 2015-2-27 10:30 | 只看该作者
工程目录

QQ图片20150227102936.png (9.16 KB )

QQ图片20150227102936.png

使用特权

评论回复
8
kekeke| | 2015-2-27 13:56 | 只看该作者
两者之间需要改一些东西的,你不会直接移植上去的吧。时钟的设置需要修改下的。给你个例程看看

使用特权

评论回复
9
kekeke| | 2015-2-27 14:04 | 只看该作者
GD32 实验7 定时器中断实验.rar (273.98 KB)

使用特权

评论回复
10
kekeke| | 2015-2-27 14:05 | 只看该作者
GD32F103x-移植指南.pdf (521.7 KB)

使用特权

评论回复
11
yang_qingqing| | 2015-2-27 14:46 | 只看该作者
定时器时钟频率分配由硬件按以下2种情况自动设置:
1. 如果相应的APB预分频系数是1,定时器的时钟频率与所在APB总线频率一致。
2. 否则,定时器的时钟频率被设为与其相连的APB总线频率的2倍。

你的配置中APB1的分频系数是2,故而TIM2的时钟频率是APB1总线频率的2
倍,即72MHz

使用特权

评论回复
12
vivilzb1985| | 2015-3-6 15:44 | 只看该作者
注意各个寄存器的设置的吧,特别是涉及到分频这一块的。

使用特权

评论回复
13
shenmu2012| | 2015-3-8 16:24 | 只看该作者
if(HSEStartUpStatus==SUCCESS)这一句的吧,,你的外部晶振的没有正常运行的就进不到该部分程序中。

使用特权

评论回复
14
firstblood| | 2015-3-9 20:52 | 只看该作者
这个看下定时器的市中院的选择的问题吧。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

11

帖子

0

粉丝