Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту


 
Опции темы

Настроить АЦП ST STM32F100xB

Непрочитано 04.03.2016, 19:29  
AleksandrNov
Прохожий
 
Регистрация: 04.03.2016
Сообщений: 1
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
AleksandrNov на пути к лучшему
По умолчанию Настроить АЦП ST STM32F100xB

Помогите разобраться почему преобразование АЦП не выполняется второй раз?


PHP код:
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

char k, n, r, g, b;
uint32_t DataConv1, DataConv2, DataConv3, DataConv4;

void vFreeRTOSInitAll()
{
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
  
  GPIO_InitTypeDef PORT_init_struct;
  PORT_init_struct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3;
  PORT_init_struct.GPIO_Speed = GPIO_Speed_10MHz;
  PORT_init_struct.GPIO_Mode = GPIO_Mode_AIN;
  GPIO_Init(GPIOC, &PORT_init_struct);
  
  ADC_InitTypeDef ADC_init_struct;
  RCC_ADCCLKConfig(RCC_PCLK2_Div4); //Устанавливаем предделитель тактовой АЦП.
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);//Включаем тактирование.
  
  // ADC1 configuration
  ADC_init_struct.ADC_Mode = ADC_Mode_Independent;//Не в Dual Mode
  ADC_init_struct.ADC_ScanConvMode = ENABLE;//Сканирование включим.
  ADC_init_struct.ADC_ContinuousConvMode = DISABLE;//Одиночное преобразование.
  ADC_init_struct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;//Тригер выключим
  ADC_init_struct.ADC_DataAlign = ADC_DataAlign_Right;//Выравнивание по правому краю.
  ADC_init_struct.ADC_NbrOfChannel = 4;//Число каналов.
  ADC_Init(ADC1, &ADC_init_struct);//Инициализируем.
  
  ADC_InjectedSequencerLengthConfig(ADC1, 4);
  //Сопоставляем каналы регистрам. За регистры отвечает 3-й параметр. Параллельно настраиваем порты.
  ADC_InjectedChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_71Cycles5);
  ADC_InjectedChannelConfig(ADC1, ADC_Channel_11, 2, ADC_SampleTime_71Cycles5);
  ADC_InjectedChannelConfig(ADC1, ADC_Channel_12, 3, ADC_SampleTime_71Cycles5);
  ADC_InjectedChannelConfig(ADC1, ADC_Channel_13, 4, ADC_SampleTime_71Cycles5);
  
  //Выключаем тригер.
  ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_None);
  // Enable automatic injected conversion start after regular one
  ADC_AutoInjectedConvCmd(ADC1, ENABLE);//Это похоже запускает инжекторный канал вместе с регулярным. Т.е. в будущем будем запускать регулярный канал, а снимать с инжекторных. Хотя по поводу данной функции я могу ошибаться.
  //Включили прерывания с инжекторного канала по окончании преобразования.
  ADC_ITConfig(ADC1, ADC_IT_JEOC, ENABLE);
  //Включили прерывания АЦП.
 // NVIC_EnableIRQ(18);
  //Включили АЦП
  ADC_Cmd(ADC1, ENABLE);
  /*Теперь надо сделать калибровку. В этом я тоже не разбирался. Так что тут приведена стандартная процедура.*/
  // Enable ADC1 reset calibration register
  ADC_ResetCalibration(ADC1);
  // Check the end of ADC1 reset calibration register
  while(ADC_GetResetCalibrationStatus(ADC1));
  // Start ADC1 calibration
  ADC_StartCalibration(ADC1);
  // Check the end of ADC1 calibration
  while(ADC_GetCalibrationStatus(ADC1));
  
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

}


/*void ADC1_2_IRQHandler(void)//ADC interrupt
{
  ADC1-›SR&=~ADC_SR_JEOC;
  DataConv1 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
  DataConv2 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
  DataConv3 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_3);
  DataConv4 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_4);
  //ADC_Data_TX = EN;
}
*/


void vBlinkTask (void *pvParameters)
{
    while(1)
    {
        ADC1-›SR&=~ADC_SR_JEOC;
        DataConv1 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_1);
        DataConv2 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_2);
        DataConv3 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_3);
        DataConv4 = ADC_GetInjectedConversionValue(ADC1, ADC_InjectedChannel_4);
        
    }
}


int main()
{
  vFreeRTOSInitAll();
  xTaskCreate(vBlinkTask, "BlinkTask", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
  vTaskStartScheduler();
}

void vApplicationMallocFailedHook( void )
{
  for( ;; );
}

void vApplicationStackOverflowHook( TaskHandle_t pxTask, char *pcTaskName )
{
  ( void ) pcTaskName;
  ( void ) pxTask;
  for( ;; );
}

void vApplicationIdleHook( void )
{
  volatile size_t xFreeStackSpace;
  xFreeStackSpace = xPortGetFreeHeapSize();
} 
Вложения:
Тип файла: rar FreeRTOS_4.rar (1.22 Мб, 38 просмотров)
Реклама:
AleksandrNov вне форума  
Непрочитано 04.03.2016, 19:50  
dgrishin
Почётный гражданин KAZUS.RUN
 
Регистрация: 12.02.2013
Адрес: На болотах
Сообщений: 1,163
Сказал спасибо: 46
Сказали Спасибо 315 раз(а) в 244 сообщении(ях)
dgrishin на пути к лучшему
По умолчанию Re: Настроить АЦП ST STM32F100xB

ADC_ContinuousConvMode = DISABLE;

И калибровку кажется надо выполнять до включения ADC.
dgrishin вне форума  
Непрочитано 06.03.2016, 03:06  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Настроить АЦП ST STM32F100xB

‹лажа удалена.›

Последний раз редактировалось Hives; 06.03.2016 в 21:32. Причина: !
Hives вне форума  
Непрочитано 06.03.2016, 05:15  
индюк
Гуру портала
 
Аватар для индюк
 
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 11,134
Сказал спасибо: 202
Сказали Спасибо 3,285 раз(а) в 2,151 сообщении(ях)
индюк на пути к лучшему
По умолчанию Re: Настроить АЦП ST STM32F100xB

опять спл! мля у меня это вмещается в 12 строчек кода
__________________
кагмаподэ магмаподэ
индюк вне форума  
Непрочитано 06.03.2016, 18:09  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Настроить АЦП ST STM32F100xB

Не порть малину. Может он индус и ему за объем платят?
Hives вне форума  
Непрочитано 06.03.2016, 19:30  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Настроить АЦП ST STM32F100xB

Сообщение от Hives Посмотреть сообщение
После включения. Этот идиотский косяк, который "писатели о STM32" копировали друг у друга, поправили в 15 (!) версии референса.
А теперь смотрим сюда .
Код:
A.7.1 ADC Calibration code example
/* (1) Ensure that ADEN = 0 */
/* (2) Clear ADEN */
/* (3) Launch the calibration by setting ADCAL */
/* (4) Wait until ADCAL=0 */
if ((ADC1-›CR & ADC_CR_ADEN) != 0) /* (1) */
{
 ADC1-›CR &= (uint32_t)(~ADC_CR_ADEN); /* (2) */
}
ADC1-›CR |= ADC_CR_ADCAL; /* (3) */
while ((ADC1-›CR & ADC_CR_ADCAL) != 0) /* (4) */
{
 /* For robust implementation, add here time-out management */
}
__________________
Осторожно , злой кот
dosikus вне форума  
Непрочитано 06.03.2016, 21:30  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Настроить АЦП ST STM32F100xB

dosikus Да, вы правы. Не тот чип глянул.
Hives вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Помогите настроить АЦП в ATMEGA16 Vladimir Semenov AVR 13 11.12.2012 16:17
Помогите настроить АЦП в Atmega32 sergx1300 Микроконтроллеры, АЦП, память и т.д 72 09.11.2010 00:28
Помогите с ЦАП AD7708/AD7718 или их аналогами ST_Senya Микроконтроллеры, АЦП, память и т.д 9 30.11.2009 19:03
как правильно настроить АЦП polimer Микроконтроллеры, АЦП, память и т.д 1 10.12.2004 18:37


Часовой пояс GMT +4, время: 15:01.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.