打印
[STM32F1]

定时器1遇到的诡异问题

[复制链接]
536|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ywfw30|  楼主 | 2024-11-4 15:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 ywfw30 于 2024-11-4 16:33 编辑

stmf103c8t6定时器1遇到的诡异问题:

1.  想通过定时器1产生1s的中断用作计时,
具体参数配置 TIM1_Int_Init(9999,7199);

void TIM1_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能

        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值        
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  
        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, //TIM2
                TIM_IT_Update ,
                ENABLE  //使能
                );
        NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM3中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //先占优先级0级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
        NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

        TIM_Cmd(TIM1, ENABLE);  //使能TIMx外设
                                                         
}



2.遇到的诡异问题是和PA0、PA1管脚有关
如果程序中不用PA0、PA1管脚,那么定时器可以稳定的产生1s中断
可是一旦要用到PA0、PA1管脚,定时器的中断时间突然变成了3s??????????

用到PA0和PA1时的代码如下,仅仅初始化一下就会影响定时器1
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能PORTA时钟
GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0设置成输入,默认上拉         
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_1;//PA0
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //PA0设置成输入,默认上拉         
GPIO_Init(GPIOA, &GPIO_InitStructure);



3.想不通PA0、PA1怎么影响到定时器1呢,感觉有点无厘头??

难道买到假的芯片了?不可能这种假法吧??










使用特权

评论回复
沙发
海滨消消| | 2024-11-5 10:32 | 只看该作者
针对STM32F103C8T6定时器1遇到的问题,确保PA0和PA1没有被配置为定时器1的复用功能(如输入捕获/输出比较),除非你的应用确实需要这些功能。

使用特权

评论回复
板凳
qinlu123| | 2024-11-5 11:19 | 只看该作者
用cubeMX生成代码试一下,有可能你的程序别的地方对定时器配置了

使用特权

评论回复
地板
laocuo1142| | 2024-11-5 13:00 | 只看该作者
尝试将PA0和PA1配置为其他模式(如浮空输入或下拉输入),以查看问题是否仍然存在。
如果问题仍然存在,考虑将这两个引脚用于其他目的或完全禁用它们。

使用特权

评论回复
5
xionghaoyun| | 2024-11-5 13:37 | 只看该作者
学习一下

使用特权

评论回复
6
flycamelaaa| | 2024-11-5 14:00 | 只看该作者
重新检查定时器1的配置,确保所有参数都正确无误。
确保没有其他中断或任务干扰定时器1的正常工作。

使用特权

评论回复
7
QuakeGod| | 2024-11-5 15:46 | 只看该作者
初始化的问题。

void TIM1_Int_Init(u16 arr,u16 psc)
{
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure = {0};
        NVIC_InitTypeDef NVIC_InitStructure ={0};

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能

        TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值        
        TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值  
        TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
        TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

使用特权

评论回复
8
powerantone| | 2024-11-5 18:00 | 只看该作者
检查STM32F103C8T6芯片和周围电路的连接是否正确。

使用特权

评论回复
9
ywfw30|  楼主 | 2024-11-6 09:06 | 只看该作者
QuakeGod 发表于 2024-11-5 15:46
初始化的问题。

void TIM1_Int_Init(u16 arr,u16 psc)

厉害了,确实如此,改完后就好了。
搞不懂还要初始化0呀,不是默认的都是0吗

使用特权

评论回复
10
stormwind123| | 2024-11-6 10:00 | 只看该作者
查阅STM32F103C8T6的参考手册和定时器相关的文档

使用特权

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

本版积分规则

14

主题

55

帖子

0

粉丝