zsikuan 发表于 2014-10-27 13:59:39

定时器不工作,看看代码哪里不对

#include"stm32f10x.h"
#include"stm32f10x_gpio.h"
#include"stm32f10x_rcc.h"
#include"stm32f10x_tim.h"
#include"delay.h"

void RCC_Configuration(void)
{
   
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
}

void GPIO_Configuration(void)
{
   
        GPIO_InitTypeDef GPIO_InitStructure;
   
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_Init(GPIOD,&GPIO_InitStructure);

    GPIO_ResetBits(GPIOD,GPIO_Pin_7);

}

void TIM3_Configuration(void)
{

    TIM_TimeBaseInitTypeDef TIMEBaseInitStructure;
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
   
    TIMEBaseInitStructure.TIM_Period=2000;
    TIMEBaseInitStructure.TIM_Prescaler=35999;
    TIMEBaseInitStructure.TIM_ClockDivision=0;
    TIMEBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3,&TIMEBaseInitStructure);

    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);

    TIM_Cmd(TIM3,ENABLE);
}

void NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
   
    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}

void TIM3_IRQHandler(void)
{
        if(GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_7)==Bit_RESET)
        {
                //LED 熄灭
      GPIO_SetBits(GPIOD,GPIO_Pin_7);       
        }
        else
        {
      //LED 发光
      GPIO_ResetBits(GPIOD,GPIO_Pin_7);
        }
    TIM_ClearITPendingBit(TIM3,TIM_IT_Update);
}

int main(void)
{
        RCC_Configuration();
        GPIO_Configuration();
    TIM3_Configuration();
    NVIC_Configuration();
        while(1);
}

新手学习,没有一个程序一次成功过,真伤心!

zhangyihua 发表于 2014-10-27 14:29:49

本帖最后由 zhangyihua 于 2014-10-27 14:34 编辑

仿真看能不能进中断

zsikuan 发表于 2014-10-27 14:41:43

zhangyihua 发表于 2014-10-27 14:29
仿真看能不能进中断

代码没有错误是不是?

qtds67 发表于 2014-10-27 15:39:04

LZ有什么现象表明定时器不工作?

zsikuan 发表于 2014-10-27 15:43:02

qtds67 发表于 2014-10-27 15:39
LZ有什么现象表明定时器不工作?

板子没反应,我是想让灯闪起来

qtds67 发表于 2014-10-27 16:40:37

zsikuan 发表于 2014-10-27 15:43
板子没反应,我是想让灯闪起来

你都没确定是不是定时器不工作的问题,点灯放到中断处理中去???
定时器延时多长才能看到灯闪,算了没有

Robin_King 发表于 2014-10-27 16:42:53

先测试灯的IO配置好了没。再确定是不是定时器问题。

ml1306 发表于 2014-10-27 16:43:39

主程序活着的话,一般都是配置问题,看看芯片资料吧

didadida 发表于 2014-10-27 17:22:36

本帖最后由 didadida 于 2014-10-27 17:23 编辑

新手么?建议来一个逻辑分析仪,最便宜的那种就行,就是一个用于观察数字信号的“示波器”了,当然你有示波器的话另说。另外stm32的库里有一个官方的文档,这里边都是例程,绝对可以运行的,你修改引脚之类的就行了。有的时候,还是少提问,多看文档。

刚才想上传,但是文件有点大(18.7M),你就百度搜索 stm32f10x_stdperiph_lib_um 下载就行 {:smile:}

llj1007 发表于 2014-10-27 17:44:33

程序编译没错的话,建议还是仿真下,一步步的走,分析定位问题

sbusr 发表于 2014-10-27 18:00:00

APB1时钟36M,计数35999+1=36000,故计数频率为36000000/36000=1000Hz。
计数2000,应该是2s一次中断。
先进入debug模式,在TIM3_IRQHandler里打个断点,看能不能进到中断里。
再就是看看STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples里的例子,看看人家是怎么写的。
页: [1]
查看完整版本: 定时器不工作,看看代码哪里不对