我用的是一个成熟的产品练习程序,这个产品使用的是STM32F103VBT6芯片,这个产品的源代码我也有了,
想从最基础开始学习移植程序来点亮运行灯,想使用系统嘀嗒中断服务函数来实现,每隔500MS运行灯亮灭一次。
我移植的是系统时钟初始化的函数、GPIO初始化、 系统嘀嗒中断初始化函数、系统嘀嗒中断服务函数,但是写入程序上电后运行灯亮了一下就灭了,再后来就没反应了。
后来移植了串口打印函数,最终发现当在主函数里面打印数据的时候,只是在上电的时候打印出来6个“1”,然后就没反应了,我猜可能是死机了,所以就移植了看门狗程序,发现上电后一直复位。
纠结啊,哪位大侠帮帮忙,指点指点我可能有哪些死机的原因。谢谢了。
申明一下,硬件没有任何问题。下面是代码
时钟初始化:
void SetupClock (void)
{
RCC_DeInit ();
RCC_HSEConfig (RCC_HSE_ON);
while (RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET);
RCC_HCLKConfig (RCC_SYSCLK_Div1);
RCC_PCLK2Config (RCC_HCLK_Div1);
RCC_PCLK1Config (RCC_HCLK_Div2);
RCC_ADCCLKConfig (RCC_PCLK2_Div4);
*(vu32 *)0x40022000 = 0x01;
RCC_PLLConfig (RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLCmd (ENABLE);
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig (RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != 0x08);
SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) ;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA |
RCC_AHBPeriph_SRAM,
ENABLE);
RCC_APB2PeriphClockCmd ( RCC_APB2Periph_GPIOA |
RCC_APB2Periph_GPIOB |
RCC_APB2Periph_GPIOC |
RCC_APB2Periph_GPIOD |
RCC_APB2Periph_GPIOE |
RCC_APB2Periph_ADC1 |
RCC_APB2Periph_ADC2 |
RCC_APB2Periph_TIM1 |
RCC_APB2Periph_USART1|
RCC_APB2Periph_AFIO,
ENABLE);
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2|
RCC_APB1Periph_TIM3|
RCC_APB1Periph_TIM4|
RCC_APB1Periph_USART2|
RCC_APB1Periph_USART3|
RCC_APB1Periph_BKP,
ENABLE);
SysTick_SetReload(9000);
SysTick_ITConfig(ENABLE);
}
GPIO初始化:
void SetupGPIO(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(GPIOE, &GPIO_InitStructure);
}
嘀嗒中段服务函数:
void SysTickHandler(void)
{
static unsigned long ticks1;
if(ticks1++ >= 250)
{
ticks1 = 0;
Led_On_Off = ~ Led_On_Off;
printf("%d ",2);
}
}
主函数:
int main()
{
SetupClock();
SetupGPIO();
COM_Init();
#ifdef COM1_Debug
Com1Test_Setup(); //串口1测试用115200
// printf(" %s","System_Setup was set!");
#endif
SysTick_CounterCmd(SysTick_Counter_Enable);
while(1)
{
Led_Run();
printf("%d ",1);
}
}
|