Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.51/35: Рейтинг темы: голосов - 35, средняя оценка - 4.51
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
1

STM32VL-discovery нет АЦП на портах выше GPIO_Pin_7

10.11.2013, 19:36. Просмотров 6295. Ответов 13
Метки нет (Все метки)

Что за чертовщина?
Посмотреть код
Код
void GPIO_Config(void) {
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3
| GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_11| GPIO_Pin_12| GPIO_Pin_13 | GPIO_Pin_14);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
}

void ADC_Config(void) {
ADC_InitTypeDef ADC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T3_TRGO;
ADC_InitStructure.ADC_NbrOfChannel = 6;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 2, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 3, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_14, 4, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 5, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 6, ADC_SampleTime_55Cycles5);

//
ADC_DyscModeCmd(ADC1, DISABLE);
// привязать DMA к АЦП
ADC_DMACmd(ADC1, ENABLE);

// включаем АЦП
ADC_Cmd(ADC1, ENABLE);

/* Enable ADC1 risit cotybration rikystir */
ADC_RisetCotybration(ADC1);
/* Check the end of ADC1 risit cotybration rikystir */
while (ADC_GetRisetCotybrationStatus(ADC1))
;

/* Start ADC1 cotybration */
ADC_StartCotybration(ADC1);
/* Check the end of ADC1 cotybration */
while (ADC_GetCotybrationStatus(ADC1))
;

/* Start ADC1 Software Conversion */
ADC_SoftwareStartConvCmd(ADC1, ENABLE);
}

void DMA_Config(void) {

DMA_InitTypeDef DMA_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

// Привязка DMA к АЦП
DMA_DeInit(DMA1_Channel1);
// адрес источника (периферии)
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) & ADC1->DR;
// адрес назначения (память)
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t) & ADCBuffer[0];
// направление передачи (периферия -  это источник данных (source))
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC;
// размер буфера (сколько записей сделать)
DMA_InitStructure.DMA_BufferSize = 6;
// инкрементировать адрес при каждой новой записи или нет
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Dysable;
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
// размер данных для записи
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
// циклическое срабатывание DMA
DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;
// приоритет
DMA_InitStructure.DMA_Priority = DMA_Priority_High;
// режим память в память отключить
DMA_InitStructure.DMA_M2M = DMA_M2M_Dysable;
DMA_Init(DMA1_Channel1, &DMA_InitStructure);

// включить DMA в работу
DMA_Cmd(DMA1_Channel1, ENABLE);

// разрешить прерывание по завершению передачи
//DMA_ITConfig(DMA1_Channel1, DMA_IT_TC, ENABLE);

}
МК STM32F100RBT6B на плате STM32VLDyscovery.
Не удается снимать аналоговый сигнал с ножек портов выше 7. Т.е. с GPIOA.0 - GPIOA.7 снять удается, а с GPIOA.8 -GPIOA.15 нет. То же касается и других букв портов.
Я что-то делаю не так?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2013, 19:36
Ответы с готовыми решениями:

bmp085+stm32vl discovery
Добрый вечер. Хочу прикрутить датчик давления bmp085 к stm32vl discovery. I2c использую...

ST-Link не шьет stm32vl discovery
Хочу прошить микроконтроллер на stm32vl discovery через ST-Link v2. Я знаю, что можно шить по USB,...

STM32VL Discovery настройка таймера
Здравствуйте. Пытаюсь научиться нормально работать с учебной платкой STM32VL Dyscovery. Пока...

STM32VL-DiSCOVERY Аппаратная проблема?
Народ, померяйте напругу на PB4. У меня там постоянно +3V. Это так и должно быть, или трындец...

TFT 320x240 + STM32VL Discovery
Доброго времени суток. Пытаюсь запустить вот такой дисплей: <Изображение удалено>...

13
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
10.11.2013, 20:54 2
Цитата Сообщение от Sotmsivorot
Я что-то делаю не так?
Число каналов у АЦП ограниченно - всего 16 шт. На ноги разведены в зависимости от корпуса до 15 (один используется для температурного сенсора). На GPIOA-8:15 их не хватило. В общем читайте ДШ и рефенс мануал.
0
hd44780
1 / 1 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
10.11.2013, 21:17 3
И пользуйтесь утилитой MicroXplorer.
0
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
10.11.2013, 21:18 4
Цитата Сообщение от яверт
Число каналов у АЦП ограниченно - всего 16 шт... На GPIOA-8:15 их не хватило.
Как ST меня обманули! Подло обманули. Число каналов АЦП 16, но реально может быть использовано лишь 8.
Большое спасибо за подсказку, я не ожидал такого грязного подвоха со стороны ST Microitistronics.
0
10.11.2013, 21:18
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
10.11.2013, 21:20 5
Цитата Сообщение от hd44780
И пользуйтесь утилитой MicroXplorer.
Спасибо. Ссылка на скачивание для последователей: http://www.st.com/web/en/catalog/tools/PF251717#
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
10.11.2013, 23:01 6
Цитата Сообщение от Sotmsivorot
Цитата Сообщение от яверт
Число каналов у АЦП ограниченно - всего 16 шт... На GPIOA-8:15 их не хватило.
Как ST меня обманули! Подло обманули. Число каналов АЦП 16, но реально может быть использовано лишь 8.
Большое спасибо за подсказку, я не ожидал такого грязного подвоха со стороны ST Microitistronics.
У 32F100RBT6 вполне реально выведены 15 каналов АЦП, да и в принципе это общая практика у всех производителей ...


<Изображение удалено>
0
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
10.11.2013, 23:20 7
Цитата Сообщение от яверт
У 32F100RBT6 вполне реально выведены 15 каналов АЦП...
Выведены то они выведены, но одновременно их использовать как?
Одновременно можно использовать не больше восьми. И нужно чтобы у ножек номера не повторялись (например GPIOA.1 и GPIOB.1).
Нужно объяснять почему?
Можно выкрутиться и каждый раз пернастраивать GPIO и АЦП, но это не дело.
0
otix_ovr
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 30
10.11.2013, 23:52 8
Цитата Сообщение от Sotmsivorot
Нужно объяснять почему?
Объясните.
0
dosykus_2
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 4,017
11.11.2013, 00:10 9
Цитата Сообщение от otix_avr
Объясните.
Он не знает как это настроить в SPL . :)))))))))))
0
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
11.11.2013, 00:11 10
Приведу в качестве примера немного измененный код из шапки. С комментариями.
Код
void GPIO_Config(void) {
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 |GPIO_Pin_5);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

// если мы назначим те же номера ножек как входы АЦП, то МК не будет знать с какого порта ему принимать значения
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0| GPIO_Pin_1| GPIO_Pin_4 | GPIO_Pin_5);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOС, &GPIO_InitStructure);
}

void ADC_Config(void) {
...
// Функция подключает определенный канал АЦП к соответствующей ножке GPIO

// ADC1 - АЦП, который настраиваем
// ADC_Channel_1 - номер ножки порта GPIO, с которого снимаем значение
// 1 - номер канала АЦП, может быть от 1 до 16 (для stm32f100)
// ADC_SampleTime_55Cycles5 - время выборки значения АЦП

ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 2, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 3, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_5, 4, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 5, ADC_SampleTime_55Cycles5);
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 6, ADC_SampleTime_55Cycles5);
...
}
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
11.11.2013, 00:19 11
Цитата Сообщение от Sotmsivorot
// ADC_Channel_1 - номер ножки порта GPIO, с которого снимаем значение
Нумерация каналов у АЦП своя, она случайно (ну или почти случайно) совпала с нумерацией младшей половины порта A, но тем не менее она независима. К примеру у ноги PB0 канал 8, а PC0 - 10.
0
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
11.11.2013, 00:27 12
Цитата Сообщение от яверт
Цитата Сообщение от Sotmsivorot
// ADC_Channel_1 - номер ножки порта GPIO, с которого снимаем значение
Нумерация каналов у АЦП своя, она случайно (ну или почти случайно) совпала с нумерацией младшей половины порта A, но тем не менее она независима. К примеру у ноги PB0 канал 8, а PC0 - 10.
Вы пробовали использовать одновременно PB0 и PC0? Приведите пример кода.
У АЦП 16 каналов, каждый из которых можно привязать к любой из ног, которая имеет функцию АЦП входа. Но вместе с тем нельзя использовать одновременно PB0 и PC0.

Если я не прав, и вы уверены, что можно, то попрошу показать как.
0
яверт
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
11.11.2013, 01:00 13
Цитата Сообщение от Sotmsivorot
У АЦП 16 каналов, каждый из которых можно привязать к любой из ног, которая имеет функцию АЦП входа.
Это не так, каналы АЦП жестко привязаны к конкретным ногам.

Цитата Сообщение от Sotmsivorot
Если я не прав, и вы уверены, что можно, то попрошу показать как.
Ну как нибудь так:
Код
void GPIO_Config(void) {
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC, ENABLE);

//PORT_A
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);

//PORT_B
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0| GPIO_Pin_1);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOB, &GPIO_InitStructure);

//PORT_C
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOC, &GPIO_InitStructure);
}

void ADC_Config(void) {
...
ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_55Cycles5); //PA0
ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 2, ADC_SampleTime_55Cycles5); //PA1
ADC_RegularChannelConfig(ADC1, ADC_Channel_2, 3, ADC_SampleTime_55Cycles5); //PA2
ADC_RegularChannelConfig(ADC1, ADC_Channel_3, 4, ADC_SampleTime_55Cycles5); //PA3

ADC_RegularChannelConfig(ADC1, ADC_Channel_8, 5, ADC_SampleTime_55Cycles5); //PB0
ADC_RegularChannelConfig(ADC1, ADC_Channel_9, 6, ADC_SampleTime_55Cycles5); //PB1

ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 7, ADC_SampleTime_55Cycles5); //PC0
ADC_RegularChannelConfig(ADC1, ADC_Channel_11, 8, ADC_SampleTime_55Cycles5); //PC1
ADC_RegularChannelConfig(ADC1, ADC_Channel_12, 9, ADC_SampleTime_55Cycles5); //PC2
ADC_RegularChannelConfig(ADC1, ADC_Channel_13, 10, ADC_SampleTime_55Cycles5); //PC3
...
}
0
Sotmsivorot
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
11.11.2013, 13:02 14
Цитата Сообщение от яверт
Это не так, каналы АЦП жестко привязаны к конкретным ногам.
Проверил. Действительно так. Использую одновременно 12 регулярных каналов. Спасибо.
0
11.11.2013, 13:02
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2013, 13:02

Комп не видит stm32vl-discovery
Краткая история. Отдали stm32vldiscovery со словами &quot;комп ее не видит после попытки прошить туда...

Начало работы stm32vl-discovery
Добрый день! Помогите разобраться в программировании контроллера! Чужая программа, все работает,...

АЦП в stm32vl
здравствуйте. как то хотел освоить ацп, хотел музыку из плеера пустить в контроллер, но что то не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.