问题如题。在
STM32CubeMX中创建了一个工程,选设了GPIO——
开发板上的3个LED分别连接在PC7、PB7、PB14上因此选设这3个口,并分别命名为LED1,LED2,LED3;在Cube中时钟的设置只有HSI RC的显示为正常 {MOD},LSE、HSE都显示为灰 {MOD}的不可选状态,因此选择前者。一切设置好生成工程后在IAR下编译下载都正常,但LED没有闪烁,程序运行后好像时钟不计数一样——永远在初始态,因为采用的是HSI RC内部振荡器,无法用示波器查看,请问是什么原因?在while(1)中:
HAL_GPIO_WritePin(GPIOC,LED1_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOB,LED3_Pin,GPIO_PIN_SET);
HAL_Delay(5000);
HAL_GPIO_WritePin(GPIOC,LED1_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,LED2_Pin,GPIO_PIN_RESET);
HAL_GPIO_WritePin(GPIOB,LED3_Pin,GPIO_PIN_RESET);
HAL_Delay(5000);
结果是LED 亮以后永远不灭了——没有闪烁!
先谢谢了
你这个直接用的HSI,没有使用PLL,跟咱的情况不一样哈。试着DEBUG一下,看看能不能找到问题
没有问题,可以加上PLL,反正都是Cube自动生成的。完后拷贝上来给你,谢谢
void SystemClock_Config(void){
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
//Configure the main internal regulator output voltage
if (HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1) != HAL_OK){
_Error_Handler(__FILE__, __LINE__);
}
//Initializes the CPU, AHB and APB busses clocks
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSIState = RCC_HSI_ON;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;
RCC_OscInitStruct.PLL.PLLN = 8;
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV2;
RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){
_Error_Handler(__FILE__, __LINE__);
}
//Initializes the CPU, AHB and APB busses 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_DIV2;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK){
_Error_Handler(__FILE__, __LINE__);
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_LPUART1|RCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_ADC;
PeriphClkInit.Lpuart1ClockSelection = RCC_LPUART1CLKSOURCE_PCLK1;
PeriphClkInit.I2c1ClockSelection = RCC_I2C1CLKSOURCE_PCLK1;
PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_PLLSAI1;
PeriphClkInit.PLLSAI1.PLLSAI1Source = RCC_PLLSOURCE_HSI;
PeriphClkInit.PLLSAI1.PLLSAI1M = 2;
PeriphClkInit.PLLSAI1.PLLSAI1N = 32;
PeriphClkInit.PLLSAI1.PLLSAI1P = RCC_PLLP_DIV2;
PeriphClkInit.PLLSAI1.PLLSAI1Q = RCC_PLLQ_DIV2;
PeriphClkInit.PLLSAI1.PLLSAI1R = RCC_PLLR_DIV4;
PeriphClkInit.PLLSAI1.PLLSAI1ClockOut = RCC_PLLSAI1_ADC1CLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){
_Error_Handler(__FILE__, __LINE__);
}
//Configure the Systick interrupt time
HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);
//Configure the Systick
HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
//SysTick_IRQn interrupt configuration
HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
一周热门 更多>