Метценгерштейн 0 3 августа, 2017 Опубликовано 3 августа, 2017 · Жалоба В регистрах этого не могу найти. Нужно при входе в прерывание, понимать, с какого канала пришли данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NikP 0 4 августа, 2017 Опубликовано 4 августа, 2017 · Жалоба С этим не работал, но в Миландровском 1986ВЕ1т (который по лицензии СТМ) в регистре результата биты 1-15 результат, 16-20 канал результата. Может здесь по аналогии? Попробуйте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 4 августа, 2017 Опубликовано 4 августа, 2017 · Жалоба Вроде как разобрался- где брать номер канала. Это значение AWDCH регистра CR1. Вопрос по инициализации AWD на 2 канала. Задача- на двух каналах отслеживать выход за диапазон. Не работает. Как корректно проинициализировать? GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_1; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure); NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = ADC1_2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; 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_ExternalTrigConv = ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel = 2; ADC_Init (ADC1, &ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 1, ADC_SampleTime_55Cycles5); ADC_AnalogWatchdogThresholdsConfig(ADC1, 400, 0); ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_1); ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_4); /* Enable analog watchdog on one regular channel */ ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_AllRegEnable); // ADC_AnalogWatchdog_SingleRegEnable ADC_ClearITPendingBit(ADC1,ADC_IT_AWD); ADC_ClearITPendingBit(ADC1, ADC_IT_EOC); ADC_ITConfig(ADC1, ADC_IT_AWD, ENABLE); NVIC_Init(&NVIC_InitStructure); ADC_Cmd(ADC1, ENABLE); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Метценгерштейн 0 4 августа, 2017 Опубликовано 4 августа, 2017 · Жалоба Чтобы 2 канала отслеживать по AWD, надо делать так: ADC_RegularChannelConfig(ADC1, ADC_Channel_1, 1, ADC_SampleTime_55Cycles5); ADC_RegularChannelConfig(ADC1, ADC_Channel_4, 2, ADC_SampleTime_55Cycles5); ADC_AnalogWatchdogThresholdsConfig(ADC1, 400, 0); // ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_1); // ADC_AnalogWatchdogSingleChannelConfig(ADC1, ADC_Channel_4); /* Enable analog watchdog on one regular channel */ ADC_AnalogWatchdogCmd(ADC1, ADC_AnalogWatchdog_AllRegEnable); 1. необходимо указать rank 2. ADC_AnalogWatchdog_AllRegEnable Работает. Как отследить- с какого канала пришло прерывание- вопрос открыт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться