首先看我的主函数:

AD7280A_HWPowerUp()这个函数的内容为:
void AD7280A_HWPowerUp(void)
{
AD7280A_PD=1;
AD7280A_CNVST=1;
AD7280A_CS=1;
delay1ms(10);//delay >5.5ms for 1uF VREG cap
}
但是程序每回运行到这个函数的时候就会进入hard_fault():
void HardFault_Handler(void)
{
/* Go to infinite loop when Hard Fault exception occurs */
while (1)
{
}
}
查过一些原因,但是都没有解决,奇怪的是像我主函数里面注释掉的那部分语句一样,我把 AD7280A_HWPowerUp()内部的语句
// AD7280A_PD=1;
// AD7280A_CNVST=1;
// AD7280A_CS=1;
拿出来直接写到主函数里面然后仿真,程序可以运行过去,不会进到硬件中断里面去。下面我还给出相关IO口的宏定义与初始化程序,希望大家帮帮忙。
void OPTIONAL_PIN_INIT(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_12|GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}
// AD7280A I/O pins
#define AD7280A_CS PCout(13)
#define AD7280A_PD PCout(4)
#define AD7280A_ALERT PCin(11)
#define AD7280A_CNVST PCout(12)
|