原创 学习STM32F的第一个实验跑马灯

2009-8-4 08:36 1964 2 2 分类: MCU/ 嵌入式

来源 CEPARK网站http://www.cepark.com/Index.html  作者: hnrain


为了完成这个实验我是费了九牛二虎之力啊!刚开始是因为库文件的路径没设对编译通不过,好不容易在几位大侠的指点下改了路径编译通过了.仿真运行系统又一个劲提示堆栈溢出,可是却找不到堆栈设置的地方.后来看了函数库才知道我没有初始化堆栈指针.初始化了NVIC终于调试通过了!


经过这一翻的折磨才发现NVIC的配置是程序运行的最必要条件,没有NVIC的配置程序根本不能正常运行!象其他的RCC和SYSTICK也都很重要但不是必要的,在程序不初始化也可以按照默认方式运行.


/* Includes ------------------------------------------------------------------*/
#include "stm32f10x_lib.h"


ErrorStatus HSEStartUpStatus;
vu32 count = GPIO_Pin_4;


/*******************************************************************************
* Function Name  : NVIC_Configuration
* Description    : Configures Vector Table base location.[配置中断向量表的起始位置]
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void NVIC_Configuration(void)
{
#ifdef  VECT_TAB_RAM 
  /* Set the Vector Table base location at 0x20000000 [设置中断向量表的起始位置0x20000000]*/
  NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
#else  /* VECT_TAB_FLASH  */
  /* Set the Vector Table base location at 0x08000000 [设置中断向量表的起始位置0x0x08000000]*/
  NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
#endif
}
/*******************************************************************************
* Function Name  : Led_Configuration
* Description    : LED输出配置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Led_Config(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;


  /* Enable GPIOC clock [使能GPIOC时钟]*/
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);


  /* Configure PC.06, PC.07, PC.08 and PC.09 as output push-pull */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_4 | GPIO_Pin_5;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
}


/*******************************************************************************
* Function Name  : Led_RW_OFF
* Description    : LED输出低电平
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Led_RW_OFF(void)
{   
  GPIO_ResetBits(GPIOC, GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_4 | GPIO_Pin_5);
}


/*******************************************************************************
* Function Name  : Led_RW_ON
* Description    : 轮流点亮4个LED
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void Led_RW_ON(void)
{
  switch(count)
  {
      case GPIO_Pin_4:
      {
          Led_RW_OFF();         
          GPIO_SetBits(GPIOC,GPIO_Pin_4 );
          count = GPIO_Pin_5;
      }break;
      case GPIO_Pin_5:
      {
          Led_RW_OFF();      
          GPIO_SetBits(GPIOC,GPIO_Pin_5 );
          count = GPIO_Pin_6;         
      }break;  
      case GPIO_Pin_6:
      {
          Led_RW_OFF(); 
          GPIO_SetBits(GPIOC,GPIO_Pin_6 );
          count = GPIO_Pin_7;
      }break;
      case GPIO_Pin_7:
      {
          Led_RW_OFF(); 
          GPIO_SetBits(GPIOC,GPIO_Pin_7 );
          count = GPIO_Pin_4;         
      }break;       
      default :
      {
          count = GPIO_Pin_4;         
      }break; 
  }
}


/*******************************************************************************
* Function Name  : delay
* Description    : 延时
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void delay(void)
{
  u32 i,j;
  for (i=0; i<0x0fffff; i++)
  {
      j ++;
  }
}



/*******************************************************************************
* Function Name  : main
* Description    : Main program
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
int main(void)
{


#ifdef DEBUG
  debug();/*[初始化外围设备指针]*/
#endif
  NVIC_Configuration();
  Led_Config();


  while(1)
  {
      Led_RW_ON();
      delay();
  }
}


#ifdef  DEBUG
/*******************************************************************************
* Function Name  : assert_failed[断言失败]
* Description    : Reports the name of the source file and the source line number
*                  where the assert error has occurred.
* Input          : - file: pointer to the source file name
*                  - line: assert error line source number
* Output         : None
* Return         : None
*******************************************************************************/
void assert_failed(u8* file, u32 line)
{
  /* User can add his own implementation to report the file name and line number,
     ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */


  /* Infinite loop */
  while (1)
  {


  }
}
#endif
/******************* (C) COPYRIGHT 2007 STMicroelectronics *****END OF FILE****/

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条