This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

The hard fault handler



函数GPIODirmodeset()(设置IO方向和模式)中的跳入hard fault handler的
  • 是不是使用了特殊功能的引脚没有解锁呢,然后导致的硬件错误,上传你的所有代码看看

  • //*****************************************************************************
    //作者:小鑫鑫

    //时间:2014.08.05

    //*****************************************************************************

    #include <stdint.h>
    #include <stdbool.h>
    #include "inc/hw_types.h"
    #include "inc/hw_memmap.h"
    #include "inc/hw_nvic.h"
    #include "hw_ints.h"
    #include "sysctl.h"
    #include "gpio.h"
    #include "PWM.h"
    #include "pin_map.h"
    #include "timer.h"
    #include "interrupt.h"

    #include "fpu.h"


    //*****************************************************************************
    //
    // 定义彩灯对应的IO口
    //
    //*****************************************************************************

    #define RED_LED GPIO_PIN_1
    #define BLUE_LED GPIO_PIN_2
    #define GREEN_LED GPIO_PIN_3

    void SysClockinit()
    {

    SysCtlClockSet(SYSCTL_SYSDIV_4|SYSCTL_USE_PLL|SYSCTL_XTAL_16MHZ|SYSCTL_OSC_MAIN); /////设置系统时钟 PLL四分频 50MHZ*4=200MHZ 用PLL为系统时钟
    //////SYSCTL_SYSDIV_2_5 80M
    }

    void IOinit()
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF|SYSCTL_PERIPH_GPIOB| ///////|SYSCTL_PERIPH_GPIOC
    SYSCTL_PERIPH_GPIOE); /////使能外设IO F B C E D

    GPIOPinConfigure(GPIO_PB6_M0PWM0|GPIO_PB7_M0PWM1|GPIO_PB4_M0PWM2
    |GPIO_PB5_M0PWM3|GPIO_PE4_M0PWM4|GPIO_PE5_M0PWM5); ///IO管脚复用 PWM

    GPIOPinTypePWM(GPIO_PORTB_BASE,GPIO_PIN_4);

    GPIOPinTypePWM(GPIO_PORTB_BASE,GPIO_PIN_5);

    GPIOPinTypePWM(GPIO_PORTB_BASE,GPIO_PIN_6);


    GPIOPinTypePWM(GPIO_PORTB_BASE,GPIO_PIN_7);

    GPIOPinTypePWM(GPIO_PORTE_BASE,GPIO_PIN_4);

    GPIOPinTypePWM(GPIO_PORTE_BASE,GPIO_PIN_5);


    }

    void PWMinit()
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_PWM0); ////使能外设PWM M0
    SysCtlPWMClockSet(SYSCTL_PWMDIV_1); /////设置PWMclock=sysclock/PWMDIV_1
    PWMGenConfigure(PWM0_BASE, (PWM_GEN_0|PWM_GEN_1|PWM_GEN_2|PWM_GEN_3),PWM_GEN_MODE_DOWN | PWM_GEN_MODE_NO_SYNC);/////////PWM0_BASE PWM1_BASE PWM_GEN_0 PWM_GEN_1 PWM_GEN_2 PWM_GEN_3

    PWMGenPeriodSet(PWM0_BASE, PWM_GEN_0|PWM_GEN_1|PWM_GEN_2|PWM_GEN_3, 1000); ////设置周期 50M/1000 50K

    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_0, 100); //设置占空比10%
    PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 500);

    PWMGenEnable(PWM0_BASE, PWM_GEN_0|PWM_GEN_1|PWM_GEN_2|PWM_GEN_3); /////打开 PWM_GEN_0计时器

    PWMOutputState(PWM0_BASE, (PWM_OUT_0_BIT | PWM_OUT_1_BIT|PWM_OUT_2_BIT|PWM_OUT_3_BIT|PWM_OUT_4_BIT|PWM_OUT_5_BIT|PWM_OUT_6_BIT|PWM_OUT_7_BIT), true);/////使能PWM输出管脚
    }
    void timerinit()
    {
    SysCtlPeripheralEnable(SYSCTL_PERIPH_WTIMER0);/////////////SYSCTL_PERIPH_TIMER0(64) 使能外设定时器0
    ////////// 拆分定时器TimerConfigure(TIMER0_BASE,(TIMER_CFG_SPLIT_PAIR | TIMER_CFG_A_ONE_SHOT |TIMER_CFG_B_CAP_COUNT)
    TimerConfigure(WTIMER0_BASE,(TIMER_CFG_SPLIT_PAIR|TIMER_CFG_A_PERIODIC|TIMER_CFG_B_PERIODIC)); ////////////////

    TimerLoadSet(WTIMER0_BASE, TIMER_A, 10000000); ////////

    TimerEnable(WTIMER0_BASE, TIMER_A); //////////TIMER_BOTH

    TimerIntEnable(WTIMER0_BASE,TIMER_TIMA_TIMEOUT); //////////////使能中断

    TimerIntClear(WTIMER0_BASE, TIMER_TIMA_TIMEOUT); /////////////清除中断标志位


    }
    /*void Timer0AIntHandler()
    {

    TimerIntClear(WTIMER0_BASE, TIMER_TIMA_TIMEOUT); /////////////清除中断标志位TimerEnable(WTIMER1_BASE, TIMER_A) Time_catch1_Interrupt();


    }
    */

    void IntGPIOa(void)
    {

    }


    void IntGPIOb(void)
    {

    }

    void IntGPIOc(void)
    {

    }

    void main()
    {



    SysClockinit();

    IOinit();

    PWMinit();

    timerinit(); ////ewarmTARGET_IS_BLIZZARD_RB1

    // PWMPulseWidthSet(PWM0_BASE, PWM_OUT_1, 600);

    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, RED_LED|BLUE_LED|GREEN_LED);



    // IntEnable(INT_WTIMER0A); ///////////开定时器0A中断 IntDisable

    // IntMasterEnable(); ///////////////开总中断处理器||BLUE_LEDRED_LED

    //GPIOPinWrite(GPIO_PORTF_BASE, ||GREEN_LED, ui8LED);GREEN_LED

    GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3,GPIO_PIN_3);


    while(1)
    {
    }
    }