Код: Выделить всё
if( ADC1_GetFlagStatus( ADC1_FLAG_EOC))
{
resultat_ADC1 = ADC1_GetConversionValue(); //Читаем результат преобразования.
GPIO_WriteReverse(GPIOD, GPIO_PIN_4);
ADC1_ClearFlag( ADC1_FLAG_EOC);
}Код: Выделить всё
main()
{
TIM1_PERIOD = GradazSdvig - 1; // Период счета TIM1
TIM1_PRECALER = (uint16_t)(CLK_HSI_RC / (4.0*f_Sig*(float)GradazSdvig)) - 1; // Предделитель TIM1
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_FL_NO_IT);
GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);
clk_Config();
//enableInterrupts();
TIM1_Config();
ADC1_Config();
while (1)
{
//result_ADC1 = ADC1_GetConversionValue();
//ADC1_ClearFlag( ADC1_FLAG_EOC);
if( ADC1_GetFlagStatus( ADC1_FLAG_EOC))
{
resultat_ADC1 = ADC1_GetConversionValue(); //Читаем результат преобразования.
GPIO_WriteReverse(GPIOD, GPIO_PIN_4);
ADC1_ClearFlag( ADC1_FLAG_EOC);
}
}
}
static void TIM1_Config(void)
{
TIM1_DeInit();
TIM1_TimeBaseInit(TIM1_PRECALER, TIM1_COUNTERMODE_UP, TIM1_PERIOD, 0);
/*TIM1_Pulse = CCR3_Val*/
TIM1_OC3Init(
TIM1_OCMODE_PWM1,
TIM1_OUTPUTSTATE_ENABLE,
TIM1_OUTPUTNSTATE_DISABLE,
4, // ШИМ 4/8, отладка
TIM1_OCPOLARITY_HIGH,
TIM1_OCNPOLARITY_HIGH,
TIM1_OCIDLESTATE_SET,
TIM1_OCNIDLESTATE_RESET);
/*TIM1_Pulse = CCR4_Val*/
TIM1_OC4Init(
TIM1_OCMODE_PWM1,
TIM1_OUTPUTSTATE_ENABLE,
Sdvig,
TIM1_OCPOLARITY_LOW,
TIM1_OCIDLESTATE_SET);
//TIM1_UpdateDisableConfig (ENABLE); // Enables or Disables the TIM1 Update event.
TIM1_SelectOutputTrigger(TIM1_TRGOSOURCE_UPDATE); // Настройка выходного триггера таймера
//TIM1_UpdateDisableConfig (ENABLE); // Enables or Disables the TIM1 Update event.
TIM1_CtrlPWMOutputs(ENABLE); // TIM1 Main Output Enable
TIM1_Cmd(ENABLE); // TIM1 counter enable
}
static void ADC1_Config(void)
{
ADC1_DeInit();
ADC1_Init(
ADC1_CONVERSIONMODE_SINGLE, // Непрерывное преобразование
ADC1_CHANNEL_3, // Канал 3, PD2
ADC1_PRESSEL_FCPU_D8, //Prescaler selection fADC1 = fcpu/8, 2 мГц
ADC1_EXTTRIG_TIM, // Conversion from Internal TIM1 TRGO event.
ENABLE, // Разрешение внешнего тактирования.
//DISABLE, // Разрешение внешнего тактирования.
ADC1_ALIGN_RIGHT, // Правое выравнивание
ADC1_SCHMITTTRIG_CHANNEL3, //параметр выбирает вывод для включения или отключения SchmittTrigger, внутрисхемное отключения вывода от лишних узлов для предотвращения искажения конвертируемого сигнала.
DISABLE); // Преобразование без триггера Шмидта. Относится к предыдущему параметрру
//ADC1_Cmd(ENABLE);
ADC1_ClearFlag( ADC1_FLAG_EOC);
ADC1_ITConfig( ADC1_IT_EOCIE, ENABLE); //Включаем прерывание от окончания преобразования.
//enableInterrupts(); // Разрешениие прерывания
//ADC1_StartConversion();
//ADC1->CR1 = 1;
//ADC1->CR1 = 1;
//ADC1_ClearFlag( ADC1_FLAG_EOC);
ADC1_Cmd(ENABLE);
}
INTERRUPT_HANDLER(ADC1_IRQHandler, 22)
{
if( ADC1_GetFlagStatus( ADC1_FLAG_EOC))
{
resultat_ADC1 = ADC1_GetConversionValue(); //Читаем результат преобразования.
ADC1_ClearFlag( ADC1_FLAG_EOC);
}
}

