关于STM32F103ZE和STM32F103RBT6的问题

#我这里有一段使用ze来实现信号分解的代码,其中用了定时器7。
现在我要使用rb来实现信号分解,我直接把代码里面关于tim7配置的代码改成tim4,可以达到目的吗?

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7760847
  • 这篇博客你也可以参考下:STM32F107高级定时器TIM1使用 增量编码器接口配置
  • 除此之外, 这篇博客: STM32F103C8T6使用TIM3和TIM4实现呼吸灯中的 6、项目设置 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    在这里插入图片描述
    在这里插入图片描述

  • 以下回答来自chatgpt:

    回答:将代码中关于TIM7配置的部分直接改成TIM4是不可以达到想要的效果的。因为STM32F103ZE和STM32F103RBT6这两个型号的微控制器使用基本定时器TIM7作为主要驱动DAC的定时器。而将代码中关于TIM7配置的部分直接改成TIM4,会导致无法启动DAC的正常工作。如果需要使用TIM4作为主要驱动DAC的定时器,必须在代码中重新配置TIM4,并在相关的函数和中断程序中进行相应的修改。

    配置TIM4作为主要驱动DAC的定时器的具体步骤如下:

    1.对TIM4的时钟进行使能。

    根据参考资料中的内容,选择该型号微控制器所使用的时钟源,然后对TIM4的时钟进行使能。具体代码如下:

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
    

    2.对TIM4进行初始化配置。

    初始化TIM4需要使用TIM_TimeBaseInitTypeDef结构体变量和TIM_TimeBaseInit()函数。具体代码如下:

    TIM_TimeBaseInitTypeDef tim4_init_struct;
    tim4_init_struct.TIM_Period = 1000-1;
    tim4_init_struct.TIM_Prescaler = 7200-1;
    tim4_init_struct.TIM_ClockDivision = 0;
    tim4_init_struct.TIM_CounterMode = TIM_CounterMode_Up;
    tim4_init_struct.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM4, &tim4_init_struct);
    

    3.使能TIM4的中断和更新事件。

    在初始化TIM4之后,需要使用TIM_ITConfig()函数使能TIM4的中断和更新事件。具体代码如下:

    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
    TIM_Cmd(TIM4, ENABLE);
    

    4.编写TIM4的中断处理程序。

    TIM4的中断处理程序与TIM2、TIM3等定时器的中断处理程序类似。具体代码如下:

    void TIM4_IRQHandler(void)
    {
        if(TIM_GetITStatus(TIM4, TIM_IT_Update)!=RESET)
        {
            /*
             * 产生中断后,想要执行的动作
             */
            TIM_ClearITPendingBit(TIM4, TIM_FLAG_Update);
        }
    }
    

    需要注意的是,在使用TIM4作为主要驱动DAC的定时器时,还需要对DAC进行相应的配置。DAC和TIM4之间的连接方式根据具体的应用场景而定,可以通过DAC_Configuration()函数进行配置。具体的使用方法可以参考相关的资料和代码示例。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^