2017-10-16 45 views
0

안녕하세요. 저는 STM32F769I_Eval을 프로그래밍하기 시작했습니다.RTX Keil 및 ADC_DMA, GUI_thread 입력 안 함

저는 Cortex M4를 프로그래밍하고 RTOS를 사용하는 데있어 초보자입니다. 시작하기 위해 기본 예제를 사용했습니다.

이제 ADC에 ADC를 사용하여 LCD에 현재 값을 표시하고 싶습니다. RTOS가없는 쉬운 예에서 이것을 시도해 봤지만 잘 작동합니다.

하지만 이제는 새 프로젝트를 만들지 만 디스플레이가 어둡게 유지됩니다. HAL_ADC_START_DMA (...)를 사용하면 멈추는 것 같습니다. 이 행을 주석 처리하면 GUI가 표시됩니다.

#include "main.h" 
#include "Board_LED.h"     // ::Board Support:LED 
#include "stm32f769i_eval_sdram.h"  // Keil.STM32F769I-EVAL::Board 
#include "stm32f7xx_hal.h"    // Keil::Device:STM32Cube HAL:Common 
#include "GUI.h"      // Segger.MDK-Pro::Graphics:CORE 
#include "cmsis_os.h" 
#include "RTE_Components.h"    // Component selection 


#ifdef _RTE_ 
#include "RTE_Components.h"    // Component selection 
#endif 
#ifdef RTE_CMSIS_RTOS     
#include "cmsis_os.h"     // CMSIS RTOS header file 
#endif 

#ifdef RTE_CMSIS_RTOS_RTX 
extern uint32_t os_time; 

uint32_t HAL_GetTick(void) { 
    return os_time; 
} 
#endif 
/* ADC handler declaration */ 
ADC_HandleTypeDef AdcHandle; 
__IO uint16_t uhADCxConvertedValue = 0; 
int32_t JTemp = 0x0; 

static void SystemClock_Config(void); 
static void Error_Handler(void); 
static void MPU_Config(void); 
static void CPU_CACHE_Enable(void); 
extern int Init_GUIThread (void); 
static void ADC_Config(void); 

int main(void) 
{ 

    MPU_Config(); 

    CPU_CACHE_Enable(); 

#ifdef RTE_CMSIS_RTOS     // when using CMSIS RTOS 
    osKernelInitialize();     // initialize CMSIS-RTOS 
#endif 

    HAL_Init(); 

    LED_Initialize(); 
    BSP_SDRAM_Init(); 

    SystemClock_Config(); 

    ADC_Config(); 

HAL_ADC_Start_DMA(&AdcHandle, (uint32_t*)&uhADCxConvertedValue, 1); 



#ifdef RTE_CMSIS_RTOS     

     osKernelStart();      // start thread execution 
     Init_GUIThread(); 
     GUI_Init(); 
#endif 

    /* Infinite loop */ 
    while (1) 
    { 

     HAL_Delay(1000); 
     osDelay(25); 

    } 
} 


static void ADC_Config(void) 
{ 

    ADC_ChannelConfTypeDef sConfig; 

    /* Configure the ADC peripheral */ 
    AdcHandle.Instance   = ADCx; 

    AdcHandle.Init.ClockPrescaler  = ADC_CLOCKPRESCALER_PCLK_DIV4; 
    AdcHandle.Init.Resolution   = ADC_RESOLUTION_12B; 
    AdcHandle.Init.ScanConvMode   = DISABLE;      
    AdcHandle.Init.ContinuousConvMode = ENABLE;       
    AdcHandle.Init.DiscontinuousConvMode = DISABLE;      
    AdcHandle.Init.NbrOfDiscConversion = 0; 
    AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;   
    AdcHandle.Init.ExternalTrigConv  = ADC_EXTERNALTRIGCONV_T1_CC1; 
    AdcHandle.Init.DataAlign    = ADC_DATAALIGN_RIGHT; 
    AdcHandle.Init.NbrOfConversion  = 1; 
    AdcHandle.Init.DMAContinuousRequests = ENABLE; 
    AdcHandle.Init.EOCSelection   = DISABLE; 

    if (HAL_ADC_Init(&AdcHandle) != HAL_OK) 
    { 
    /* ADC initialization Error */ 
    Error_Handler(); 
    } 

    sConfig.Channel = ADC_CHANNEL_8; 
    sConfig.Rank = 1; 
    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; 
    sConfig.Offset = 0; 

    if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK) 
    { 
    /* Channel Configuration Error */ 
    Error_Handler(); 
    } 
} 

static void Error_Handler(void) 
{ 
    LED_On(1); 
    /* User may add here some code to deal with this error */ 
    while(1) 
    { 
    } 
} 

누군가 나를 도울 수 있다면 행복 할 것입니다. 나는 또한 약간의 가이드, 책 또는 그런 무엇인가 매우 감사한다.

답변

0

ADC 클럭이 활성화되지 않은 것 같습니다. HAL_ADC_MspInit 기능을 구현합니까 (보통 stm32f7xx_hal_msp.c 파일에 구현됩니까?)?

두 번째 변형은 'HAL_IncTick'함수라고 부릅니까?