STM32
直播中

爱与友人

9年用户 956经验值
擅长:可编程逻辑 模拟技术 存储技术
私信 关注
[问答]

STM32G0F6P6同时使能RTC和IWDG,结果运行之后串口没反应的原因?

对比了一下,即使能LSI和LSE时钟,估计没有起振;例程只使能了HSI,就可以运行。

使能三个时钟:
void SystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
/ Configure the main internal regulator output voltage*/HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);/* Configure LSE Drive Capability/__HAL_RCC_LSEDRIVE_CONFIG(RCC_LSEDRIVE_LOW);/ Initializes the CPU, AHB and APB busses clocks*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_LSI|RCC_OSCILLATORTYPE_LSE;RCC_OscInitStruct.LSEState = RCC_LSE_ON;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.LSIState = RCC_LSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1;RCC_OscInitStruct.PLL.PLLN = 8;RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2;if (HAL_RCC_OscConfig( RCC_OscInitStruct) != HAL_OK){Error_Handler();}/* Initializes the CPU, AHB and APB busses clocks/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
if (HAL_RCC_ClockConfig( RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}/* Initializes the peripherals clocks/PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_RTC|RCC_PERIPHCLK_USART1|RCC_PERIPHCLK_ADC;PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_PCLK1;PeriphClkInit.AdcClockSelection = RCC_ADCCLKSOURCE_SYSCLK;PeriphClkInit.RTCClockSelection = RCC_RTCCLKSOURCE_LSE;
if (HAL_RCCEx_PeriphCLKConfig( PeriphClkInit) != HAL_OK){Error_Handler();}}
/ 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 */
/ 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,tex: printf("Wrong parameters value: file %s on line %drn", file, line) // USER CODE END 6 /}endif / USE_FULL_ASSERT /

      /**** (C) COPYRIGHT STMicroelectronics *END OF FILE/




回帖(1)

王璨

2024-3-12 15:24:55
RTC, IWDG,UART是三个外设,在时钟源正确下可互相之间可独立工作。一下子配置了这么多,跨越了很多步,很难说哪里出问题。

小伙伴们上手芯片时,都是一个外设调好后再调另一个外设,一块一块搭积木的。
建议:先调试一个外设,并通过MCO检查硬件时钟是否正常工作。
          Cube库中有相应的例程,调通后再调另一个外设。
举报

更多回帖

×
20
完善资料,
赚取积分