سلام دوستان. من میخوام یه led متصل به پین B0 تا B3 را به وسیله وقفه خارجی میکرو stm32 و یه پوش باتن متصل به A10 روشن خاموش (toggle) کنم.طبق آموزشهایی که تو نت دیدم این برنامه را نوشتم ولی جواب نگرفتم. رو برد STM32F091RC دارم کار میکنم.
ممنون میشم منو راهنمایی کنید چون تازه از Avr به arm مهاجرت کردم و نیاز به کمک دارم.
کد:
#include <stdio.h>
#include "diag/Trace.h"
#include "stm32f0xx.h"
#include "stm32f0xx_conf.h"
// ----------------------------------------------------------------------------
void Delay(__IO uint32_t nCount) {
while(nCount--) {
}
}
int main(int argc, char* argv[])
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOB, &GPIO_InitStructure);
NVIC_InitTypeDef NVIC_InitStructure;
EXTI_InitTypeDef EXTI_InitStructure;
/* Enable GPIOA clock */
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
/* Enable SYSCFG clock */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; // PA10 is connected to high, so use pulldown resistor
GPIO_Init(GPIOA, &GPIO_InitStructure);
SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource10);
EXTI_InitStructure.EXTI_Line = EXTI_Line10; //
EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; // Interrupt mode
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; // Trigger on Rising edge (Just as user presses btn)
EXTI_InitStructure.EXTI_LineCmd = ENABLE; // Enable the interrupt
EXTI_Init(&EXTI_InitStructure); // Initialize EXTI
NVIC_InitStructure.NVIC_IRQChannel = EXTI4_15_IRQn; // Function name for EXTI_Line10 interrupt handler
NVIC_InitStructure.NVIC_IRQChannelPriority = 0x01; // Set priority
// Set sub priority
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // Enable the interrupt
NVIC_Init(&NVIC_InitStructure); // Add to NVIC
// Turn on LED
if(EXTI_GetITStatus(EXTI_Line10) != RESET){
GPIO_SetBits(GPIOB, GPIO_Pin_0);
EXTI_ClearITPendingBit(EXTI_Line10);}
while(1){
// Do nothing here, using interrupts
}
return 0;
// Infinite loop, never return.
}
#pragma GCC diagnostic pop