定时器不工作,看看代码哪里不对
#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:34 编辑
仿真看能不能进中断 zhangyihua 发表于 2014-10-27 14:29
仿真看能不能进中断
代码没有错误是不是? LZ有什么现象表明定时器不工作?
qtds67 发表于 2014-10-27 15:39
LZ有什么现象表明定时器不工作?
板子没反应,我是想让灯闪起来 zsikuan 发表于 2014-10-27 15:43
板子没反应,我是想让灯闪起来
你都没确定是不是定时器不工作的问题,点灯放到中断处理中去???
定时器延时多长才能看到灯闪,算了没有 先测试灯的IO配置好了没。再确定是不是定时器问题。 主程序活着的话,一般都是配置问题,看看芯片资料吧 本帖最后由 didadida 于 2014-10-27 17:23 编辑
新手么?建议来一个逻辑分析仪,最便宜的那种就行,就是一个用于观察数字信号的“示波器”了,当然你有示波器的话另说。另外stm32的库里有一个官方的文档,这里边都是例程,绝对可以运行的,你修改引脚之类的就行了。有的时候,还是少提问,多看文档。
刚才想上传,但是文件有点大(18.7M),你就百度搜索 stm32f10x_stdperiph_lib_um 下载就行 {:smile:}
程序编译没错的话,建议还是仿真下,一步步的走,分析定位问题 APB1时钟36M,计数35999+1=36000,故计数频率为36000000/36000=1000Hz。
计数2000,应该是2s一次中断。
先进入debug模式,在TIM3_IRQHandler里打个断点,看能不能进到中断里。
再就是看看STM32F10x_StdPeriph_Lib_V3.5.0\Project\STM32F10x_StdPeriph_Examples里的例子,看看人家是怎么写的。
页:
[1]