
新手求助。 STM32F103C8T6最小系统板,使用stmubeide编写程序,系统时钟配置72M,配置了一个GPIO用来控制LED灯。用了三种方式进行延时(1.for 循环 2.hal 延时函数 3.定时器 延时)控制led亮灭,无论哪种方式,从示波器上看,0.425秒以内程序还能正常运行,一到0.425秒,程序就从头开始开始执行了。 就配置了时钟,GPIO和定时器1,其余没有配置。 不知是哪里出了问题,请教各位大神! 以下是main.c 内容: / USER CODE BEGIN Header / /**
/ / 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 / /**
/ 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 / } /**
/** Initializes the RCC Oscillators according to the specified parameters
/* 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(); } } /**
/ 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 / } /**
/ 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 / /**
ifdef USE_FULL_ASSERT/**
|
STM32CubeIDE报错
SDIO读取TF卡,1bit模式正常,4bit模式无法读取
cudeide执行run是烧录还是只是执行呢
cubeIDE在run后出现错误
在STM32Cube IDE1.18.0里 写ODR 编译不成,咋办?
CUEBIDE生成的APP程序,在写入FLASH之后无法正常跳转。
有关Cubeide IAP 问题
Cubeide1.18.1在线调试改变"现场表达式"中的值提示找不到地址
stm32cubeide中如何查看版本日志?
最新版STM32CubeIDE无法安装
看不到main()主函数和主函数内的while();这样运行一次当然就跑飞了。
有的,复制的格式不太好看,main()和while(1)都在
/ Infinite loop / / USER CODE BEGIN WHILE / int a = 0; while (1) { // HAL_Delay(100);
串口烧录软件选项点了ramisp就会这样,去掉就正常运行了