안녕하세요. 저는 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)
{
}
}
누군가 나를 도울 수 있다면 행복 할 것입니다. 나는 또한 약간의 가이드, 책 또는 그런 무엇인가 매우 감사한다.