3563|8

10

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

怪异!两个程序顺序互换后程序无法运行??? [复制链接]

5芯积分
本帖最后由 zys230719 于 2014-4-23 16:02 编辑

现象描述:STM32F103VET6,两个外设初始化函数Time_Int();PWM_TIM1_init();若Time_Int();在前,则PWM无输出,若Time_Int();在后,有波形输出。

可以.jpg (76.68 KB, 下载次数: 0)

可以.jpg

不行.jpg (72.99 KB, 下载次数: 0)

不行.jpg

试验程序.rar

3.76 MB, 下载次数: 1

此帖出自stm32/stm8论坛

最新回复

估计可能是Remap的事,你把Remap的东西改到前边试试。  详情 回复 发表于 2014-4-24 09:07
点赞 关注
 

回复
举报

10

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
        PWM_TIM1_init();
        timer_init();
       若将上述初始化函数顺序颠倒,即timer_init();在前,则PE9无波形输入。将timer_init();置后,则有波形输出。怪异???

此帖出自stm32/stm8论坛
 
 

回复

4997

帖子

19

TA的资源

裸片初长成(初级)

板凳
 
什么现象?问题都没有描述如何回复?
此帖出自stm32/stm8论坛

点评

1楼有补充。 PWM_TIM1_init(); timer_init(); 管脚有波形输入,程序正常。 若: timer_init(); PWM_TIM1_init(); 管脚无波形,程序不正常。  详情 回复 发表于 2014-4-23 14:19
 
个人签名我的博客
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

4
 
zhaojun_xf 发表于 2014-4-23 14:11
什么现象?问题都没有描述如何回复?

1楼有补充。        PWM_TIM1_init();
        timer_init();

管脚有波形输入,程序正常。       
若:        timer_init();

PWM_TIM1_init();
管脚无波形,程序不正常。

此帖出自stm32/stm8论坛

点评

这两个函数里面的内容还可以展开一下不?  详情 回复 发表于 2014-4-23 15:51
 
 
 

回复

603

帖子

1

TA的资源

纯净的硅(中级)

5
 
zys230719 发表于 2014-4-23 14:19
1楼有补充。        PWM_TIM1_init();
        timer_init();


这两个函数里面的内容还可以展开一下不?
此帖出自stm32/stm8论坛

点评

附件里有。 void Timer_init(void) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ; //声明结构体 NVIC_InitTypeDef NVIC_InitStructure; //声明中断结构体 RCC_APB1PeriphClock  详情 回复 发表于 2014-4-23 16:04
 
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

6
 
sjtitr 发表于 2014-4-23 15:51
这两个函数里面的内容还可以展开一下不?

附件里有。
void Timer_init(void)
  {
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ;  //声明结构体
    NVIC_InitTypeDef NVIC_InitStructure;                           //声明中断结构体     
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); //打开TIM2外设时钟                        
   //**************************************************************************
   //     定时器2设置: 720分频,2ms中断一次,向上计数
   //**************************************************************************
    TIM_TimeBaseStructure.TIM_Period = 199;
    TIM_TimeBaseStructure.TIM_Prescaler = 719;

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); //初始化定时器  
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE); //开定时器中断   
    TIM_Cmd(TIM2, ENABLE); //使能定时器

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



//**********************************************
//函数名称: void PWM_TIM1_init(void)
//函数作用:
//**********************************************

void PWM_TIM1_init(void)
{
           TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure ;        //声明结构体
        TIM_OCInitTypeDef  TIM_OCInitStructure;                        //声明通道结构体
    GPIO_InitTypeDef GPIO_InitStructure;                         //声明IO结构体

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);  //GPIOE时钟
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);   //AFIO
           RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 , ENABLE);                  //TIM时钟

    GPIO_PinRemapConfig(GPIO_FullRemap_TIM1, ENABLE); // 使能重定义
       
       
        GPIO_InitStructure.GPIO_Pin    = GPIO_Pin_9;             //选择管脚
        GPIO_InitStructure.GPIO_Speed  = GPIO_Speed_50MHz;                  //配置输出速度
        GPIO_InitStructure.GPIO_Mode   = GPIO_Mode_AF_PP;                   //管脚模式为推挽输出
        GPIO_Init(GPIOE, &GPIO_InitStructure);                                       //初始化端口


       
        TIM_TimeBaseStructure.TIM_Period = 499;                  //500us
    TIM_TimeBaseStructure.TIM_Prescaler = 71;          //主时钟72分频,1MHZ

    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);                   //TIM1初始化
        TIM_ARRPreloadConfig(TIM1,ENABLE); //启动ARR影子寄存器
   //通道1         
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;  //PWM1模式
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;  //通道1 ,高有效
        TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_Low;  //通道1 ,高有效
    TIM_OCInitStructure.TIM_Pulse = 250;                          //占空比50%
        TIM_OC1Init(TIM1, &TIM_OCInitStructure);                 //初始化1通道       
    TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);//启动CCR1寄存器的影子寄存器

       
    TIM_Cmd(TIM1, ENABLE);           //开启TIM1
        TIM_CtrlPWMOutputs(TIM1, ENABLE);
}


此帖出自stm32/stm8论坛
 
 
 

回复

6040

帖子

197

TA的资源

版主

7
 
这个还是你自己仿真实际些,看看两个定时器的寄存器在两种顺序下到底有什么不同。
此帖出自stm32/stm8论坛
 
 
 

回复

973

帖子

15

TA的资源

纯净的硅(高级)

8
 
估计可能是Remap的事,你把Remap的东西改到前边试试。
此帖出自stm32/stm8论坛

点评

把定时器的中断注释掉,可以恢复正常。但问题是,为什么?是STM32硬伤?  详情 回复 发表于 2014-4-24 12:25
 
个人签名我来到这个世界,就是为了遇见你。在某天我们会相遇,然后在一起,直到最后一起离去。
 
 

回复

10

帖子

0

TA的资源

一粒金砂(中级)

9
 
一个小白 发表于 2014-4-24 09:07
估计可能是Remap的事,你把Remap的东西改到前边试试。

把定时器的中断注释掉,可以恢复正常。但问题是,为什么?是STM32硬伤?
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表