اموزش راه اندازی کلید با ARM STM32
هدف از مثال مورد نظر این است که شما با تابع هایی که در توابع CMSIS وجود دارند و برای خواندن پین های GPIO استفاده میشوند، آشنا شوید.
سخت افزار
برای تست این برنامه میتوانید از چهار push button که بر روی برد آموزشی است استفاده نمائید. شمارهی پینهایی که میتوان استفاده نمود، در تصویر زیر آمده است.
آشنایی و کار با برنامه
ابتدا برنامه را با نرم افزار Keil باز کنید.
تغذیه 5 ولت را به برد آموزشی متصل کنید و بعد از اینکه پروگرامر ST-LINK را به برد متصل نمودید؛ برنامه را با استفاده از دکمه ی Download پروگرم نمائید.
توضیحات مربوط به برنامه
ابتدا استراکچری، مربوط به تنظیمات اولیه پینهای ورودی و خروجی تعریف شده است.
[pastacode lang=”cpp” manual=”%23include%20%22bsp.h%22%0A%20%0AGPIO_InitTypeDef%20GPIO_InitStructure%3B%0A%20%0Avoid%20RCC_Configuration(void)%3B%0Avoid%20GPIO_Configuration(void)%3B” message=”” highlight=”” provider=”manual”/]
سپس در تابع main با استفاده از توابعی که در تصویر زیر آمده است، تنظیماتGPIO وکلاک انجام شده است.
در مرحله آخر در حلقهی while وضعیت هرکدام از کلیدها بررسی میشوند و هنگامی که کلیدی فشرده شود یکی از LED های روی برد روشن میشود.
[pastacode lang=”cpp” manual=”while(1)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20if(GPIO_ReadInputDataBit(KEY1_GPIO_PORT%2CKEY1_PIN)%20%3D%3D%200)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_SetBits(LED1_GPIO_PORT%2CLED1_PIN)%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%20if%20(GPIO_ReadInputDataBit(KEY1_GPIO_PORT%2CKEY1_PIN)%20%3D%3D%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_ResetBits(LED1_GPIO_PORT%2CLED1_PIN)%3B%0A%20%20%20%2F%2F———————————————————-%0A%20%20%20%20if(GPIO_ReadInputDataBit(KEY2_GPIO_PORT%2CKEY2_PIN)%20%3D%3D%200)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_SetBits(LED2_GPIO_PORT%2CLED2_PIN)%3B%0A%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20else%20if%20(GPIO_ReadInputDataBit(KEY2_GPIO_PORT%2CKEY2_PIN)%20%3D%3D%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_ResetBits(LED2_GPIO_PORT%2CLED2_PIN)%3B%0A%20%20%20%2F%2F———————————————————-%0A%20%20%20%20if(GPIO_ReadInputDataBit(KEY3_GPIO_PORT%2CKEY3_PIN)%20%3D%3D%200)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_SetBits(LED3_GPIO_PORT%2CLED3_PIN)%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%20if%20(GPIO_ReadInputDataBit(KEY3_GPIO_PORT%2CKEY3_PIN)%20%3D%3D%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_ResetBits(LED3_GPIO_PORT%2CLED3_PIN)%3B%0A%20%20%20%2F%2F———————————————————-%0A%20%20%20%20%20%20if(GPIO_ReadInputDataBit(KEY4_GPIO_PORT%2CKEY4_PIN)%20%3D%3D%200)%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_SetBits(LED4_GPIO_PORT%2CLED4_PIN)%3B%20%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20else%20if%20(GPIO_ReadInputDataBit(KEY4_GPIO_PORT%2CKEY4_PIN)%20%3D%3D%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20GPIO_ResetBits(LED4_GPIO_PORT%2CLED4_PIN)%3B%0A%20%20%20%2F%2F———————————————————-%0A%20%20%20%20%7D%0A%20%20%20%20%0A%20%20return%200%3B%0A%7D%0A%2F*——————–%20Configuration%20functions———————*%2F%0Avoid%20RCC_Configuration(void)%7B%0A%20%20%20%20RCC_APB2PeriphClockCmd(KEY1_GPIO_CLK%7CKEY2_GPIO_CLK%7CKEY3_GPIO_CLK%7CKEY4_GPIO_CLK%20%2C%20ENABLE)%3B%0A%7D%0A%20%0A%20%0Avoid%20GPIO_Configuration(void)%7B%0A%20%0A%20%20%2F*%20Configure%20LED1%20in%20output%20pushpull%20mode%20*%2F%0A%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20LED1_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_Out_PP%3B%0A%20%20GPIO_Init(LED1_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%0A%20%0A%20%20%20%20%20%2F*%20Configure%20LED2%20in%20output%20pushpull%20mode%20*%2F%0A%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20LED2_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_Out_PP%3B%0A%20%20GPIO_Init(LED2_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%0A%20%20%20%20%0A%20%20%20%20%20%2F*%20Configure%20LED3%20in%20output%20pushpull%20mode%20*%2F%0A%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20LED3_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_Out_PP%3B%0A%20%20GPIO_Init(LED3_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%2F*%20Configure%20LED4%20in%20output%20pushpull%20mode%20*%2F%0A%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20LED4_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_Out_PP%3B%0A%20%20GPIO_Init(LED4_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%0A%20%20%20%20%0A%20%20%2F%2F—————————————————–%0A%20%20%20%20%20%20%2F*%20Configure%20Keysclock%20*%2F%0A%20%0A%20%20%20%20%20%20%20%20%2F*%20Configure%20KEY1%20%20in%20input%20pullup%20mode%20*%2F%0A%20%20%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20KEY1_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_IPU%3B%0A%20%20GPIO_Init(KEY1_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%20%20%0A%20%20%20%20%20%20%20%20%2F*%20Configure%20KEY2%20%20in%20input%20pullup%20mode%20*%2F%0A%20%20%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20KEY2_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_IPU%3B%0A%20%20GPIO_Init(KEY2_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%20%20%0A%20%20%20%20%20%20%20%20%2F*%20Configure%20KEY3%20%20in%20input%20pullup%20mode%20*%2F%0A%20%20%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20KEY3_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_IPU%3B%0A%20%20GPIO_Init(KEY3_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%20%20%0A%20%20%20%20%20%20%20%20%2F*%20Configure%20KEY4%20%20in%20input%20pullup%20mode%20*%2F%0A%20%20%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20KEY4_PIN%3B%0A%20%20GPIO_InitStructure.GPIO_Speed%20%3D%20GPIO_Speed_50MHz%3B%0A%20%20GPIO_InitStructure.GPIO_Mode%20%3D%20GPIO_Mode_IPU%3B%0A%20%20GPIO_Init(KEY4_GPIO_PORT%2C%20%26GPIO_InitStructure)%3B%20%20%0A%20%0A%7D” message=”” highlight=”” provider=”manual”/]
نظر بدهید