STM32L151 NB-IoT and FreeRTOS Project
guowenxue
2018-11-14 a39234c0fd11d788aaab4b19de6bf01bf94f69fb
Update Key interrupt priority and can work now, comment configUSE_TICK_HOOK in FreeRTOSConfig.h
3 files modified
114 ■■■■■ changed files
src/STM32L_FreeRTOS/FreeRTOS/FreeRTOSConfig.h 43 ●●●●● patch | view | raw | blame | history
src/STM32L_FreeRTOS/board/stm32_key.c 2 ●●● patch | view | raw | blame | history
src/STM32L_FreeRTOS/board/stm32_vport.c 69 ●●●● patch | view | raw | blame | history
src/STM32L_FreeRTOS/FreeRTOS/FreeRTOSConfig.h
@@ -40,23 +40,60 @@
 * See http://www.freertos.org/a00110.html
 *----------------------------------------------------------*/
/* Îª1ʱRTOSʹÓÃÇÀռʽµ÷¶ÈÆ÷£¬Îª0ʱRTOSʹÓÃʱ¼äƬµ÷¶ÈÆ÷*/
#define configUSE_PREEMPTION            1
/*  µ±RTOSµ÷¶ÈÆ÷¿ªÊ¼¹¤×÷ºó£¬ÎªÁ˱£Ö¤ÖÁÉÙÓÐÒ»¸öÈÎÎñÔÚÔËÐУ¬¿ÕÏÐÈÎÎñ±»×Ô¶¯´´½¨£¬Õ¼ÓÃ×îµÍÓÅÏȼ¶¡£
    ÉèÖÃΪ1ʹÓÿÕÏй³×Óº¯Êý£¬0ºöÂÔ¿ÕÏй³×Óº¯Êý¡£ */
#define configUSE_IDLE_HOOK                1
#define configUSE_TICK_HOOK                0 // Modify 1->0 by gwx
/* Ê±¼äƬ¹³×Óº¯Êý¿ÉÒԺܷ½±ãµÄʵÏÖÒ»¸ö¶¨Ê±Æ÷¹¦ÄÜ¡£ÉèÖÃΪ1ʹÓÃʱ¼äƬ¹³×Óº¯Êý£¬0ºöÂÔʱ¼äƬ¹³×Óº¯Êý¡£ */
#define configUSE_TICK_HOOK                0
/* Ð´Èëʵ¼ÊµÄCPUÄÚºËʱÖÓÆµÂÊ£¬Ò²¾ÍÊÇCPUÖ¸ÁîÖ´ÐÐÆµÂÊ£¬Í¨³£³ÆÎªFcclk¡£ÅäÖôËÖµÊÇΪÁËÕýÈ·µÄÅäÖÃϵͳ½ÚÅÄÖжÏÖÜÆÚ¡£ */
#define configCPU_CLOCK_HZ                ( 32000000UL )
/* RTOS ÏµÍ³½ÚÅÄÖÐ¶ÏµÄÆµÂÊ¡£¼´Ò»ÃëÖжϵĴÎÊý£¬Ã¿´ÎÖжÏRTOS¶¼»á½øÐÐÈÎÎñµ÷¶È¡£ */
#define configTICK_RATE_HZ                ( ( TickType_t ) 1000 )
/* ÅäÖÃÓ¦ÓóÌÐòÓÐЧµÄÓÅÏȼ¶ÊýÄ¿¡£ÈκÎÊýÁ¿µÄÈÎÎñ¶¼¿ÉÒÔ¹²ÏíÒ»¸öÓÅÏȼ¶£¬Ê¹ÓÃЭ³Ì¿ÉÒÔµ¥¶ÀµÄ¸øÓëËüÃÇÓÅÏÈȨ¡£
   ÔÚRTOSÄÚºËÖУ¬Ã¿¸öÓÐЧÓÅÏȼ¶¶¼»áÏûºÄÒ»¶¨Á¿µÄRAM£¬Òò´ËÕâ¸öÖµ²»Òª³¬¹ýÄãµÄÓ¦ÓÃʵ¼ÊÐèÒªµÄÓÅÏȼ¶ÊýÄ¿¡£*/
#define configMAX_PRIORITIES            ( 5 )
/* ¶¨Òå¿ÕÏÐÈÎÎñʹÓõĶÑÕ»´óС£¬ÒÔ×Ö¶ø²»ÊÇ×Ö½ÚΪµ¥Î»¡£Í¨³£´ËÖµ²»Ó¦Ð¡ÓÚ¶ÔÓ¦´¦ÀíÆ÷ÑÝʾÀý³ÌÎļþFreeRTOSConfig.hÖж¨ÒåµÄÊýÖµ¡£*/
#define configMINIMAL_STACK_SIZE        ( ( unsigned short ) 70 )
#define configTOTAL_HEAP_SIZE            ( ( size_t ) ( 10 * 1024 ) )  // Modify 10->5 by gwx
/* Ö¸¶¨malloc()·ÖÅäµÄ¶ÑµÄ´óС¡£ Ã¿µ±´´½¨ÈÎÎñ¡¢¶ÓÁС¢»¥³âÁ¿¡¢Èí¼þ¶¨Ê±Æ÷»òÐźÅÁ¿Ê±£¬RTOSÄں˻áΪ´Ë·ÖÅäRAM£¬ÕâÀïµÄRAM¶¼ÊôÓÚ¶Ñ */
#define configTOTAL_HEAP_SIZE            ( ( size_t ) ( 10 * 1024 ) )
/* µ÷ÓÃÈÎÎñº¯Êýʱ£¬ÐèÒªÉèÖÃÃèÊöÈÎÎñÐÅÏ¢µÄ×Ö·û´®£¬Õâ¸öºêÓÃÀ´¶¨Òå¸Ã×Ö·û´®µÄ×î´ó³¤¶È¡£ÕâÀﶨÒåµÄ³¤¶È°üÀ¨×Ö·û´®½áÊø·û¡¯\0¡¯¡£ */
#define configMAX_TASK_NAME_LEN            ( 16 )
/* ÉèÖóÉ1±íʾÆô¶¯¿ÉÊÓ»¯¸ú×Ùµ÷ÊÔ£¬»á¼¤»îһЩ¸½¼ÓµÄ½á¹¹Ìå³ÉÔ±ºÍº¯Êý¡£ */
#define configUSE_TRACE_FACILITY        1
/* ¶¨Òåϵͳ½ÚÅļÆÊýÆ÷µÄ±äÁ¿ÀàÐÍ£¬¼´¶¨ÒåportTickTypeÊDZíʾ16λ±äÁ¿»¹ÊÇ32λ±äÁ¿¡£0±íʾ32λÎÞ·ûºÅÕûÐΣ¬1±íʾ16λÎÞ·ûºÅÕûÐΠ*/
#define configUSE_16_BIT_TICKS            0
/* Õâ¸ö²ÎÊý¿ØÖÆÈÎÎñÔÚ¿ÕÏÐÓÅÏȼ¶ÖеÄÐÐΪ¡£ */
#define configIDLE_SHOULD_YIELD            1
/* ÉèÖÃΪ1±íʾʹÓû¥³âÁ¿£¬ÉèÖóÉ0±íʾºöÂÔ»¥³âÁ¿¡£ */
#define configUSE_MUTEXES                1
/* ¶¨Òå¿ÉÒԼǼµÄ¶ÓÁкÍÐźÅÁ¿µÄ×î´óÊýÄ¿¡£*/
#define configQUEUE_REGISTRY_SIZE        5
/* Îª²»Í¬µÄ³£Á¿À´Ê¹Óò»Í¬¶ÑÕ»Òç³ö¼ì²â»úÖÆ¡£ */
#define configCHECK_FOR_STACK_OVERFLOW    2
/*  ÉèÖóÉ1±íʾʹÓõݹ黥³âÁ¿£¬ÉèÖóÉ0±íʾ²»Ê¹Óᣠ*/
#define configUSE_RECURSIVE_MUTEXES        0
/* ¸ÃºêÉèÖÃΪ1£¬ÄÇô±ØÐ붨ÒåÒ»¸ömalloc()ʧ°Ü¹³×Óº¯Êý£¬Èç¹ûºêÉèÖÃΪ0£¬malloc()ʧ°Ü¹³×Óº¯Êý²»»á±»µ÷Ó㬼´±ãÒѾ­¶¨ÒåÁËÕâ¸öº¯Êý¡£*/
#define configUSE_MALLOC_FAILED_HOOK    1
/* Ê¹ÄÜÈÎÎñ±êÇ©¹¦ÄÜ */
#define configUSE_APPLICATION_TASK_TAG    0
/* Co-routine definitions. */
@@ -94,6 +131,7 @@
/* Prevent the following definitions being included when FreeRTOSConfig.h
is included from an asm file. */
#if (configUSE_TICK_HOOK == 1 )
#include "stm32l1xx_tim.h"
extern void vConfigureTimerForRunTimeStats( void );
extern unsigned long ulTIM6_OverflowCount;
@@ -109,6 +147,7 @@
        ulCountValue = ( ( ulTIM6_OverflowCount << 16UL ) | ( unsigned long ) TIM6->CNT );    \
        TIM_Cmd( TIM6, ENABLE );                                                            \
    }
#endif // (configUSE_TICK_HOOK == 1 )
#endif /* FREERTOS_CONFIG_H */
src/STM32L_FreeRTOS/board/stm32_key.c
@@ -30,7 +30,7 @@
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    /* ³õʼ»¯ÖжÏÓÅÏȼ¶ */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 3;
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
src/STM32L_FreeRTOS/board/stm32_vport.c
@@ -17,10 +17,45 @@
void prvSetupHardware( void )
{
    init_led_gpio();
    //init_keys_interrupt();
    init_keys_interrupt();
    stm32_init_printf(USART_PORT1, 115200);
}
/* FreeRTOSConfig.hÖж¨ÒåÁ˺ê configUSE_MALLOC_FAILED_HOOK »áÐèÒª¸Ãº¯ÊýʵÏÖ */
void vApplicationMallocFailedHook( void )
{
    /* Called if a call to pvPortMalloc() fails because there is insufficient
    free memory available in the FreeRTOS heap.  pvPortMalloc() is called
    internally by FreeRTOS API functions that create tasks, queues or
    semaphores. */
    for( ;; );
}
/* FreeRTOSConfig.hÖж¨ÒåÁ˺ê configUSE_IDLE_HOOK »áÐèÒª¸Ãº¯ÊýʵÏÖ */
void vApplicationIdleHook( void )
{
    /* Called on each iteration of the idle task.  In this case the idle task
    just enters a low(ish) power mode. */
    PWR_EnterSleepMode( PWR_Regulator_ON, PWR_SLEEPEntry_WFI );
}
/* FreeRTOSConfig.hÖж¨ÒåÁ˺ê configCHECK_FOR_STACK_OVERFLOW »áÐèÒª¸Ãº¯ÊýʵÏÖ */
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
{
    ( void ) pcTaskName;
    ( void ) pxTask;
    /* Run time stack overflow checking is performed if
    configconfigCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook
    function is called if a stack overflow is detected. */
    for( ;; );
}
/* FreeRTOSConfig.hÖж¨ÒåÁ˺ê configUSE_TICK_HOOK »áÐèÒª¸Ãº¯ÊýʵÏÖ */
#if (configUSE_TICK_HOOK == 1 )
void vConfigureTimerForRunTimeStats( void )
{
TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
@@ -85,38 +120,7 @@
        TIM_ClearITPendingBit( TIM6, TIM_IT_Update );
    }
}
/*-----------------------------------------------------------*/
void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
{
    ( void ) pcTaskName;
    ( void ) pxTask;
    /* Run time stack overflow checking is performed if
    configconfigCHECK_FOR_STACK_OVERFLOW is defined to 1 or 2.  This hook
    function is called if a stack overflow is detected. */
    for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationMallocFailedHook( void )
{
    /* Called if a call to pvPortMalloc() fails because there is insufficient
    free memory available in the FreeRTOS heap.  pvPortMalloc() is called
    internally by FreeRTOS API functions that create tasks, queues or
    semaphores. */
    for( ;; );
}
/*-----------------------------------------------------------*/
void vApplicationIdleHook( void )
{
    /* Called on each iteration of the idle task.  In this case the idle task
    just enters a low(ish) power mode. */
    PWR_EnterSleepMode( PWR_Regulator_ON, PWR_SLEEPEntry_WFI );
}
#if 0
void vApplicationTickHook( void )
{
static unsigned long ulCounter = 0;
@@ -134,4 +138,3 @@
    }
}
#endif
/*-----------------------------------------------------------*/