0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
|
|
1 | |
STM32VL-discovery нет АЦП на портах выше GPIO_Pin_710.11.2013, 19:36. Показов 6506. Ответов 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); } Не удается снимать аналоговый сигнал с ножек портов выше 7. Т.е. с GPIOA.0 - GPIOA.7 снять удается, а с GPIOA.8 -GPIOA.15 нет. То же касается и других букв портов. Я что-то делаю не так?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
10.11.2013, 19:36 | |
Ответы с готовыми решениями:
13
Pinboard II & STM32VL-DISCOVERY bmp085+stm32vl discovery STM32VL Discovery настройка таймера Начало работы stm32vl-discovery |
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
10.11.2013, 20:54 | 2 |
![]()
0
|
2 / 2 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
|
|
10.11.2013, 21:17 | 3 |
И пользуйтесь утилитой MicroXplorer.
0
|
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
|
|
10.11.2013, 21:18 | 4 |
![]() Большое спасибо за подсказку, я не ожидал такого грязного подвоха со стороны ST Microitistronics.
0
|
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
|
|
10.11.2013, 21:20 | 5 |
![]()
0
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
10.11.2013, 23:01 | 6 |
![]() Большое спасибо за подсказку, я не ожидал такого грязного подвоха со стороны ST Microitistronics. У 32F100RBT6 вполне реально выведены 15 каналов АЦП, да и в принципе это общая практика у всех производителей ... <Изображение удалено>
0
|
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
|
|
10.11.2013, 23:20 | 7 |
![]() Одновременно можно использовать не больше восьми. И нужно чтобы у ножек номера не повторялись (например GPIOA.1 и GPIOB.1). Нужно объяснять почему? Можно выкрутиться и каждый раз пернастраивать GPIO и АЦП, но это не дело.
0
|
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 30
|
|
10.11.2013, 23:52 | 8 |
![]()
0
|
1 / 1 / 0
Регистрация: 07.02.2106
Сообщений: 4,013
|
|
11.11.2013, 00:10 | 9 |
![]()
0
|
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 |
![]()
0
|
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
|
|
11.11.2013, 00:27 | 12 |
![]() Вы пробовали использовать одновременно PB0 и PC0? Приведите пример кода. У АЦП 16 каналов, каждый из которых можно привязать к любой из ног, которая имеет функцию АЦП входа. Но вместе с тем нельзя использовать одновременно PB0 и PC0. Если я не прав, и вы уверены, что можно, то попрошу показать как.
0
|
0 / 0 / 0
Регистрация: 15.06.2012
Сообщений: 3,097
|
|
11.11.2013, 01:00 | 13 |
![]() ![]() Код
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
|
0 / 0 / 0
Регистрация: 22.08.2012
Сообщений: 37
|
|
11.11.2013, 13:02 | 14 |
![]()
0
|
11.11.2013, 13:02 | |
Помогаю со студенческими работами здесь
14
TFT 320x240 + STM32VL Discovery STM32VL-DiSCOVERY Аппаратная проблема? ST-Link не шьет stm32vl discovery АЦП в stm32vl Где хранить данные для STM32VL Discovery? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |