Skip to main content
MAmem.1
Associate III
February 6, 2023
Question

Setting MCO2 output on STM32G0

  • February 6, 2023
  • 2 replies
  • 1172 views

Hi,

I'm trying to get a clock output at 460.9 Khz on PB2 by setting the MCO2.

The PB2 pin is declared as follow:

static void MX_GPIO_Init(void)

{

 GPIO_InitTypeDef GPIO_InitStruct = {0};

 /* GPIO Ports Clock Enable */

 __HAL_RCC_GPIOB_CLK_ENABLE();

 /*Configure GPIO pin : PB2 */

 GPIO_InitStruct.Pin = GPIO_PIN_2;

 GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

 GPIO_InitStruct.Pull = GPIO_NOPULL;

 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

 GPIO_InitStruct.Alternate = GPIO_AF3_MCO2;

 HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

}

Also SystemClock_Config is as follow:

void SystemClock_Config(void)

{

 RCC_OscInitTypeDef RCC_OscInitStruct = {0};

 RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

 /** Configure the main internal regulator output voltage

 */

 HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);

 /** Initializes the RCC Oscillators according to the specified parameters

 * in the RCC_OscInitTypeDef structure.

 */

 RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;

 RCC_OscInitStruct.HSIState = RCC_HSI_ON;

 RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1;

 RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT;

 RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;

 RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI;

 RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV4;

 RCC_OscInitStruct.PLL.PLLN = 59;

 RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV16;

 RCC_OscInitStruct.PLL.PLLQ = RCC_PLLQ_DIV8;

 RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV4;

 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_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;

 RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;

 RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;

 if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)

 {

   Error_Handler();

 }

 HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_PLLPCLK, RCC_MCO2DIV_32);

}

but getting none on the PB2, what am I doing wrong ?

NB: I don't have any external crystal, only which to use internal clock HSI.

Thanks for your help

This topic has been closed for replies.

2 replies

S.Ma
Principal
February 7, 2023

Here is an example in IRQ_SelfSettle.c of generating HSI prescaled output to MCO pin for STM32C0 (subset of all STM32), in case this gives clues before someone can answer better.

waclawek.jan
Super User
February 7, 2023

Read out and check/post content of relevant RCC and GPIO registers.

JW