2014-07-10 2 views
1

ST STM32F101xB 및 μC/OS-II를 사용하고 있습니다. 이전 보드에서 외부 클럭 (HSE)을 사용하고 있었고 정상적으로 실행 중입니다. 우리는 새로운 보드에서 내부 클럭 (HSI)을 사용하고 싶었지만, 내부 클럭을 사용하여 RTOS (Appmaintask())를 실행하지 못했습니다. 아래 코드를 변경했는데, 무엇이 잘못되었는지 생각해보십시오.RTOS μC/OS-II가 예상대로 동작하지 않습니다.

void BSP_Init (void) 
{ 
    RCC_DeInit(); 
    //RCC_HSEConfig(RCC_HSE_ON); 
    //RCC_WaitForHSEStartUp(); 

    RCC_HCLKConfig(RCC_SYSCLK_Div1); 
    RCC_PCLK2Config(RCC_HCLK_Div1); // APB2 clock divide by 1 => 64MHz 
    RCC_PCLK1Config(RCC_HCLK_Div2); // APB1 clock divide by 2 => 32MHz 

    FLASH_SetLatency(FLASH_Latency_2); 
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); 
    //RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_8); // 64MHz 
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_8); 
    RCC_PLLCmd(ENABLE); 

    RCC_LSEConfig(RCC_LSE_OFF); 

    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { 
     ; 
    } 

    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); 

    while (RCC_GetSYSCLKSource() != 0x08) { 
     ; 
    } 

    //Set the Vector Table base location at 0x08000000 
    //NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); 

    // Need to finalize and arange priority for each interrupts in future, 
    // So that 1 interrupt wont blocks another interrupt. 
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3); 
} 


void main() 
{ 
    INT8U err; 

    cpuObj = new Cstm32f10x(); 

    BSP_Init(); 

    BSP_IntDisAll();   /* Disable all ints until we are ready to accept them. */ 

    OSInit(); 

    err = OSTaskCreateExt (AppMainTask, 
        (void *)0, 
        (OS_STK *)&AppMainTaskStk[APP_MAIN_TASK_STK_SIZE-1], 
        APP_MAIN_TASK_PRIO, 
        APP_MAIN_TASK_ID, 
        (OS_STK *)&AppMainTaskStk[0], 
        APP_MAIN_TASK_STK_SIZE, 
        (void *)0, 
        OS_TASK_OPT_STK_CHK | OS_TASK_OPT_STK_CLR); 

    OSStart();     // Start multitasking (i.e. give control to uC/OS-II) 
} 

void AppMainTask (void *p_arg) 
{ 
    OS_CPU_SysTickInit(); 
    while(TRUE) 
    { 
    OSTimeDly(1); 
    } 
} 

감사합니다.

+1

안녕하세요, 관련 코드를 포함 할 수 있습니까? (예를 들어, 아마도 당신이 바꾼 비트를 말해주십시오)? 또한 - 변경 사항이 잘못된 점을 알려주십시오. 너 무슨 일이 있었 니? 너는 무엇을 기대 했는가? –

+0

주파수가 전환 된 후 바하 웰을 먼저 확인해야합니다. CPU가 어떤 코드를 실행하고 있으며 그 다음에 어떤 일이 발생합니까? –

+0

내 문제는 OSstart() 후에 Appmaintask()가 호출되지 않습니다. – user3770444

답변

0

PLL 설정은 일반적으로 ST/ARM에서 제공하는 CMSIS 시작 코드에서 수행됩니다. 이 코드는main()이 호출되기 전에 런타임 환경 시작 의 일부로 실행됩니다. 정적 데이터 초기화 및 정적 객체 생성자가 main() 전에 실행하고 중요 초기화 전에 실행 중이므로이 코드를 칩 초기화에 사용하는 것이 좋습니다.

Cortex-M3 코어 및 STM32F1xx 특정 장치 지원이있는 CMSIS는 STM32 Standard Peripheral Library에 포함되어 있습니다. 실제로 작업을 수행하는 파일은 system_stm32f10x.c입니다. 플래시 대기 시간과 같은 BSP_Init()에서 수행하는 다른 기능들도 CMSIS 시작 코드에 의해 처리됩니다. 이 코드를 사용자 지정하더라도이 방법을 초기 환경 초기화로 사용하는 것이 좋습니다.

또 다른 가능성은 STM32CubeMX 유틸리티를 사용하여 구성 코드를 생성하는 것입니다. 이것은 현재 사용할 수없는 것으로 보이는 STM32 MicroXplorer 유틸리티를 대신하는 것으로 보입니다.

관련 문제