繁体   English   中英

使用CubeMX和STMStudio的STM32:'int main()'不起作用

[英]STM32 using CubeMX and STMStudio: 'int main()' doesn't work

我正在学习在STM32F429ZI Nucleo板上进行编码,并且一直在尝试使用STMStudio从ADC1温度传感器读取温度。

我在其中一本教程中找到的代码无法正常工作,因此我尝试在代码的各个部分检查“ check”变量的值,然后我注意到,不仅“ check”变量的值在内部的任何地方都没有改变主函数,但STMStudio看不到在主函数内部声明的任何变量。

知道为什么吗?

我尝试了不同的代码,该代码使用按钮点亮LED来检查电路板是否正常,并且工作正常。

    /* Private variables ---------------------------------------------------------*/
ADC_HandleTypeDef hadc1;

/* USER CODE BEGIN PV */
uint16_t SenseADC;
float check = 0;
float Temperature;
float Vsense;

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_ADC1_Init(void);
/* USER CODE BEGIN PFP */

/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */
  HAL_ADC_Start(&hadc1);

  check = 2;
  const float V25 = 0.76; // [V]
  const float Vsupply = 3.0; // [V]
  const float ADCResolution = 4095;
  const float avg_slope = 0.0025; // [V/deg. C]
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {

      if(HAL_ADC_PollForConversion(&hadc1,10) == HAL_OK){
          check = 3;
          SenseADC = HAL_ADC_GetValue(&hadc1);
          Vsense=(SenseADC*Vsupply)/ADCResolution;
          Temperature = (Vsense - V25)/avg_slope + 25;

          HAL_ADC_Start(&hadc1);

      }
  }

}

编译器必须注意到, check变量仅被写入而从未被读取,并且由于没有目的而对写入进行了优化。 出于调试目的,您可以将其声明为volatile以强制所有写操作进入内存。

程序中的const值同样是优化的受害者,编译器直接在代码中使用了这些值,可能会预先计算部分表达式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM