MyCollege1999 2023-11-28 17:59 采纳率: 73.3%
浏览 6
已结题

Tim5 4个通道初始化后,原来的延时函数卡住了,为什么呢?

用STM32F103ZET6板子,把TIM5外设初始后,原来的延时函数就卡住了(一直在延时,走不出来了),请帮忙分下下,谢谢
定时器初始化的代码如下:main函数中调用完TIM5CapInit后,再调用BusyDelayS(10), 就走不下去了! 困惑

//20231128:尝试TIM5 4个通道一起初始化
void TIM5CapInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    TIM_ICInitTypeDef  TIM_ICInitStructure;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    //使能GPIOA时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //初始化定时器
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);

    TIM_TimeBaseStructure.TIM_Period = 0xFFFF-1;
    TIM_TimeBaseStructure.TIM_Prescaler = 72-1; //1us,总时间65ms
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);

    /* IC2,上升沿触发 TI2FP2 */
    TIM_ICInitStructure.TIM_Channel = TIM_Channel_3 | TIM_Channel_4 | TIM_Channel_2 | TIM_Channel_1;
    TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
    TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
    TIM_ICInitStructure.TIM_ICFilter = 0x0;
    TIM_PWMIConfig(TIM5, &TIM_ICInitStructure);

    TIM_SelectInputTrigger(TIM5, TIM_TS_TI2FP2);
    TIM_SelectSlaveMode(TIM5, TIM_SlaveMode_Reset);
    TIM_SelectMasterSlaveMode(TIM5,TIM_MasterSlaveMode_Enable);

    TIM_Cmd(TIM5, ENABLE);

    //使能CC捕获中断,主
    TIM_ITConfig(TIM5, TIM_IT_CC3, ENABLE);
    TIM_ITConfig(TIM5, TIM_IT_CC4, ENABLE);
    TIM_ITConfig(TIM5, TIM_IT_CC1, ENABLE);
    TIM_ITConfig(TIM5, TIM_IT_CC2, ENABLE);

    //使能中断
    NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}


延时函数是用空指令实现的:

void BusyDelayS(unsigned int s)
{
    volatile unsigned int i,j,k;
    
    
   for(k=0;k<s;k++)
   {
        for(i=0;i<1000;i++)
        {
            for(j=0;j<1000;j++)
            {

                __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();//016
                __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();//032
                __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();//048
                __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();//064
                __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();//072

            }

        }
   }

}
  • 写回答

2条回答 默认 最新

  • MyCollege1999 2023-12-19 11:46
    关注

    此问题已解决,是中断向量地址错误

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月27日
  • 已采纳回答 12月19日
  • 创建了问题 11月28日

悬赏问题

  • ¥15 unity从3D升级到urp管线,打包ab包后,材质全部变紫色
  • ¥50 comsol温度场仿真无法模拟微米级激光光斑
  • ¥15 上传图片时提交的存储类型
  • ¥15 VB.NET如何绘制倾斜的椭圆
  • ¥15 arbotix没有/cmd_vel话题
  • ¥15 odoo17的分包重新供应路线如何设置?可从销售订单中实时直接触发采购订单或相关单据
  • ¥15 用C语言怎么判断字符串的输入是否符合设定?
  • ¥15 通信专业本科生论文选这两个哪个方向好研究呀
  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?