مهندس ارور هاش چیه ؟ ارور ها معمولا یا مربوط به تنظیمات پروژه هست یا مکان فایل های درایور .
سطحي و كار راه انداز
دقيق و حرفه اي
به به .. به به
چه خوب اساتيد سورپرايز ميكنن .. انشا ا.. كه چرخش بچرخه .. سوال زياده .. بعدا ميام ميپرسم
خداقوت
سلام مجدد دوستان گلم
ميريم به ادامه بحث GPIO مي پردازيم:
در تعريف ساختار GPIO_InitTypeDef ، ما با سه تا زير ساختار(نميدونم درست عنوان كردم؟ يا نه؟) برخورد ميكنيم.
1- GPIO_Pin:براي تعريف پين مورد نظر هستش. در ادامه گفته شده كه اين پارامتر ميتونه هر كدوم از
مقاديري كه تو قسمت زير تعريف شدن رو بپذيره.
[PHP]/** @defgroup GPIO_pins_define
* @{
*/
#define GPIO_Pin_0 ((uint16_t)0x0001) /*!< Pin 0 selected */
#define GPIO_Pin_1 ((uint16_t)0x0002) /*!< Pin 1 selected */
#define GPIO_Pin_2 ((uint16_t)0x0004) /*!< Pin 2 selected */
#define GPIO_Pin_3 ((uint16_t)0x0008) /*!< Pin 3 selected */
#define GPIO_Pin_4 ((uint16_t)0x0010) /*!< Pin 4 selected */
#define GPIO_Pin_5 ((uint16_t)0x0020) /*!< Pin 5 selected */
#define GPIO_Pin_6 ((uint16_t)0x0040) /*!< Pin 6 selected */
#define GPIO_Pin_7 ((uint16_t)0x0080) /*!< Pin 7 selected */
#define GPIO_Pin_8 ((uint16_t)0x0100) /*!< Pin 8 selected */
#define GPIO_Pin_9 ((uint16_t)0x0200) /*!< Pin 9 selected */
#define GPIO_Pin_10 ((uint16_t)0x0400) /*!< Pin 10 selected */
#define GPIO_Pin_11 ((uint16_t)0x0800) /*!< Pin 11 selected */
#define GPIO_Pin_12 ((uint16_t)0x1000) /*!< Pin 12 selected */
#define GPIO_Pin_13 ((uint16_t)0x2000) /*!< Pin 13 selected */
#define GPIO_Pin_14 ((uint16_t)0x4000) /*!< Pin 14 selected */
#define GPIO_Pin_15 ((uint16_t)0x8000) /*!< Pin 15 selected */
#define GPIO_Pin_All ((uint16_t)0xFFFF) /*!< All pins selected */[/PHP]2- GPIO_Speed : براي تعيين سرعت پين مورد نظر به كار ميره. در ادامه عنوان شده كه اين پارامتر ميتونه هر يك از
مقاديري كه تو قسمت زير آورده شده رو بپذيره.
[PHP]typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;[/PHP]3- GPIO_Mode: جهت تعيين وضعيت پين مورد نظر به حالت ورودي يا خروجي به كار ميره. در ادامه ذكر شده اين پارامتر
هر كدوم از مقادير زير رو بپذيره.
[PHP]typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;[/PHP]
ویرایش توسط sadmonew : 08-04-2012 در ساعت 01:04
_____________________________________
_____________________________________
دوستان اين بحث كه تا حالا داشتيم فقط مربوط به GPIO هستش كه البته هنوز هم يه مقدارش مونده.(خيلي زياد شده!)
البته لازمه يه توضيح مختصر درباره مورد 3 تو پست قبل بدم. معني هر كدوم از پارامتر ها رو ميذارم.
GPIO_Mode_AIN: تعيين وضعيت به حالت ورودي آنالوگ(حالت معمولي)
GPIO_Mode_IN_FLOATING: تعيين وضعيت به حالت ورودي شناور(حالت معمولي)
GPIO_Mode_IPD: تعيين وضعيت به حالت ورودي با مقاومت Pull-down (حالت معمولي)
GPIO_Mode_IPU: تعيين وضعيت به حالت ورودي با مقاومت pull-up(حالت معمولي)
GPIO_Mode_Out_OD: تعيين وضعيت به حالت خروجي با درين باز(حالت معمولي)
GPIO_Mode_Out_PP: تعيين وضعيت به حالت خروجي با مقاومت push-pull(حالت معمولي)
GPIO_Mode_AF_OD: تعيين وضعيت به حالت خروجي با درين باز(حالت خاص)
GPIO_Mode_AF_PP: تعيين وضعيت به حالت خروجي با مقاومت push-pull(حالت خاص)
-----------------------------------------------------------------------------------------------------------
خوب پس ميريم اون تابعي كه تو چند پست قبل نصفه كاره نوشتمش رو كامل ميكنم.يعني اين تابع:
[PHP]GPIO_Init(GPIOA,........);[/PHP]من ميخوام پين شماره 9 پورت A رو فعلا به حالت خروجي با درين باز با فركانس حداكثر(50 مگاهرتز) و در حالت معمولي، تنظيم كنم.
ابتدا يه متغير بايد تعريف كنم، به اين صورت:
[PHP]GPIO_InitTypeDef GPIO_Init_Structure;[/PHP]با تعريف اين متغير ما ميتونيم هر 3 مورد كه تو پست 300 توضيح دادم رو مقدار دهي كنيم.
[PHP] GPIO_Init_Structure.GPIO_Pin = GPIO_Pin_9;
GPIO_Init_Structure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init_Structure.GPIO_Mode = GPIO_Mode_Out_OD;[/PHP]
و در ادمه متغير GPIO_Init_Structure كه توسط سه دستور بالا مقدار دهي شده رو در تابع بالا قرار ميدهيم. به اين صورت:
[PHP]GPIO_Init(GPIOA, &GPIO_Init_Structure); [/PHP]
دوستاي عزيزم فعلا كه خيلي خسته شدم.
اگه سوالي داشتيد در خدمتيم. البته يه نكته ميمونه.(البته فكر كنم همين نكته كلي توضيح لازم داشته باشه.)
ویرایش توسط sadmonew : 08-04-2012 در ساعت 01:42
_____________________________________
_____________________________________
مرسی که تحویل گرفتید
من تا حالا چند بار گفتم
..\USER\stm32f10x_type.h(31): error: #256: invalid redeclaration of type name "vs32" (declared at line 478 of "C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x.h")
..\USER\stm32f10x_type.h(57): error: #101: "RESET" has already been declared in the current scope
..\USER\stm32f10x_type.h(39): error: #256: invalid redeclaration of type name "u32" (declared at line 486 of "C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x.h")
خیلی عجیبه
هر سه تا ارور مربوط به همخوانی نداشتن ورژن قدیمی با جدیده . توی فایل هایی که تو پنجره سمت چپ add کردید در ابتداشون تمام stm32f10x-lib.h رو به stm32f10x.h تغییر بدید و این فایل رو (stm32f10x.h)که آخرین نسخش تو درایور هایی هست که دانلود میکنی standard driver کنار بقیه فایل هات بزار .
این ارور از شایعترین مشکلات عدم تطابق نسخه هاست .
ارور ها خیلی کمتر شد ولی باز این ارور ها رو میده
چی کار کنم ؟؟
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(23): error: #256: invalid redeclaration of type name "s32" (declared at line 421 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(27): error: #256: invalid redeclaration of type name "sc32" (declared at line 425 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(31): error: #256: invalid redeclaration of type name "vs32" (declared at line 429 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(35): error: #256: invalid redeclaration of type name "vsc32" (declared at line 433 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(39): error: #256: invalid redeclaration of type name "u32" (declared at line 437 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(43): error: #256: invalid redeclaration of type name "uc32" (declared at line 441 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(47): error: #256: invalid redeclaration of type name "vu32" (declared at line 445 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(51): error: #256: invalid redeclaration of type name "vuc32" (declared at line 449 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(55): error: #101: "FALSE" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(55): error: #101: "TRUE" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(55): error: #256: invalid redeclaration of type name "bool" (declared at line 454 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(57): error: #101: "RESET" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(57): error: #101: "SET" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(57): error: #256: invalid redeclaration of type name "FlagStatus" (declared at line 457 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(57): error: #256: invalid redeclaration of type name "ITStatus" (declared at line 457 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(59): error: #101: "DISABLE" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(59): error: #101: "ENABLE" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(59): error: #256: invalid redeclaration of type name "FunctionalState" (declared at line 459 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(62): error: #101: "ERROR" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(62): error: #101: "SUCCESS" has already been declared in the current scope
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_type.h(62): error: #256: invalid redeclaration of type name "ErrorStatus" (declared at line 462 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_conf.h(147) : warning: #47-D: incompatible redefinition of macro "HSE_Value" (declared at line 466 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\cortexm3_macro.h(30): error: #55: too many arguments in macro invocation
C:\Keil\ARM\INC\ST\STM32F10x\cortexm3_macro.h(30): error: #79: expected a type specifier
C:\Keil\ARM\INC\ST\STM32F10x\cortexm3_macro.h(31): error: #55: too many arguments in macro invocation
C:\Keil\ARM\INC\ST\STM32F10x\cortexm3_macro.h(31): error: #79: expected a type specifier
C:\Keil\ARM\INC\ST\STM32F10x\cortexm3_macro.h(32): error: #55: too many arguments in macro invocation
C:\Keil\ARM\INC\ST\STM32F10x\cortexm3_macro.h(32): error: #79: expected a type specifier
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_map.h(58): error: #256: invalid redeclaration of type name "ADC_TypeDef" (declared at line 502 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_map.h(154): error: #256: invalid redeclaration of type name "BKP_TypeDef" (declared at line 601 of "stm32f10x.h")
C:\Keil\ARM\INC\ST\STM32F10x\stm32f10x_map.h(163): error: #256: invalid redeclaration of type name "CAN_TxMailBox_TypeDef" (declared at line 613 of "stm32f10x.h")
من این کتابخونه رو گذاشتم ببینید درسته
ویرایش توسط jik : 08-04-2012 در ساعت 14:30
Build target 'STM32 Flash'
compiling startup_stm32f10x_md_mthomas.c...
--- Error: failed to execute 'arm-none-eabi-gcc'
Target not created
دوستان راهنمایی کردند منم توی component گذاشتمش روی use raalview ولی 500 تا ارور داد
انگار باید gnu استفاده کنه روی دستگاه دوستان کار می کنه ولی روی دستگاه من نه
میتونه با نصب نزم افزار sourcery g ++ la; مشکل حل بشه اگه میشه راهنمایی کنید
آره مهندس همینه . ولی از ارور ها معلومه که کل هدر ها رو عوض نکردی . هنوز یسری باقی مونده !من این کتابخونه رو گذاشتم ببینید درسته
تمام فایل هایی رو که include کردی رو چک کن .
ضمنا فایل stm32f10x-conf.h رو هم مطابق با نسخه درایورت کنار سورس هات قرار بده . اگه نسخه قدیمی باشه کار نمی کنه .
اگه درست نشد فایل های کامپایل شده رو که حجم زیاد دارن رو پاک کن و کل پروژه رو برام زیپ کرده بفرست من برات درست کنم . ok ؟
من ورژن 4.23 دارم.
سلام مهندس
روي سيستم دوستتون نگاه كنيد،ببينيد كامپايلر ++sourvery g نصبه يا نه؟
البته اون اروري كه به شما داده به اين مربوط ميشه كه رو سيستمتون فايل اجرايي arm-none-eabi-gcc.exe رو نداريد.
پس شما به اين لينك YAGARTO - Yet another GNU ARM toolchain بريد و فايل زير رو دانلود كنيد:
yagarto-bu-2.21_gcc-4.6.2-c-c++_nl-1.19.0_gdb-7.3.1_eabi_20111119.exe
لطفا يه عكس از همون قسمتي كه قبلا به شما گفتم، اينجا بذاريد.
فعلا همين كارهارو انجام بدين.
_____________________________________
_____________________________________
ببینید این برنامه ای که من نوشتم
الان این ارور ها رو میده
لطفا بگید مشکل از کجاست
خیلی متشکرم
دوستان عزيز ادامه ميديم:
خوب در حالت معمولي پورت رو راه اندازي كرديم. حالا ميخوام همين پين رو(پين شماره 9 پورت A) رو در وضعيت خروجي با مقاومت push-pull و فركانس 2 مگاهرتز و در حالت خاص تنظيم كنم. حالت خاص يعني ميخوام از اين پين به عنوان خروجي داده براي قسمت USART1 ميكرو استفاده كنم.(TX)
از همون متغيري كه تو پست قبل تعريف كردم هم ميتونم براي ايت قسمت هم استفاده كنم.
با اين كار هيچ اشكالي پيش نمياد. و در ميزان اشغال شدن فضاي رم هم صرفه جويي ميكنيم. پس متغير رو ديگه ايجا نميارم.
با استفاده از 3 تا دستور زير متغير رو مقدار دهي ميكنم. در واقع تنظيمات پين مورد نظر همون انجام عمل مقدار دهي
به متغير هستش. پس به اين صورت عمل ميكنيم. مثل دفعه قبل، اما با تغييرات جديد:
[PHP] GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
[/PHP]بعد از اين مرحله متغير رو در تابع مورد نظر قرار ميديم. به اين صورت:
[PHP]GPIO_Init(GPIOA, &GPIO_InitStructure);[/PHP]حالا قسمت مهم قضيه اينه كه تا زماني كه شما كلاك مربوط به قسمت GPIO ها رو فعال نكنيد هيچ اتفاقي نمي افته. پس من ميام با استفاده از دستور زير كلاك پورت هاي A,B,C و D رو فعال ميكنم.
يعني بايد دستور زير رو تايپ كنيد:
[PHP]RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC |RCC_APB2Periph_GPIOD , ENABLE);[/PHP]و پايان.
اما همچنان توضيحات بخش هاي ديگه ادامه دارد.....
اميدوارم مفيد باشه.
لطفا نظر يادتون نره!
ویرایش توسط sadmonew : 08-04-2012 در ساعت 16:39
خب ، ببین مهندس من برای راحتی کار یه پروژه آماده بعنوان template برات میزارم که بقیه هم میتونن استفاده کنن. برنامه تو رو هم توش قرار دادم و کار میکنه .ببینید این برنامه ای که من نوشتم
الان این ارور ها رو میده
لطفا بگید مشکل از کجاست
نکته مهم اینجاست که فایل های درایور cmsis باید همراه پروژه باشن ( زیاد حجمی نداره ) حالا اگر هم نخوای از cmsis استفاده کنی بازم بدردت میخوره . من آخرین ورژن یعنی 3.5 رو برات گذاشتم .
این پوشه رو همیشه یجا نگه دار و زمانی که خواستی یه پروژه جدید کار کنی ازش یه کپی بگیر و سورس ها و main رو توی پوشه source کپی کن ، بقیه همچی آماده هست ...
ضمنا دوستان اگر در پروژتون مشکل دارید یا می خواهین به هر دلیلی اونو اینجا share کنین ، پروژه کامپایل شده حجمش نزدیک 20 مگه ! پس قبل از آپ کردن اونو clean target کنید تا کتابخونه های کامپایل شدش پاک بشه بعد از زیپ حجمش میاد رو نیم مگ !
مهندس اولا بابت آموزش واقعا دستت درد نکنهخوب در حالت معمولي پورت رو راه اندازي كرديم. حالا ميخوام همين پين رو(پين شماره 9 پورت A) رو در وضعيت خروجي با مقاومت push-pull و فركانس 2 مگاهرتز و در حالت خاص تنظيم كنم
مهندس این مقاومت push-pull که نوشتی تو یکی دو تاپیک قبل هم بود ، یخورده مشکل اخلاقی داره
یدونه مقاومت Pull-Up و Pull-Down داریم که در حالت ورودی استفاده میشه و یدونه خروجی حالت Push-Pull (نه مقاومت Push-Pull) !! اگه تو دیاگرام بخش gpio نمای خروجی پورت رو ببینید متوجه دو تا ترانزیستور ( حالا مثلا ماس فت ) میشید که وظیفش بالا کشیدن خروجی تا vdd یا پایین کشیدن اون تا gnd هست . به این زوج حالت پوش پول میگن . اگه دوستان یادشون باشه تو تقویت کننده کلاس B و AB هم این پوش پول وجود داشت . این همونه منتها در منطق دیجیتال . ضمنا مهندس امیدوارم از این پست من دلگیر نشی . هدف بیان مطالب آموزشی صحیح هست . بازم بخاطر آموزش ممنون . منتظر باقیش هستیم
ویرایش توسط sadmonew : 08-04-2012 در ساعت 18:32
_____________________________________
_____________________________________
مهندس متوجه منظورت نشدم ! این فایل زیپی که گذاشتم کل یه پروژه هست . اول آنزیپش کن یه پوشه میبینی بنام template که توش سه تا پوشه دیگه هست . یکی source هست که سورس فایل های شما باید اینتو باشه و من فایل شما رو الان گذاشتم توش و یکی دیگه project هست که فایل پروژه کیل توش هست و فایل hex هم همین تو ساخته میشه . و پوشه سوم libraries هست که کل درایور های cmsis داخلشه .ببخشید من زیادی اماتورم ولی هر کاری میکنم نمیتونم از فایل که گذاشتید تو پروژم استفاده کنم که ارور نده
میشه کامل توضیح بدید
همون طور که گفتم قبلا ، اگه خواستید یه برنامه جدید (پروژه جدید ) رو شروع کنید کافیه از پوشه template یه کپی بگیرید( با محتویات ) و دوباره به همون روش برنامه ها رو بریزید تو source و سپس کامپایل ... دیگه لازم نیست بری تو کیل یه پروژه جدید باز کنی .. انتخاب میکرو و کارای دیگه .
موفق باشید
آقا صادق دستت درد نکنه
میخای یه مثال تپل برای قسمت gpio هم بزار!!!
قسمت بعد رو من بگم...
ADC خوبه؟؟؟!!!
بازم تشکر
ویرایش توسط Doloop : 08-04-2012 در ساعت 19:20
*** اللّهم عجّل لولیک الفرج ***
آقا در ضمن یکی لطفا اون نقشه pdf برد شما رو آپ کنه که من اگه مثال گذاشتم برای برد شما تغییرش بدم .
اینم بگم که خوشبختانه کتابخانه مموری کارت که روش کار می کردم کامل جواب داد . خب حالا کم کم باید یکم مثال با همین rcc و gpio بزنیم که همه دیگه کامل متوجه بشن و بتونن راحت روش کار کنن .
کتابخونه lcd کارکتری و گرافیکیks0108 هم کاملا جواب گرفتم و کم کم آپ میکنم .
یا حق