打印
[STM32F1]

STM32F103定时器输出频率最高只有280KHz

[复制链接]
2201|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wwzx2513|  楼主 | 2016-12-2 16:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
* 函数名:TIM2_GPIO_Config
* 描述  :配置TIM2复用输出PWM时用到的I/O
* 输入  :无
* 输出  :无
* 调用  :内部调用
*/
static void TIM2_GPIO_Config(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;   
   
    /* GPIOB clock enable */
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
   
    /*GPIOA Configuration: TIM2 channel 1 and 2 as alternate function push-pull */
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_5;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_Out_PP;       // 推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
   
    GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/*
* 函数名:TIM2_Mode_Config
* 描述  :配置TIM3输出的PWM信号的模式,如周期、极性、占空比
* 输入  :无
* 输出  :无
* 调用  :内部调用
*/
static void TIM2_Mode_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;   
    /* TIM2 clock enable */
    //PCLK1经过2倍频后作为TIM2的时钟源等于72MHz
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
    TIM2_NVIC_Configuration();
    TIM_DeInit(TIM2);
    TIM_TimeBaseStructure.TIM_Period        = (1);                  /* 自动重装载寄存器周期的值(计数值) */
    /* 累计 TIM_Period个频率后产生一个更新或者中断 */
    TIM_TimeBaseStructure.TIM_Prescaler     = (1);                  /* 时钟预分频数 72M/72== 1MHZ */
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;         /* 采样分频 */
    TIM_TimeBaseStructure.TIM_CounterMode   = TIM_CounterMode_Up;   /* 向上计数模式 */
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
//    TIM_ClearFlag(TIM2, TIM_FLAG_Update);                         /* 清除溢出中断标志 */
    TIM_Cmd(TIM2, ENABLE);                                          /* 开启时钟 */
}

这样的配置为什么输出只有280KHz?请高手指教.
沙发
wwzx2513|  楼主 | 2016-12-2 16:52 | 只看该作者
为什么刚发就结贴?

使用特权

评论回复
板凳
Xflyan| | 2016-12-2 17:53 | 只看该作者
wwzx2513 发表于 2016-12-2 16:52
为什么刚发就结贴?

没有给分直接结贴的

使用特权

评论回复
地板
Xflyan| | 2016-12-2 17:56 | 只看该作者
你的定时器又没有配置PWM输出,280KHZ怎么产生的?

使用特权

评论回复
5
wwzx2513|  楼主 | 2016-12-3 00:06 | 只看该作者
Xflyan 发表于 2016-12-2 17:56
你的定时器又没有配置PWM输出,280KHZ怎么产生的?

在中断中加个翻转,如果用PWM频率最高只有720KHz,因为要保证1%的占空比,所以72M/100=720KHZ,但没有用PWM,直接控制引脚,频率应该更快才对,怎么只有280K,最多288K,频率是在示波器上看到的
void TIM2_IRQHandler(void)
{       
        if ( TIM_GetITStatus(TIM2 , TIM_IT_Update) != RESET )
        {               
                TIM_ClearITPendingBit(TIM2 , TIM_FLAG_Update);
        
        if(i++)
        {
            i = 0;
            GPIO_ResetBits(GPIOB,GPIO_Pin_5);
        }
        else
        {
            GPIO_SetBits(GPIOB, GPIO_Pin_5);
        }
        
        }
}

使用特权

评论回复
6
皈依| | 2016-12-3 09:16 | 只看该作者
APB1只有36M 另外代码执行也要时间

使用特权

评论回复
7
皈依| | 2016-12-3 09:17 | 只看该作者
想把频率提高用楼上说的PWM做

使用特权

评论回复
8
wwzx2513|  楼主 | 2016-12-3 10:23 | 只看该作者
皈依 发表于 2016-12-3 09:16
APB1只有36M 另外代码执行也要时间

36M会有倍频,成为72M,代码极少,运行时也不可能占用1000多uS的时间吧?

使用特权

评论回复
9
wwzx2513|  楼主 | 2016-12-3 10:26 | 只看该作者
皈依 发表于 2016-12-3 09:17
想把频率提高用楼上说的PWM做

刚才又试了一遍PWM,最多72KHZ,为什么不是72M/100=720KHZ?真有些晕了,新手,请高手指教

使用特权

评论回复
10
皈依| | 2016-12-3 10:47 | 只看该作者
wwzx2513 发表于 2016-12-3 10:23
36M会有倍频,成为72M,代码极少,运行时也不可能占用1000多uS的时间吧?

APB1是72M分频下来的
另外如果PWM也不对的话先确定主频是不是72M 然后根据时钟图从APB1 TIM2一步步的往下查

使用特权

评论回复
11
mmuuss586| | 2016-12-3 12:23 | 只看该作者
程序进入中断,各种处理也需要时间的;

中断程序都改成寄存器操作看看;

使用特权

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

本版积分规则

3

主题

239

帖子

1

粉丝