[PROJEKT] STM32Cube graficzny konfigurator STM32
Kod inicjalizacji przetwornika wygenerowany przez STM32CubeMX został pokazany na listingu 1.
List. 1. Konfiguracja przetwornika ADC1 wygenerowana przez STM32Cube MX
void MX_ADC1_Init(void) { ADC_ChannelConfTypeDef sConfig; /**Configure the global features of the ADC (Clock, Resolution, Data Alignment and number of conversion) */ hadc1.Instance = ADC1; hadc1.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION10b; hadc1.Init.ScanConvMode = DISABLE; hadc1.Init.ContinuousConvMode = DISABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DMAContinuousRequests = DISABLE; hadc1.Init.EOCSelection = EOC_SINGLE_CONV; HAL_ADC_Init(&hadc1); /**Configure for the selected ADC regular channel its corresponding rank in the sequencer and its sample time. */ sConfig.Channel = ADC_CHANNEL_15; sConfig.Rank = 1; sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; HAL_ADC_ConfigChannel(&hadc1, &sConfig); }
Skonfigurowany przetwornik trzeba jeszcze zainicjalizować. Inicjalizacja będzie wymagała włączenia taktowania modułu ADC i ustawienia wyprowadzenia PC5 jako wejścia analogowego. STM32Cube MX generuje automatycznie funkcję inicjalizacyjną HAL_ADC_MspInit (Msp skrót od MCU Support Package). Ta funkcja jest umieszczana przez generator w pliku stm32f4xx_hal_msp.c, a jej wywołanie wygląda następująco: HAL_ADC_MspInit(&hadc1);
List. 2. Inicjalizacja przetwornika ADC1
void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_InitStruct; if(hadc->Instance==ADC1) { /* USER CODE BEGIN ADC1_MspInit 0 */ /* USER CODE END ADC1_MspInit 0 */ /* Peripheral clock enable */ __ADC1_CLK_ENABLE(); /**ADC1 GPIO Configuration PC5 ------> ADC1_IN15 */ GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* USER CODE BEGIN ADC1_MspInit 1 */ /* USER CODE END ADC1_MspInit 1 */ } }
Kolejną ważną konfiguracją mikrokontrolera jest ustawienie taktowania. Układ taktowania nowoczesnych mikrokontrolerów bardzo się rozbudował w porównaniu z prostymi konstrukcjami sprzed lat. Możliwość zaprogramowania w szerokim częstotliwości taktowania rdzenia i osobno częstotliwości taktowania peryferii wymusiła zastosowanie programowanych układów PLL i programowych układów przełączających. Ponadto można wybrać źródło zegara: z oscylatora kwarcowego z dołączanym zewnętrznym rezonatorem, lub z wewnętrznego precyzyjnego oscylatora RC o stałej częstotliwości. Ta elastyczność w konfigurowaniu taktowania jest okupiona większym, lub mniejszym skomplikowaniem układu i dlatego sprawia trudności nawet bardziej doświadczonym programistom, nie mówiąc już o początkujących. Żeby zadanie konfiguracji uczynić prostym jak to tylko możliwe w pakiecie STM32Cube MX umieszczono zakładkę Clock Configuration z graficznym przedstawieniem układu taktowania – rysunek 7.
Domyślnie układ jest tak skonfigurowany żeby rdzeń był taktowany z maksymalną częstotliwością taktowania równą 168 MHz. Źródłem sygnału zegarowego jest oscylator kwarcowy HSE o częstotliwości 8 MHz umieszczony na płytce STM32F4DISCOVERY. Alternatywnie do taktowanie można wybrać oscylator RC HSI o częstotliwości taktowania 16 MHz. Wyboru oscylatora dokonuje się w bloku PLL Source Mux.