Last active
December 17, 2019 12:24
-
-
Save ozturkib/218ca9056cdc7fad57f3d118121d4deb to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "main.h" | |
/* | |
Projede Drivers/STM32F4xx_HAL_Driver altinda kullanilacak .c dosyasinin bulunmamasinin adimlari (adc icin): | |
Oncesinde uygun yerlere asagidakileri indir. | |
stm32f4xx_hal_adc.c | |
stm32f4xx_hal_adc_ex.c | |
stm32f4xx_hal_adc.h | |
stm32f4xx_hal_adc_ex.h | |
Projeye ADC icin asagidaki iki kutuphaneyi ekle | |
stm32f4xx_hal_adc.c | |
stm32f4xx_hal_adc_ex.c | |
stm32f4xx_hal_conf.h icerisindeki | |
#define HAL_ADC_MODULE_ENABLED satirini aktiflestir. | |
*/ | |
/* | |
STM32F4Discovery board with the STM32F407VG microcontroller | |
We will use the PC1 pin connected to channel 11 of ADCs 1-3 according to the STM32F407xx datasheet. | |
The easiest way to start using the ADC is to enable it in the poll mode. To do that you will need the following: | |
- Enable the ADC clock | |
- Enable the GPIO clock for the pin you want to use | |
- Configure the GPIO pin as an analog input | |
- Configure the ADC speed (prescaler/sample time) | |
- Enable continuous measurement mode | |
*/ | |
/* | |
UYARI: | |
Derste kullandigimiz pin olan PC1 pin'ini odev ve projelerde kullanamazsiniz. | |
*/ | |
/* | |
Derste bahsedilecekler | |
Polling Mode | |
Vin < 0, 0 <= Vin <= Vref , Vin > Vref | |
Belirlenen aralikta ise formulunu cikar | |
*/ | |
static uint32_t gADCValue;//gADCdegeri; | |
static uint32_t gMeasurementNumber; | |
static ADC_HandleTypeDef gAdcHandle; | |
void ADC_Polling_App(void) | |
{ | |
//ADC_DevamliOku | |
/* | |
Potansiyometre giris okunma | |
PC1 pinine bagla | |
ADC123_IN11 | |
*/ | |
if (HAL_ADC_PollForConversion(&gAdcHandle, 1000000) == HAL_OK) | |
{ | |
gADCValue = HAL_ADC_GetValue(&gAdcHandle); | |
gMeasurementNumber++; | |
} | |
} | |
void ADC_Config(void) | |
{ | |
//ADC_Tanimlama | |
GPIO_InitTypeDef GPIO_InitStruct; | |
ADC_ChannelConfTypeDef ADC_ChannelStruct; | |
__HAL_RCC_GPIOC_CLK_ENABLE(); /* GPIO C portunun clock'unu aktiflestir */ | |
__HAL_RCC_ADC1_CLK_ENABLE(); | |
GPIO_InitStruct.Pin = GPIO_PIN_1; | |
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; | |
GPIO_InitStruct.Pull = GPIO_NOPULL; | |
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); | |
HAL_NVIC_SetPriority(ADC_IRQn, 0, 0); | |
HAL_NVIC_EnableIRQ(ADC_IRQn); | |
gAdcHandle.Instance = ADC1; | |
gAdcHandle.Init.ClockPrescaler = ADC_CLOCKPRESCALER_PCLK_DIV2; | |
gAdcHandle.Init.Resolution = ADC_RESOLUTION_12B; | |
gAdcHandle.Init.ScanConvMode = DISABLE; // 1 Channel | |
gAdcHandle.Init.ContinuousConvMode = ENABLE; | |
gAdcHandle.Init.DiscontinuousConvMode = DISABLE; | |
gAdcHandle.Init.NbrOfDiscConversion = 0; | |
gAdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; | |
gAdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1; | |
gAdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; | |
gAdcHandle.Init.NbrOfConversion = 1; | |
gAdcHandle.Init.DMAContinuousRequests = ENABLE; | |
gAdcHandle.Init.EOCSelection = DISABLE; | |
HAL_ADC_Init(&gAdcHandle); | |
ADC_ChannelStruct.Channel = ADC_CHANNEL_11; | |
ADC_ChannelStruct.Rank = 1; | |
ADC_ChannelStruct.SamplingTime = ADC_SAMPLETIME_480CYCLES; | |
ADC_ChannelStruct.Offset = 0; | |
if (HAL_ADC_ConfigChannel(&gAdcHandle, &ADC_ChannelStruct) != HAL_OK) | |
{ | |
Error_Handler(); | |
} | |
} | |
void ADC_Start_Poll(void) | |
{ | |
//ADC_Baslat | |
HAL_ADC_Start(&gAdcHandle); | |
} | |
uint32_t getValue(void) | |
{ | |
return gADCValue; | |
} | |
///////////////////////// | |
void ADC_Start_IT(void) | |
{ | |
HAL_ADC_Start_IT(&gAdcHandle); | |
} | |
/* | |
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle) | |
{ | |
gADCValue = HAL_ADC_GetValue(AdcHandle); | |
} | |
void ADC_IRQHandler() | |
{ | |
HAL_ADC_IRQHandler(&gAdcHandle); | |
} | |
*/ | |
///////////////////////// |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void TIM2_IRQHandler(void) | |
{ | |
HAL_TIM_IRQHandler(&TIM_InitStruct); | |
HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "main.h" | |
/* | |
stm32f4xx_hal_conf.h icerisindeki | |
#define HAL_TIM_MODULE_ENABLED satirini aktiflestir. | |
stm32f4xx_it.c ve | |
- extern TIM_HandleTypeDef TIM_InitStruct; | |
- void TIM2_IRQHandler(void) icerigi | |
stm32f4xx_it.h | |
- decleration of void TIM2_IRQHandler(void); | |
*/ | |
/* | |
Global Variables | |
*/ | |
TIM_HandleTypeDef TIM_InitStruct; | |
void TIMER_Init(void) | |
{ | |
__HAL_RCC_TIM2_CLK_ENABLE(); //Enable clock to Timer-2 | |
/* Select Timer-2 for further configuration */ | |
TIM_InitStruct.Instance = TIM2; | |
/* | |
Ana clock frekansi = 16 MHz | |
Eger Prescaler = 1000 olursa | |
Prescaler cikisinda 16MHz / 1000 = 16kHz | |
*/ | |
/* | |
Divide the timer-2 input frequency (16Mhz) | |
by a factor of 1000 (16,000,000/1,000 = 16,000 = 16Khz) | |
*/ | |
TIM_InitStruct.Init.Prescaler = 1000; | |
/* Up-Counter mode*/ | |
TIM_InitStruct.Init.CounterMode = TIM_COUNTERMODE_UP; | |
/* | |
We want the time count to be 500msec (half a second). | |
As the input frequency is 16khz so the total | |
counts required for 500msec delay: | |
total counts = 500msec * f | |
= (.5 sec) * 16,000 | |
= 8,000 | |
= 0x1F40 | |
*/ | |
/* | |
istedigim period = 0.5sn | |
Period >>> 16kHz * T = 16kHz * 0.5 = 8000 | |
*/ | |
TIM_InitStruct.Init.Period = 8000; | |
/* | |
Finally initialize Timer-2 | |
*/ | |
while (HAL_TIM_Base_Init(&TIM_InitStruct)!= HAL_OK); | |
/* | |
Enable timer-2 IRQ interrupt | |
*/ | |
HAL_TIM_Base_Start_IT(&TIM_InitStruct); | |
HAL_NVIC_SetPriority(TIM2_IRQn, 1, 0); | |
/* Enable interrupt at IRQ-Level */ | |
HAL_NVIC_EnableIRQ(TIM2_IRQn); | |
/* | |
Start the timer | |
*/ | |
HAL_TIM_Base_Start(&TIM_InitStruct); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment