اموزش راه اندازی LED (مثال دوم)

 

هدف از این مثال این است که شما با رجیستر هایی که برای ست و ریست کردن یک پین مورد استفاده قرار می،­گیرد آشنا شوید. در این مثال ساده حداکثر سرعت میکرو را نشان داده شده است.

سخت افزار

برای تست این برنامه می­توانید از چهارLED  که بر روی  برد آموزشی قرار دارد، استفاده کنید. شماره­ی پین­هایی که می­توانید استفاده کنید، در تصویر زیر نشان داده شده است.

 

 

 

 

 

 

 

 

 

 

 

 

آشنایی و کار با برنامه

ابتدا برنامه را با نرم افزار Keil باز کنید.

 

 

 

 

 

 

 

 

 

تغذیه 5 ولت را به برد آموزشی متصل کنید و بعد از اینکه پروگرامر ST-LINK را به برد متصل نمودید؛ برنامه را با استفاده از دکمه ­ی Download    پروگرم نمائید.

 

خروجی  پین های PC2   وPC3  با استفاده از اسیلوسکوپ اندازه گیری شده­ اند و در شکل زیر نشان داده می­شود.

توضیحات مربوط به برنامه

ابتدا استراکچری، مربوط به تنظیمات اولیه پین­های ورودی و خروجی تعریف شده است.

[pastacode lang=”cpp” manual=”%2F*%20Includes%20—————————————*%2F%0A%23include%20%22stm32f10x.h%22%0A%20%0AGPIO_InitTypeDef%20GPIO_InitStructure%3B” message=”” highlight=”” provider=”manual”/]

سپس در تابع main  برنامه تنظیمات مربوط به کلاک GPIO  وخود GPIO انجام شده است.

[pastacode lang=”cpp” manual=”%2F**%0A%20%20*%20%40brief%20%20Main%20program.%0A%20%20*%20%40param%20%20None%0A%20%20*%20%40retval%20None%0A%20%20*%2F%0Aint%20main(void)%0A%7B%0A%20%20%2F*!%3C%20At%20this%20stage%20the%20microcontroller%20clock%20setting%20is%20already%20configured%2C%0A%20%20%20%20%20%20%20this%20is%20done%20through%20SystemInit()%20function%20which%20is%20called%20from%20startup%0A%20%20%20%20%20%20%20file%20(startup_stm32f10x_xx.s)%20before%20to%20branch%20to%20application%20main.%0A%20%20%20%20%20%20%20To%20reconfigure%20the%20default%20setting%20of%20SystemInit()%20function%2C%20refer%20to%0A%20%20%20%20%20%20%20system_stm32f10x.c%20file%0A%20%20%20%20%20*%2F%0A%20%20%20%20%20%20%20%0A%20%20%2F*%20GPIOC%20Periph%20clock%20enable%20*%2F%0A%20%20RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC%2C%20ENABLE)%3B%0A%20%0A%20%20%2F*%20Configure%20PC2%20and%20PC3%20in%20output%20pushpull%20mode%20*%2F%0A%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20GPIO_Pin_2%20%7C%20GPIO_Pin_3%20%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(GPIOC%2C%20%26GPIO_InitStructure)%3B” message=”” highlight=”” provider=”manual”/]

در حلقه ­ی while   پین­های C2  و C3   پشت سرهم ست و ریست می­شوند.

[pastacode lang=”cpp” manual=”%2F**%0A%20%20*%20%40brief%20%20Main%20program.%0A%20%20*%20%40param%20%20None%0A%20%20*%20%40retval%20None%0A%20%20*%2F%0Aintmain(void)%0A%7B%0A%20%20%2F*!%3C%20At%20this%20stage%20the%20microcontroller%20clock%20setting%20is%20already%20configured%2C%0A%20%20%20%20%20%20%20this%20is%20done%20through%20SystemInit()%20function%20which%20is%20called%20from%20startup%0A%20%20%20%20%20%20%20file%20(startup_stm32f10x_xx.s)%20before%20to%20branch%20to%20application%20main.%0A%20%20%20%20%20%20%20To%20reconfigure%20the%20default%20setting%20of%20SystemInit()%20function%2C%20refer%20to%0A%20%20%20%20%20%20%20system_stm32f10x.c%20file%0A%20%20%20%20%20*%2F%0A%20%20%20%20%20%20%20%0A%20%20%2F*%20GPIOC%20Periph%20clock%20enable%20*%2F%0A%20%20RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC%2C%20ENABLE)%3B%0A%0A%20%20%2F*%20Configure%20PC2%20and%20PC3%20in%20output%20pushpull%20mode%20*%2F%0A%20%20GPIO_InitStructure.GPIO_Pin%20%3D%20GPIO_Pin_2%20%7C%20GPIO_Pin_3%20%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(GPIOC%2C%20%26GPIO_InitStructure)%3B%0A%0A%20%20%2F*%20To%20achieve%20GPIO%20toggling%20maximum%20frequency%2C%20the%20following%20%20sequence%20is%20mandatory.%0A%20%20%20%20%20You%20can%20monitor%20PC.2%20or%20PC.3%20on%20the%20scope%20to%20measure%20the%20output%20signal.%0A%20%20%20%20%20If%20you%20need%20to%20fine%20tune%20this%20frequency%2C%20you%20can%20add%20more%20GPIO%20set%2Freset%0A%20%20%20%20%20cycles%20to%20minimize%20more%20the%20infinite%20loop%20timing.%0A%20%20%20%20%20This%20code%20needs%20to%20be%20compiled%20with%20high%20speed%20optimization%20option.%20%20*%2F%0A%20%20while(1)%0A%20%20%7B%0A%20%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%0A%20%20%20%2F*%20Set%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBSRR%20%3D%200x0000000C%3B%0A%20%20%20%2F*%20Reset%20PC2%20and%20PC3%20*%2F%0A%20%20%20GPIOC-%3EBRR%20%20%3D%200x0000000C%3B%0A%20%20%7D%0A%0A%0A%20%20%20%20%0A%7D” message=”” highlight=”” provider=”manual”/]

{ نکته ی برنامه نویسی }

همانطور که در تصویر بالا مشاهده مینمائید، رجیسترهای BRR   و BSRR  با  x0000000Cمقداردهی شده اند.

همانطور که می­دانید رجیسترها در پردازنده­های ARM   همگی 32 بیتی هستند. در اینجا ما می خواهیم LED های 2 و 3 را روشن و خاموش کنیم. پس بیت­های 2و3  رجیستر های BSRR  و BRR  باید 1 شوند و بقیه بیت­ها باید 0 باشند.

 

 

دانلود مثال ها و pdf این مقاله



 

Tags: , , ,