打印

SysTick程序问题

[复制链接]
3747|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinxing619|  楼主 | 2011-5-23 21:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是一个用SysTick用作延时的程序,实现功能是使LED以1S时间闪烁,但调试不成功,灯一直是亮的,不知错在哪,请高手指点,谢谢了!!!
/****************************************************
Description: 将SysTick定时器用来延时,使LED_1以1S
    间隔闪烁
Date: 05.23.2011
Question:
*****************************************************/
/**************include*******************************/
#include "stm32f10x_lib.h"
/***********bian liang ding yi***********/
ErrorStatus HSEStartUpStatus;
GPIO_InitTypeDef GPIO_InitStructure;
extern vu32 TimingDelay;
/**********han shu sheng ming************/
void RCC_Config(void);
void GPIO_Config(void);
void SysTick_Init(void);
void Init(void);
void Delay_Ms(u32 Ms);
/****************main********************/
int main(void)
{
   Init();
while(1)
{
  GPIO_SetBits(GPIOC , GPIO_Pin_7);
  Delay_Ms(1);
  GPIO_ResetBits(GPIOC , GPIO_Pin_7);
  Delay_Ms(10000);
}
}
/**********************yan shi**************************************/
void Delay_Ms(u32 Ms)
{
  SysTick_CounterCmd(SysTick_Counter_Enable); //使能滴答计数
  TimingDelay = Ms ;
  while(TimingDelay != 0);
  SysTick_CounterCmd(SysTick_Counter_Disable); //失能滴答计数
  SysTick_CounterCmd(SysTick_Counter_Clear); //清除滴答计数
}  
/***************init**********************/
void Init()
{
RCC_Config();
SysTick_Init();
GPIO_Config();
}
/***************Systick init***************/
void SysTick_Init()
{
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK); //设置SysTick时钟为HCLK/8=9MHz.
NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick , 3 , 0); //设置系统优先级
SysTick_SetReload(72000); //当计数器计数到0时,经历时间为1/(9MHZ/9000)=1ms.
SysTick_ITConfig(ENABLE); //使能中断
}
/***************RCC config*****************/
void RCC_Config()
{
RCC_DeInit(); //RCC reset
RCC_HSEConfig(RCC_HSE_ON); //HSE she zhi
HSEStartUpStatus = RCC_WaitForHSEStartUp(); //config HSE
if (SUCCESS == HSEStartUpStatus) //wait for qi zheng
{
  FLASH_SetLatency(FLASH_Latency_2); //set FLASH
  RCC_PLLConfig(RCC_PLLSource_HSE_Div1 , RCC_PLLMul_9);  //set PLL
  RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); //set SYSCLK source
  RCC_HCLKConfig(RCC_SYSCLK_Div1); //set HCLK = SYSCLK
  RCC_PCLK1Config(RCC_HCLK_Div2);  //set PCLK1 = HCLK/2
  RCC_PCLK2Config(RCC_HCLK_Div1);  //set PCLK2 = HCLK
  RCC_PLLCmd(ENABLE);  //shi neng PLL   
}
}
/****************GPIO config**************/
void GPIO_Config()
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC , ENABLE);
/********GPIOC  Init***********************************/
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;     //C jiao tuiwan shuchu
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_Init(GPIOC , &GPIO_InitStructure);
}

中断函数的内容是
vu32 TimingDelay = 0;
void SysTickHandler(void)
{
TimingDelay--;
}
沙发
ilovezeno| | 2011-5-23 22:58 | 只看该作者
你用的是哪个版本的库阿,看上去很老古董阿。。。
直接换3.5 简单多了。。。。。。

使用特权

评论回复
板凳
ilovezeno| | 2011-5-23 23:00 | 只看该作者
你的倒数TimingDelay是不是需要加上__IO ......

使用特权

评论回复
地板
jinxing619|  楼主 | 2011-5-24 00:39 | 只看该作者
回复2楼:这个库是在网上下载的,具体哪个版本不知道呀
回复3楼:TimingDelay是自己定义的一个变量,加-IO有什么不同吗?

使用特权

评论回复
5
jinxing619|  楼主 | 2011-5-24 00:41 | 只看该作者
请问3.5版本的库程序在哪可以下呀?

使用特权

评论回复
6
songbangyan| | 2011-5-24 09:17 | 只看该作者
GPIO_SetBits(GPIOC , GPIO_Pin_7);
  Delay_Ms(1);
  GPIO_ResetBits(GPIOC , GPIO_Pin_7);
  Delay_Ms(10000);
再仔细看看,你间隔的时间不大对哦,如果你的LED是低电平点亮,那么确实是一直是亮起的……

使用特权

评论回复
7
jinxing619|  楼主 | 2011-5-24 09:59 | 只看该作者
是高电平点亮,这个是我调试的时候设置的时间,这个程序我估计是在Delay_Ms();里不能出来,所以就是一直点亮的,,不知原因何在??

使用特权

评论回复
8
bili| | 2011-5-24 10:50 | 只看该作者
SYSTICK也是要使能才能跑的!

使用特权

评论回复
9
jinxing619|  楼主 | 2011-5-24 11:38 | 只看该作者
回复8楼:我在Delay_Ms();中使能了,程序调用Delay_Ms();则会开启SysTick定时器的呀

使用特权

评论回复
10
kekeke| | 2011-5-24 13:21 | 只看该作者
可以开启的

使用特权

评论回复
11
jinxing619|  楼主 | 2011-5-24 14:13 | 只看该作者
我找到错误在哪了,原来是启动文件有问题,我换了个其他的启动文件,就可以正常运行了,这个启动文件真是奇怪,以前的程序都可以用,用到SysTick时,这个就不行了
谢谢大家的帮忙呀!!谢谢

使用特权

评论回复
12
jinxing619|  楼主 | 2011-5-24 14:16 | 只看该作者
具体原因是什么,我想还得去深究启动文件了,可惜没那时间和精力呀!

使用特权

评论回复
13
mxb882208| | 2011-5-24 16:00 | 只看该作者
我随便看看

使用特权

评论回复
14
zhiyonghe| | 2011-5-24 17:26 | 只看该作者
请问3.5版本的库程序在哪可以下呀?
jinxing619 发表于 2011-5-24 00:41



同问

使用特权

评论回复
15
ilovezeno| | 2011-5-30 21:53 | 只看该作者
U can find v3.5 in official website www.st.com......

使用特权

评论回复
16
lxj19901115| | 2011-8-18 21:29 | 只看该作者
7# jinxing619
你把第一个延时函数的参数设置为10,在看看

使用特权

评论回复
17
lvyuanchuan电| | 2011-8-23 17:42 | 只看该作者
:) 学习下

使用特权

评论回复
18
wenzj12345| | 2012-3-19 13:46 | 只看该作者
学习···:lol

使用特权

评论回复
19
mm7989680| | 2012-6-29 23:46 | 只看该作者
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
不是
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
你闪的太快了所有一直亮

使用特权

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

本版积分规则

10

主题

38

帖子

1

粉丝