Quality RTOS & Embedded Software

 Real time embedded FreeRTOS RSS feed 
Real time embedded FreeRTOS mailing list 
Quick Start Supported MCUs PDF Books Trace Tools Ecosystem TCP & FAT Training




Loading

HardFault_Handler!! -- Just flash LED on STM32F103C8T6

Posted by beyondany on November 4, 2015

Hi all,

I just want to flash a LED on a small STM32F103C8T6 dev board,but FAULT with “HardFault_Handler”.

Could someone provide samples or how to fix the Fault?

Thanks for help in advance.

startupstm32f10xmd.s ~~~~ ;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;* File Name : startupstm32f10xmd.s ;* Author : MCD Application Team ;* Version : V3.5.0 ;* Date : 11-March-2011 ;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM ;* toolchain.
;* This module performs: ;* - Set the initial SP ;* - Set the initial PC == Reset_Handler ;* - Set the vector table entries with the exceptions ISR address ;* - Configure the clock system ;* - Branches to __main in the C library (which eventually ;* calls main()). ;* After Reset the CortexM3 processor is in Thread mode, ;* priority is Privileged, and the Stack is set to Main. ;* <<< Use Configuration Wizard in Context Menu >>>
;******************************************************************************* ; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, ; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ;*******************************************************************************

; Amount of memory (in bytes) allocated for Stack ; Tailor this value to your application needs ; Stack Configuration ; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ;

Stack_Size EQU 0x00000400

            AREA    STACK, NOINIT, READWRITE, ALIGN=3

StackMem SPACE StackSize _initialsp

; Heap Configuration ; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ;

Heap_Size EQU 0x00000000

            AREA    HEAP, NOINIT, READWRITE, ALIGN=3

_heapbase HeapMem SPACE HeapSize _heaplimit

			IMPORT xPortPendSVHandler
			IMPORT xPortSysTickHandler
			IMPORT vPortSVCHandler

            PRESERVE8
            THUMB

; Vector Table Mapped to Address 0 at Reset AREA RESET, DATA, READONLY EXPORT _Vectors ;EXPORT __VectorsEnd ;EXPORT _VectorsSize

_Vectors DCD __initialsp ; Top of Stack DCD ResetHandler ; Reset Handler DCD NMIHandler ; NMI Handler DCD HardFaultHandler ; Hard Fault Handler DCD MemManageHandler ; MPU Fault Handler DCD BusFaultHandler ; Bus Fault Handler DCD UsageFaultHandler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD vPortSVCHandler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD vPortSVCHandler ; PendSV Handler DCD xPortSysTickHandler ; SysTick Handler

            ; External Interrupts
            DCD     WWDG_IRQHandler            ; Window Watchdog
            DCD     PVD_IRQHandler             ; PVD through EXTI Line detect
            DCD     TAMPER_IRQHandler          ; Tamper
            DCD     RTC_IRQHandler             ; RTC
            DCD     FLASH_IRQHandler           ; Flash
            DCD     RCC_IRQHandler             ; RCC
            DCD     EXTI0_IRQHandler           ; EXTI Line 0
            DCD     EXTI1_IRQHandler           ; EXTI Line 1
            DCD     EXTI2_IRQHandler           ; EXTI Line 2
            DCD     EXTI3_IRQHandler           ; EXTI Line 3
            DCD     EXTI4_IRQHandler           ; EXTI Line 4
            DCD     DMA1_Channel1_IRQHandler   ; DMA1 Channel 1
            DCD     DMA1_Channel2_IRQHandler   ; DMA1 Channel 2
            DCD     DMA1_Channel3_IRQHandler   ; DMA1 Channel 3
            DCD     DMA1_Channel4_IRQHandler   ; DMA1 Channel 4
            DCD     DMA1_Channel5_IRQHandler   ; DMA1 Channel 5
            DCD     DMA1_Channel6_IRQHandler   ; DMA1 Channel 6
            DCD     DMA1_Channel7_IRQHandler   ; DMA1 Channel 7
            DCD     ADC1_2_IRQHandler          ; ADC1_2
            DCD     USB_HP_CAN1_TX_IRQHandler  ; USB High Priority or CAN1 TX
            DCD     USB_LP_CAN1_RX0_IRQHandler ; USB Low  Priority or CAN1 RX0
            DCD     CAN1_RX1_IRQHandler        ; CAN1 RX1
            DCD     CAN1_SCE_IRQHandler        ; CAN1 SCE
            DCD     EXTI9_5_IRQHandler         ; EXTI Line 9..5
            DCD     TIM1_BRK_IRQHandler        ; TIM1 Break
            DCD     TIM1_UP_IRQHandler         ; TIM1 Update
            DCD     TIM1_TRG_COM_IRQHandler    ; TIM1 Trigger and Commutation
            DCD     TIM1_CC_IRQHandler         ; TIM1 Capture Compare
            DCD     TIM2_IRQHandler            ; TIM2
            DCD     TIM3_IRQHandler            ; TIM3
            DCD     TIM4_IRQHandler            ; TIM4
            DCD     I2C1_EV_IRQHandler         ; I2C1 Event
            DCD     I2C1_ER_IRQHandler         ; I2C1 Error
            DCD     I2C2_EV_IRQHandler         ; I2C2 Event
            DCD     I2C2_ER_IRQHandler         ; I2C2 Error
            DCD     SPI1_IRQHandler            ; SPI1
            DCD     SPI2_IRQHandler            ; SPI2
            DCD     USART1_IRQHandler          ; USART1
            DCD     USART2_IRQHandler          ; USART2
            DCD     USART3_IRQHandler          ; USART3
            DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10
            DCD     RTCAlarm_IRQHandler        ; RTC Alarm through EXTI Line
            DCD     USBWakeUp_IRQHandler       ; USB Wakeup from suspend

;_VectorsEnd

;_VectorsSize EQU _VectorsEnd - __Vectors

            AREA    |.text|, CODE, READONLY

; Reset handler ResetHandler PROC EXPORT ResetHandler [WEAK] IMPORT main ;IMPORT SystemInit ;LDR R0, =SystemInit ;BLX R0 LDR R0, =main BX R0 ENDP

; Dummy Exception Handlers (infinite loops which can be modified)

NMIHandler PROC EXPORT NMIHandler [WEAK] B . ENDP HardFaultHandler PROC EXPORT HardFaultHandler [WEAK] B . ENDP MemManageHandler PROC EXPORT MemManageHandler [WEAK] B . ENDP BusFaultHandler PROC EXPORT BusFaultHandler [WEAK] B . ENDP UsageFaultHandler PROC EXPORT UsageFaultHandler [WEAK] B . ENDP SVCHandler PROC EXPORT SVCHandler [WEAK] B . ENDP DebugMonHandler PROC EXPORT DebugMonHandler [WEAK] B . ENDP PendSVHandler PROC EXPORT PendSVHandler [WEAK] B . ENDP SysTickHandler PROC EXPORT SysTickHandler [WEAK] B . ENDP

Default_Handler PROC

            EXPORT  WWDG_IRQHandler            [WEAK]
            EXPORT  PVD_IRQHandler             [WEAK]
            EXPORT  TAMPER_IRQHandler          [WEAK]
            EXPORT  RTC_IRQHandler             [WEAK]
            EXPORT  FLASH_IRQHandler           [WEAK]
            EXPORT  RCC_IRQHandler             [WEAK]
            EXPORT  EXTI0_IRQHandler           [WEAK]
            EXPORT  EXTI1_IRQHandler           [WEAK]
            EXPORT  EXTI2_IRQHandler           [WEAK]
            EXPORT  EXTI3_IRQHandler           [WEAK]
            EXPORT  EXTI4_IRQHandler           [WEAK]
            EXPORT  DMA1_Channel1_IRQHandler   [WEAK]
            EXPORT  DMA1_Channel2_IRQHandler   [WEAK]
            EXPORT  DMA1_Channel3_IRQHandler   [WEAK]
            EXPORT  DMA1_Channel4_IRQHandler   [WEAK]
            EXPORT  DMA1_Channel5_IRQHandler   [WEAK]
            EXPORT  DMA1_Channel6_IRQHandler   [WEAK]
            EXPORT  DMA1_Channel7_IRQHandler   [WEAK]
            EXPORT  ADC1_2_IRQHandler          [WEAK]
            EXPORT  USB_HP_CAN1_TX_IRQHandler  [WEAK]
            EXPORT  USB_LP_CAN1_RX0_IRQHandler [WEAK]
            EXPORT  CAN1_RX1_IRQHandler        [WEAK]
            EXPORT  CAN1_SCE_IRQHandler        [WEAK]
            EXPORT  EXTI9_5_IRQHandler         [WEAK]
            EXPORT  TIM1_BRK_IRQHandler        [WEAK]
            EXPORT  TIM1_UP_IRQHandler         [WEAK]
            EXPORT  TIM1_TRG_COM_IRQHandler    [WEAK]
            EXPORT  TIM1_CC_IRQHandler         [WEAK]
            EXPORT  TIM2_IRQHandler            [WEAK]
            EXPORT  TIM3_IRQHandler            [WEAK]
            EXPORT  TIM4_IRQHandler            [WEAK]
            EXPORT  I2C1_EV_IRQHandler         [WEAK]
            EXPORT  I2C1_ER_IRQHandler         [WEAK]
            EXPORT  I2C2_EV_IRQHandler         [WEAK]
            EXPORT  I2C2_ER_IRQHandler         [WEAK]
            EXPORT  SPI1_IRQHandler            [WEAK]
            EXPORT  SPI2_IRQHandler            [WEAK]
            EXPORT  USART1_IRQHandler          [WEAK]
            EXPORT  USART2_IRQHandler          [WEAK]
            EXPORT  USART3_IRQHandler          [WEAK]
            EXPORT  EXTI15_10_IRQHandler       [WEAK]
            EXPORT  RTCAlarm_IRQHandler        [WEAK]
            EXPORT  USBWakeUp_IRQHandler       [WEAK]

WWDGIRQHandler PVDIRQHandler TAMPERIRQHandler RTCIRQHandler FLASHIRQHandler RCCIRQHandler EXTI0IRQHandler EXTI1IRQHandler EXTI2IRQHandler EXTI3IRQHandler EXTI4IRQHandler DMA1Channel1IRQHandler DMA1Channel2IRQHandler DMA1Channel3IRQHandler DMA1Channel4IRQHandler DMA1Channel5IRQHandler DMA1Channel6IRQHandler DMA1Channel7IRQHandler ADC12IRQHandler USBHPCAN1TXIRQHandler USBLPCAN1RX0IRQHandler CAN1RX1IRQHandler CAN1SCEIRQHandler EXTI95IRQHandler TIM1BRKIRQHandler TIM1UPIRQHandler TIM1TRGCOMIRQHandler TIM1CCIRQHandler TIM2IRQHandler TIM3IRQHandler TIM4IRQHandler I2C1EVIRQHandler I2C1ERIRQHandler I2C2EVIRQHandler I2C2ERIRQHandler SPI1IRQHandler SPI2IRQHandler USART1IRQHandler USART2IRQHandler USART3IRQHandler EXTI1510IRQHandler RTCAlarmIRQHandler USBWakeUpIRQHandler

            B       .

            ENDP

            ALIGN

;******************************************************************************* ; User Stack and Heap initialization ;******************************************************************************* IF :DEF:__MICROLIB

             EXPORT  __initial_sp
             EXPORT  __heap_base
             EXPORT  __heap_limit

             ELSE

             IMPORT  __use_two_region_memory
             EXPORT  __user_initial_stackheap

_userinitial_stackheap

             LDR     R0, =  Heap_Mem
             LDR     R1, =(Stack_Mem + Stack_Size)
             LDR     R2, = (Heap_Mem +  Heap_Size)
             LDR     R3, = Stack_Mem
             BX      LR

             ALIGN

             ENDIF

             END

;******************* (C) COPYRIGHT 2011 STMicroelectronics **END OF FILE**

~~~~

main.c

~~~~ /* FreeRTOS V7.0.0 - Copyright (C) 2011 Real Time Engineers Ltd.

***************************************************************************
 *                                                                       *
 *    FreeRTOS tutorial books are available in pdf and paperback.        *
 *    Complete, revised, and edited pdf reference manuals are also       *
 *    available.                                                         *
 *                                                                       *
 *    Purchasing FreeRTOS documentation will not only help you, by       *
 *    ensuring you get running as quickly as possible and with an        *
 *    in-depth knowledge of how to use FreeRTOS, it will also help       *
 *    the FreeRTOS project to continue with its mission of providing     *
 *    professional grade, cross platform, de facto standard solutions    *
 *    for microcontrollers - completely free of charge!                  *
 *                                                                       *
 *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *
 *                                                                       *
 *    Thank you for using FreeRTOS, and thank you for your support!      *
 *                                                                       *
***************************************************************************


This file is part of the FreeRTOS distribution.

FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>NOTE<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.  FreeRTOS is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
more details. You should have received a copy of the GNU General Public
License and the FreeRTOS license exception along with FreeRTOS; if not it
can be viewed here: http://www.freertos.org/a00114.html and also obtained
by writing to Richard Barry, contact details for whom are available on the
FreeRTOS WEB site.

1 tab == 4 spaces!

http://www.FreeRTOS.org - Documentation, latest information, license and
contact details.

http://www.SafeRTOS.com - A version that is certified for use in safety
critical systems.

http://www.OpenRTOS.com - Commercial support, development, porting,
licensing and training services.

*/

/* Standard includes. */

include

/* Scheduler includes. */

include "FreeRTOS.h"
include "task.h"
include "queue.h"

/* Library includes. */

include "stm32f10x.h"
include "stm32f10x_it.h"

/* user files */

include "My_InitTask.h"

void Task1 (void *data);

/******************************************************************************* * Function Name : Delay * Description : Inserts a delay time. * Input : nCount: specifies the delay time length. * Output : None * Return : None *******************************************************************************/ void Delay(vu32 nCount) { for (; nCount != 0;nCount--); }

/-----------------------------------------------------------/ /-----------------------------------------------------------/ int main( void ) {

My_InitTask();

xTaskCreate( Task1, ( signed portCHAR *) "Task1", configMINIMAL_STACK_SIZE, NULL, (tskIDLE_PRIORITY+1), NULL);

/* Start the scheduler. */
vTaskStartScheduler();
/* Will only get here if there was not enough heap space to create the idle task. */
return 0;

}

/-----------------------------------------------------------/ /-----------------------------------------------------------/ void Task1 (void *data) {

portTickType xLastWakeTime;

data = data;

xLastWakeTime = xTaskGetTickCount();

while (1) 
{
    GPIO_SetBits( GPIOA,GPIO_Pin_1);            
vTaskDelay( 1000 / portTICK_RATE_MS ); 

// vTaskDelayUntil( &xLastWakeTime, 1000 / portTICKRATEMS );

	GPIO_ResetBits(GPIOA, GPIO_Pin_1);  
	vTaskDelay( 1000 / portTICK_RATE_MS ); 


}

}

~~~~

freertosconfig.h

~~~~ /* FreeRTOS V7.0.0 - Copyright (C) 2011 Real Time Engineers Ltd.

***************************************************************************
 *                                                                       *
 *    FreeRTOS tutorial books are available in pdf and paperback.        *
 *    Complete, revised, and edited pdf reference manuals are also       *
 *    available.                                                         *
 *                                                                       *
 *    Purchasing FreeRTOS documentation will not only help you, by       *
 *    ensuring you get running as quickly as possible and with an        *
 *    in-depth knowledge of how to use FreeRTOS, it will also help       *
 *    the FreeRTOS project to continue with its mission of providing     *
 *    professional grade, cross platform, de facto standard solutions    *
 *    for microcontrollers - completely free of charge!                  *
 *                                                                       *
 *    >>> See http://www.FreeRTOS.org/Documentation for details. <<<     *
 *                                                                       *
 *    Thank you for using FreeRTOS, and thank you for your support!      *
 *                                                                       *
***************************************************************************


This file is part of the FreeRTOS distribution.

FreeRTOS is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License (version 2) as published by the
Free Software Foundation AND MODIFIED BY the FreeRTOS exception.
>>>NOTE<<< The modification to the GPL is included to allow you to
distribute a combined work that includes FreeRTOS without being obliged to
provide the source code for proprietary components outside of the FreeRTOS
kernel.  FreeRTOS is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
more details. You should have received a copy of the GNU General Public
License and the FreeRTOS license exception along with FreeRTOS; if not it
can be viewed here: http://www.freertos.org/a00114.html and also obtained
by writing to Richard Barry, contact details for whom are available on the
FreeRTOS WEB site.

1 tab == 4 spaces!

http://www.FreeRTOS.org - Documentation, latest information, license and
contact details.

http://www.SafeRTOS.com - A version that is certified for use in safety
critical systems.

http://www.OpenRTOS.com - Commercial support, development, porting,
licensing and training services.

*/

ifndef FREERTOSCONFIGH
define FREERTOSCONFIGH

/----------------------------------------------------------- * Application specific definitions. * * These definitions should be adjusted for your particular hardware and * application requirements. * * THESE PARAMETERS ARE DESCRIBED WITHIN THE 'CONFIGURATION' SECTION OF THE * FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE. * * See http://www.freertos.org/a00110.html. *----------------------------------------------------------/

define configUSE_PREEMPTION 1
define configUSEIDLEHOOK 0
define configUSETICKHOOK 0
define configCPUCLOCKHZ ( ( unsigned long ) 72000000 )
define configTICKRATEHZ ( ( portTickType ) 200 )
define configMAXPRIORITIES ( ( unsigned portBASETYPE ) 5 )
define configMINIMALSTACKSIZE ( ( unsigned short ) 128 )
define configTOTALHEAPSIZE ( ( size_t ) ( 10 * 1024 ) )
define configMAXTASKNAME_LEN ( 16 )
define configUSETRACEFACILITY 0
define configUSE16BIT_TICKS 0
define configIDLESHOULDYIELD 1

/* Co-routine definitions. */

define configUSECOROUTINES 0
define configMAXCOROUTINE_PRIORITIES ( 2 )

/* Set the following definitions to 1 to include the API function, or zero to exclude the API function. */

define INCLUDE_vTaskPrioritySet 1
define INCLUDE_uxTaskPriorityGet 1
define INCLUDE_vTaskDelete 1
define INCLUDE_vTaskCleanUpResources 0
define INCLUDE_vTaskSuspend 1
define INCLUDE_vTaskDelayUntil 1
define INCLUDE_vTaskDelay 1

/* This is the raw value as per the Cortex-M3 NVIC. Values can be 255 (lowest) to 0 (1?) (highest). */

define configKERNELINTERRUPTPRIORITY 255
define configMAXSYSCALLINTERRUPT_PRIORITY 191 /* equivalent to 0xb0, or priority 11. */

/* This is the value being used as per the ST library which permits 16 priority values, 0 to 15. This must correspond to the configKERNELINTERRUPTPRIORITY setting. Here 15 corresponds to the lowest NVIC value of 255. */

define configLIBRARYKERNELINTERRUPT_PRIORITY 15
endif /* FREERTOSCONFIGH */

~~~~


HardFault_Handler!! -- Just flash LED on STM32F103C8T6

Posted by heinbali01 on November 4, 2015

Just a guess, are you missing the following defines ?

~~~~~ /* Definitions that map the FreeRTOS port interrupt handlers to their CMSIS standard names. */

define vPortSVCHandler SVC_Handler
define xPortPendSVHandler PendSV_Handler

// Don't think the following is necessary: //#define xPortSysTickHandler SysTick_Handler

~~~~~

Regards.


HardFault_Handler!! -- Just flash LED on STM32F103C8T6

Posted by rtel on November 4, 2015

Can you say at what point the hard fault occurs?

It looks like you are using a very old version of FreeRTOS! I would recommend updating to the latest to get the benefit of additional assert statements, then ensure configASSERT() is defined.

Also, it does not look like you are performing any hardware setup before running the application. In particular, on STM32 devices you need to call NVICPriorityGroupConfig( NVICPriorityGroup_4 ); before the RTOS is started. See http://www.freertos.org/RTOS-Cortex-M3-M4.html

Just a guess, are you missing the following defines ?

From the code it looks like the vectors are being installed directly, so those lines would not be needed.


[ Back to the top ]    [ About FreeRTOS ]    [ Sitemap ]    [ ]




Copyright (C) 2004-2010 Richard Barry. Copyright (C) 2010-2016 Real Time Engineers Ltd.
Any and all data, files, source code, html content and documentation included in the FreeRTOSTM distribution or available on this site are the exclusive property of Real Time Engineers Ltd.. See the files license.txt (included in the distribution) and this copyright notice for more information. FreeRTOSTM and FreeRTOS.orgTM are trade marks of Real Time Engineers Ltd.

Latest News:

FreeRTOS V9.0.0 is now available for download.


Free TCP/IP and file system demos for the RTOS


Sponsored Links

⇓ Now With No Code Size Limit! ⇓
⇑ Free Download Without Registering ⇑


FreeRTOS Partners

ARM Connected RTOS partner for all ARM microcontroller cores

Renesas Electronics Gold Alliance RTOS Partner.jpg

Microchip Premier RTOS Partner

RTOS partner of NXP for all NXP ARM microcontrollers

Atmel RTOS partner supporting ARM Cortex-M3 and AVR32 microcontrollers

STMicro RTOS partner supporting ARM7, ARM Cortex-M3, ARM Cortex-M4 and ARM Cortex-M0

Xilinx Microblaze and Zynq partner

Silicon Labs low power RTOS partner

Altera RTOS partner for Nios II and Cortex-A9 SoC

Freescale Alliance RTOS Member supporting ARM and ColdFire microcontrollers

Infineon ARM Cortex-M microcontrollers

Texas Instruments MCU Developer Network RTOS partner for ARM and MSP430 microcontrollers

Cypress RTOS partner supporting ARM Cortex-M3

Fujitsu RTOS partner supporting ARM Cortex-M3 and FM3

Microsemi (previously Actel) RTOS partner supporting ARM Cortex-M3

Atollic Partner

IAR Partner

Keil ARM Partner

Embedded Artists