генерация прерывания EXTI0, когда внешний датчик температуры подключен к STM32F207VC

Я использую контроллер STM32F207VC. У меня есть датчик температуры внешнего зонда, подключенный к одному из внутренних каналов АЦП stm32.

Я хочу сгенерировать внешнее прерывание, когда он подключен к контроллеру, и я должен начать измерение с внешнего датчика температуры.

Пожалуйста, может ли кто-нибудь предоставить мне код или любую помощь в этом

Спасибо


person pranathi    schedule 27.09.2012    source источник
comment
Итак, вам нужна помощь в генерации и внешнем прерывании, чтении с АЦП или в том и другом?   -  person Verax    schedule 01.10.2012
comment
Помогите, пожалуйста, сгенерировать прерывание.   -  person pranathi    schedule 05.10.2012


Ответы (1)


У меня есть процессор STM32F4, подключенный к графическому процессору Solomon Systems SSD1963. У графического процессора есть сигнал разрыва (TE), который уведомляет процессор, когда он собирается выполнить вертикальное обновление. Надеюсь, вы сможете использовать этот код в качестве примера и адаптировать его к своему решению.

Сигнал TE подключается к контакту GPIO G7 процессора. Итак, сначала мне нужно настроить вывод GPIO.

//GPIO Pin G7
GPIO_StructInit(&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOG, &GPIO_InitStructure);

Далее мне нужно настроить прерывание и NVIC.

SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOG, EXTI_PinSource7);

EXTI_InitTypeDef EXTI_InitStructure;
EXTI_StructInit(&EXTI_InitStructure);
EXTI_InitStructure.EXTI_Line = EXTI_Line7;
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);

NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);

Наконец, я должен создать обработчик прерывания. EXTI9_5_IRQHandler обрабатывает внешние прерывания в строках 5 ~ 7. Этот метод фактически определен в файле начальной сборки моего процессора как слабая ссылка. Мне просто нужно переопределить метод, а компоновщик сделает все остальное.

extern "C" void EXTI9_5_IRQHandler(void)
{
    if(EXTI_GetITStatus(EXTI_Line7) != RESET)
    {
        //Handle the interrupt

        EXTI_ClearITPendingBit(EXTI_Line7);
    }
}

В качестве набора инструментов я использую Sourcery Codebench Lite от Mentor Graphics.

person Verax    schedule 08.10.2012
comment
Спасибо Веракс. Я посмотрю на это и отвечу, если у меня есть какие-либо сомнения - person pranathi; 08.10.2012
comment
Привет, Verax, ваше устройство подключено к некоторому контакту GPIO. Но мой датчик подключен к внутреннему каналу АЦП. Есть ли другой хороший вариант, кроме сканирования АЦП, чтобы я мог генерировать прерывания?? - person pranathi; 08.10.2012
comment
Я не думаю, что вы хотите использовать аналоговый сигнал для генерации прерывания. Я думаю, вам следует использовать цифровой сигнал, подключенный к одному из контактов GPIO внешнего прерывания, как в моем примере. Тогда ваш датчик будет подключен отдельно к АЦП. Затем, когда вы получаете прерывание от вашего цифрового сигнала, вы затем читаете с АЦП. - person Verax; 09.10.2012