LinkedIn YouTube Facebook
Szukaj

Wstecz
Artykuły

[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.

Rys. 7. Zakładka Clock Configuration

Rys. 7. Zakładka Clock Configuration

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.

Absolwent Wydziału Elektroniki Politechniki Wrocławskiej, współpracownik miesięcznika Elektronika Praktyczna, autor książek o mikrokontrolerach Microchip i wyświetlaczach graficznych, wydanych nakładem Wydawnictwa BTC. Zawodowo zajmuje się projektowaniem zaawansowanych systemów mikroprocesorowych.