来源 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****/
文章评论(0条评论)
登录后参与讨论