ST意法半导体
直播中

张艳

8年用户 1704经验值
私信 关注
[问答]

STM32F103C8T6最小系统板为什么程序执行到0.425秒就从头开始?

新手求助。
STM32F103C8T6最小系统板,使用stmubeide编写程序,系统时钟配置72M,配置了一个GPIO用来控制LED灯。用了三种方式进行延时(1.for 循环 2.hal 延时函数 3.定时器 延时)控制led亮灭,无论哪种方式,从示波器上看,0.425秒以内程序还能正常运行,一到0.425秒,程序就从头开始开始执行了。
就配置了时钟,GPIO和定时器1,其余没有配置。
不知是哪里出了问题,请教各位大神!
以下是main.c 内容:
/ USER CODE BEGIN Header //**

  • @file           : main.c
  • @brief          : Main program body


  • @attention

  • Copyright (c) 2023 STMicroelectronics.
  • All rights reserved.

  • This software is licensed under terms that can be found in the LICENSE file
  • in the root directory of this software component.
  • If no LICENSE file comes with this software, it is provided AS-IS.

// USER CODE END Header // Includes ------------------------------------------------------------------*/
include "main.h"

/ Private includes ----------------------------------------------------------// USER CODE BEGIN Includes /
/ USER CODE END Includes /
/ Private typedef -----------------------------------------------------------// USER CODE BEGIN PTD /
/ USER CODE END PTD /
/ Private define ------------------------------------------------------------// USER CODE BEGIN PD /
/ USER CODE END PD /
/ Private macro -------------------------------------------------------------// USER CODE BEGIN PM /
/ USER CODE END PM /
/ Private variables ---------------------------------------------------------/TIM_HandleTypeDef htim1;
/ USER CODE BEGIN PV /
/ USER CODE END PV /
/ Private function prototypes -----------------------------------------------/void SystemClock_Config(void);static void MX_GPIO_Init(void);static void MX_TIM1_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_TIM1_Init();/ USER CODE BEGIN 2 /
void HAL_Delay_us(uint16_t us){uint16_t counter = 0;HAL_TIM_SetAutoreload( htim1, us);        //设置定时器自动加载值HAL_TIM_SetCounter( htim1, counter);      //设置定时器初始值HAL_TIM_Base_Start( htim1);                 //启动定时器
while(counter != us) //直到定时器计数从0计数到us结束循环,刚好是所需要的时间{counter = __HAL_TIM_GetCounter( htim1); // 获取定时器当前计数}HAL_TIM_Base_Stop( htim1); // 停止定时器}
void HAL_Delay_ms(uint16_t ms){for (int i = 0; i < ms; i++)HAL_Delay_us(1000);}
void delay(int ms){for(int i = 0; i < ms; i++)for(int j = 0; j < 1000; j++);}
/ USER CODE END 2 /
/ Infinite loop // USER CODE BEGIN WHILE /int a = 0;while (1){//    HAL_Delay(100);
//    delay(1000);////    a %= 3;////    switch(a++)//    {//    case 0 :   HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin); break;//    case 1 :   HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin); break;//    case 2 :   HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin); break;//    default:   break;//    }HAL_Delay_ms(300);//    a += 1;//    a++;//    if (a == 3)//    {//      a = 0;//    }HAL_GPIO_TogglePin(LED1_GPIO_Port,LED1_Pin);HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);HAL_GPIO_TogglePin(LED3_GPIO_Port,LED3_Pin);//    HAL_Delay(300);//    HAL_GPIO_WritePin(LED1_GPIO_Port,LED1_Pin , GPIO_PIN_SET);//    HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin , GPIO_PIN_SET);//    HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin , GPIO_PIN_SET);//    HAL_Delay(300);//    HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);//    HAL_GPIO_WritePin(LED2_GPIO_Port,LED2_Pin , GPIO_PIN_SET);//    HAL_GPIO_WritePin(LED3_GPIO_Port,LED3_Pin , GPIO_PIN_SET);
/ USER CODE END WHILE /
/ USER CODE BEGIN 3 /}/ USER CODE END 3 /}
/**

  • @brief System Clock Configuration
  • @retval None*/void SystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
/** Initializes the RCC Oscillators according to the specified parameters

  • in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig( RCC_OscInitStruct) != HAL_OK){Error_Handler();}
/* Initializes the CPU, AHB and APB buses clocks/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig( RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}}
/**

  • @brief TIM1 Initialization Function
  • @param None
  • @retval None*/static void MX_TIM1_Init(void){
/ USER CODE BEGIN TIM1_Init 0 /
/ USER CODE END TIM1_Init 0 /
TIM_ClockConfigTypeDef sClockSourceConfig = {0};TIM_MasterConfigTypeDef sMasterConfig = {0};
/ USER CODE BEGIN TIM1_Init 1 /
/ USER CODE END TIM1_Init 1 /htim1.Instance = TIM1;htim1.Init.Prescaler = 71;htim1.Init.CounterMode = TIM_COUNTERMODE_UP;htim1.Init.Period = 0;htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;htim1.Init.RepetitionCounter = 0;htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;if (HAL_TIM_Base_Init( htim1) != HAL_OK){Error_Handler();}sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;if (HAL_TIM_ConfigClockSource( htim1,  sClockSourceConfig) != HAL_OK){Error_Handler();}sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;if (HAL_TIMEx_MasterConfigSynchronization( htim1,  sMasterConfig) != HAL_OK){Error_Handler();}/ USER CODE BEGIN TIM1_Init 2 /
/ USER CODE END TIM1_Init 2 /
}
/**

  • @brief GPIO Initialization Function
  • @param None
  • @retval None/static void MX_GPIO_Init(void){GPIO_InitTypeDef GPIO_InitStruct = {0};/ USER CODE BEGIN MX_GPIO_Init_1 // USER CODE END MX_GPIO_Init_1 */
/ GPIO Ports Clock Enable /HAL_RCC_GPIOD_CLK_ENABLE();HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();
/Configure GPIO pin Output Level /HAL_GPIO_WritePin(GPIOA, LED2_Pin|LED3_Pin, GPIO_PIN_RESET);
/Configure GPIO pin Output Level /HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_RESET);
/Configure GPIO pins : LED2_Pin LED3_Pin /GPIO_InitStruct.Pin = LED2_Pin|LED3_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA,  GPIO_InitStruct);
/Configure GPIO pin : LED1_Pin /GPIO_InitStruct.Pin = LED1_Pin;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(LED1_GPIO_Port,  GPIO_InitStruct);
/ USER CODE BEGIN MX_GPIO_Init_2 // USER CODE END MX_GPIO_Init_2 /}
/ USER CODE BEGIN 4 /
/ USER CODE END 4 /
/**

  • @brief  This function is executed in case of error occurrence.
  • @retval None/void Error_Handler(void){/ USER CODE BEGIN Error_Handler_Debug // User can add his own implementation to report the HAL error return state /__disable_irq();while (1){}/ USER CODE END Error_Handler_Debug */}
ifdef  USE_FULL_ASSERT

/**

  • @brief  Reports the name of the source file and the source line number
  • where the assert_param error has occurred.

    • @param  file: pointer to the source file name
    • @param  line: assert_param error line source number
    • @retval None/void assert_failed(uint8_t file, uint32_t line){/ USER CODE BEGIN 6 // User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) // USER CODE END 6 /}endif / USE_FULL_ASSERT /




回帖(1)

刘鑫

2023-8-7 17:23:04
看不到main()主函数和主函数内的while();这样运行一次当然就跑飞了。
举报

更多回帖

×
20
完善资料,
赚取积分