#include <stdio.h>
#include <string.h>
#include "stm32l0xx_hal.h" // main.h yerine bunu kullanıyoruz
// Değişkenler
ADC_HandleTypeDef hadc;
DMA_HandleTypeDef hdma_adc;
TIM_HandleTypeDef htim2;
uint32_t adc_deger = 0;
// Prototitpler
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_ADC_Init(void);
static void MX_TIM2_Init(void);
int main(void) {
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_DMA_Init();
MX_ADC_Init();
MX_TIM2_Init();
// PWM ve ADC-DMA başlat
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2);
HAL_ADC_Start_DMA(&hadc, &adc_deger, 1);
while (1) {
// Potansiyometre değerini PWM'e (0-1000) oranla
uint32_t pwm_val = (adc_deger * 1000) / 4095;
// PA1 (A1) pinine sinyal gönder
__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, pwm_val);
HAL_Delay(50);
}
}
static void MX_TIM2_Init(void) {
htim2.Instance = TIM2;
htim2.Init.Prescaler = 31;
htim2.Init.Period = 1000;
HAL_TIM_PWM_Init(&htim2);
TIM_OC_InitTypeDef sOC = {0};
sOC.OCMode = TIM_OCMODE_PWM1;
sOC.Pulse = 500;
HAL_TIM_PWM_ConfigChannel(&htim2, &sOC, TIM_CHANNEL_2);
}
static void MX_ADC_Init(void) {
hadc.Instance = ADC1;
hadc.Init.Resolution = ADC_RESOLUTION_12B;
hadc.Init.ContinuousConvMode = ENABLE;
hadc.Init.DMAContinuousRequests = ENABLE;
HAL_ADC_Init(&hadc);
ADC_ChannelConfTypeDef sCh = {0};
sCh.Channel = ADC_CHANNEL_0; // PA0 (Potansiyometre girişi)
sCh.Rank = ADC_RANK_CHANNEL_NUMBER;
HAL_ADC_ConfigChannel(&hadc, &sCh);
}
static void MX_DMA_Init(void) { __HAL_RCC_DMA1_CLK_ENABLE(); }
static void MX_GPIO_Init(void) { __HAL_RCC_GPIOA_CLK_ENABLE(); }
void SystemClock_Config(void) {}Loading
st-nucleo-l031k6
st-nucleo-l031k6