پس بگو چرا دیر جواب دادیدو ساعت طول کشید
مهندس دمت بازم قیژ آموزش نفس گیری بود
خیلی عالی بود استاد
من اصلا تصور نمیکردم اصل قضیه این باشه
سطحي و كار راه انداز
دقيق و حرفه اي
پس بگو چرا دیر جواب دادیدو ساعت طول کشید
مهندس دمت بازم قیژ آموزش نفس گیری بود
خیلی عالی بود استاد
من اصلا تصور نمیکردم اصل قضیه این باشه
*** اللّهم عجّل لولیک الفرج ***
سلام
مهندس این رجیسترروهم زحمتشو بکش
rcc_ahbenr
اگه میشه هفت تا بیتشم بگو چیکارمیکنن
*** اللّهم عجّل لولیک الفرج ***
سلام
آقا خيلي عالي و خوب توضيح داديد .. شايسته مقام استادي هستي
حالا يه سوال
اولا شما از كجا فهميدي كه GPIO->ODR وجود داره ( براي نوشتن دستور ) ..از روي استراكت؟
درواقع وقتي در منوآل يك دستوري نوشته شده .. شما چطوري ميفهمي كه چه دستور معادلي بايد تايپ كني كه كيل بفهمه؟
آيا ميشه مطابق دستورات منوآل هم برنامه نوشت ..يعني به همون انشا .. ممكنه يه مثال بزنيد و يك پورت رو روشن كنيد .. با هدر مربوطه .. چون دستورات منوآل رو مينويسم ميگه نوفهمه !!
آيا نوشتن برنامه با گرامر منوآل خاصيتي داره؟ مثلا سرعت بالاتر ؟ آيا مثلا كسي كه در شركت مثلا مودم سازي نشسته از هدرهاي جنرآل استفاده ميكنن يا از دستورات منوآل يا حتي اسمبلي؟ يعني مزيت داره؟!!
باز هم متشكر و ممنونيم استاااد
سلام بر اساتید
خب روش آسونش اینه که مثلا اگه می خوای با GPIO کار کنی یه مثال ازش ببینی ، اون وقت اسم رجیسترها و نحوه کار کردن و باهاش براحتی یاد میگیری . مثال رو هم میشه از سایت کیل برداشت هم نو نت بگردی .حالا يه سوال
اولا شما از كجا فهميدي كه GPIO->ODR وجود داره ( براي نوشتن دستور ) ..از روي استراكت؟
روش یکم پیچیده ترش هم اینه که مثل روشی که تو پست 221 گذاشتم ارتباط رجیسترهای منوال رو با کتابخانه در بیارم . که البته برای تمامی واحد ها به روش رجیستر نویسی تو کیل مثال داره . این روش برای فهم مطلب عنوان شد که به نظر من اگه کسی عمق مطلب رو متوجه بشه دیگه کاری نیست که نتونه انجام بده . در مورد این هم که از کجا فهمیدم حتما gpio->ODR . گفتم، اول مثال . اگه نشد ، می بینم که یه STRUCT تعریف شده که رجیسترهایی رو که من میخوام توش مپ داره . خوب میام آدرس شروعش رو مساوی پورت A میدم و اونم برام کار مورد نظر رو انجام میده . اسم اون struct بود GPIO_TypeDef حالا من هر اسمی که دوست دارم میتونم برای رجیستر تازه ام در نظر بگیرم و یه کپی از ساختار اصلی رو تو ساختار خودم بگیرم .
مهندس گفتم قبلا . دستورات منوال فقط یه نام گذاری هست . نام رجیستر که تو میکرو ثبت نمیشه . اسم گذاشته که متوجه بشید هر کدوم درباره چیه . فقط کار کردن با آدرسها که دشواره . هدر خود میکرو هم اومده یه نام دیگه گذاشته. البته نه کلا یه چیز دیگه . یکی دو حرف جابجا . مثالی که باید بزنم همون چیزیه که بعنوان آموزش تو اولین پست های این تاپیک گذاشتم . خب چه فرقی می کنه . باید با نامگذاری هدر ارائه شده از خود کمپانی برنامه نوشت دیگه . این کار نه سرعت رو میاره پایین نه چیز دیگه .آيا ميشه مطابق دستورات منوآل هم برنامه نوشت ..يعني به همون انشا .. ممكنه يه مثال بزنيد و يك پورت رو روشن كنيد .. با هدر مربوطه .. چون دستورات منوآل رو مينويسم ميگه نوفهمه !!
حالا چرا اینقدر به پایین اومدن سرعت گیر دادید . موقعی که با avr و 8051 کار می کردید اینقدر نگران پایین اومدن سرعت نبودید .
آقا راستی این دستورات CMSIS واحد RCC رو تونستید بکار بگیرید ؟ اگه تونستید GPIO رو هم دستوراتشو بزارم بعد یه مثال با این دو واحد آپ کنم . OK ؟
مهندس این رجیسترو همچنینکد:AHB Peripheral Clock enable register (RCC_AHBENR)وکد:APB2 peripheral clock enable register (RCC_APB2ENR)به ترتیب برای فعال کردن کلاک ادوات متصل شده به باس اصلی - باس 2 و باس 1 هست .کد:APB1 peripheral clock enable register (RCC_APB1ENR)
همچنین اینا یه رجیستر RCC_APB2RSTR و RCC_APB1RSTR هم دارن که برای ریست تنظیمات کلاک و بازگرداندن به حالت اولیه مورد استفاده قرار می گیره .
خب حالا رسيديم جاي خوبش
استاد .. من ميخواستم همينو بدونم
روش استاندارد و درست حسابي و و بدون مهندسي معكوس براي ياد گيري چيه . . من منوآل روياد گرفتم خب .. حالا ميخوام دستور بنويسم .. اگر بخوام مثال ورق بزنم يا هدرها رو كامپايل دستي كنم !!! به نظرم كار درستي نيست ..
به نظر شما روش يادگيري اصولي چيه .. هيچ كتابي ميشناسيد مثل زنده ياد علي كاهه سخت افزار و نرم افزار رو گفته باشه با مثال .. انگليسي فارسي هم نه
در ضمن من براي اينكه يكم كمتر گيج بخورم موقع پيدا كردن دستورات .. يه پروژه ساختم در محيط qt و هدرها رو هم بهش معرفي كردم . حداقل وقتي يه دستور مينويسم چهارتا گزينه ميده كه بفهمم چه دستوراتي وجود داره .. هر چند وقتي هيچي بلد نباشي مثل من اين هينت هم كمكي نميكنه
اين يه توضيح اضافي بود
موضوع اصلي همون روش استاندارد يافتن دستورات هست ..
در پست قبلي هم پرسيدم كه شركتهاي درست حسابي به چه روشي كد مينويسن .. اسمبلي ؟ هدر معمولي ؟ cmsis يا حتي هدر هاي اختصاصي؟
اين كاري كه ما ميكنيم در دانشگاه هاشون تدريس ميشه يا اونها هم مثل ما دست و پا ميزنن
من يه سري فيلم اموزشي در قسمت فيلمها از دانشگاه هند گذاشتم ..
اگه می خوای با رجیستر ها برنامه بنویسی فکر کنم باید مثالهای کیل رو دنبال کنی . بالاخره 1000 تا رجیستر نیست که ! دو تا مثال کیل رو ببینی توش این 7 -8 تا رجیستر مثلا برای GPIO بکارگرفته شده و شما متوجه میشی که اینطوری باید باهاش کار کنی . بقیه دیگه مهارت در زبان C و از همه مهمتر هنر الگوریتم نویسی و حل مسئله هست . برای درست فهمیدن مسایل حتما حتی با وجود CMSIS باید از سخت افزار اطلاع داشته باشید . کتابی هم که دستورات رو توضیح داده شده باشه نداریم . یسری اومدن فقط امکانات آرم رو مثلا برای فیلیپس توضیح دادن !روش استاندارد و درست حسابي و و بدون مهندسي معكوس براي ياد گيري چيه . . من منوآل روياد گرفتم خب .. حالا ميخوام دستور بنويسم .. اگر بخوام مثال ورق بزنم يا هدرها رو كامپايل دستي كنم !!! به نظرم كار درستي نيست ..
به نظر شما روش يادگيري اصولي چيه .. هيچ كتابي ميشناسيد مثل زنده ياد علي كاهه سخت افزار و نرم افزار رو گفته باشه با مثال .. انگليسي فارسي هم نه
در ضمن شما وقتی یه سری به منوال بزنی و بعدش بیای و از CMSIS استفاده کنی دیگه نمیدونم کجاش ایراد داره . یعنی شما با استفاده از CMSIS مخالفی ؟!
باید توجه کرد که ما تازه اول راهیم و تازه بکار گیری و استفاده از کتابخانه ها هنر نیست . ما باید روی هدفمون تمرکز کنیم . پروژه درست کنیم . ایده جدید و ....
راستش نمیدونم شرکتها به چه روشی می نویسن ولی راهی بجز CMSIS فکر نکنم باشه .آخه CMSIS ;ه همون رجیسترهاست ! برای استفاده راه دیگه ای نداریم ما هم همین راه رو باید بریم ! اگه فکر میکنید که تو ین کتابخانه ها دستورات خیلی زیاد و پیچیده هست و اینا سرعت رو میاره پایین ... باید بگم که قرار نیست ما کتابخانه ها رو رو میکرو بریزیم که ! اینا کامپایل میشن تمام ثابت ها و متغیر ها حذف یا خلاصه سازی میشن . مسیری که من تو چند پست قبل برای یک و صفر کردن گفتم پس از کامپایل به چند دستور تبدیل میشه !موضوع اصلي همون روش استاندارد يافتن دستورات هست ..
در پست قبلي هم پرسيدم كه شركتهاي درست حسابي به چه روشي كد مينويسن .. اسمبلي ؟ هدر معمولي ؟ cmsis يا حتي هدر هاي اختصاصي؟
اين كاري كه ما ميكنيم در دانشگاه هاشون تدريس ميشه يا اونها هم مثل ما دست و پا ميزنن
تازه کتابخانه CMSIS اون جورام نیست که فکر کنی یه دستور می نویسم پورت سریال راه میوفته . دو تا دستور می نویسم LCD راه میوفته !! وقتی بریم جلو میبینید که استفاده از CMSIS با رجیستر نویسی فرقی نداره !!! فقط اسامی یخورده بهتر شدن و با استفاده از struct روش مقداردهی به رجیسترها ساده شده . دیگه نمی خاد برای مقدار دادن به رجیستر خاص کلی and و or کنیم !
امیدوارم که با این حرفا شک ها و شبهات دوستان بر طرف بشه و هر چه زود تر شروع به یادگیری کنیم که خیلی عقبیم !!!!
دوستان خواهش میکنم یکی برای ما مبتدی ها هم توضیح بده اصلا چطور با keil و iar پروزه درست کنیم
کتابخونه ها رو از کجا باید بیاریم
خیلی ممنون میشم اگه این کار رو بکنید
استاد ممنون كه جواب ميدي
من اصلا با سرعت كاري ندارم الان و با كتابخانه ها هم مشكلي ندارم
فقط ميخوام ياد بگيرم ولي ميخوام ببينم روش اصولي و روتين و .. چيه
مهندسي معكوس كردن به نظرم روش درستي نمياد .. يعني هدر ها رو زير و رو كنيم .. شايدم من اشتباه ميكنم
حقيقتش من اگر منوآل رو بخونم و بتونم برنامه بنويسم كه خيلي خوشحال ميشم
اما
تا حالا چند بار GPIO رو طي ماههاي قبل خوندم ولي تا وقتي توي اين فروم توضيح دستورات داده نشد من نميتونستم چيزي بنويسم
الان هم ADC رو خوندم ولي باز هم نميتونم دقيقا املاء درست رو بنويسم
از طرفي خب برنامه نويس خوبي هم نبودم كه هدر بشناسم و كلاس بدونم چيه و استراك رو خوب تشخيص بدم..
در ضمن سورسهايي مثل STM32_Init.c رو هم خوب نميشناسيم .. يعني اونها تنظيمات ما رو انجام ميدن
و همچنين خواص محيط برنامه مثل كيل رو
باز هم سوال اصلي همون روشن پيدا كردن نحوه نگارش دستور از روي منوآل هست كه شما خيليشو گفتي ..
اگر بيشتر توضيح بديد ممنون ميشم
موفق وشاد باشيم
خوب استاد من قسمت رجیستر های RCC رو کامل خودم
الان کلی سوال تو سرم هست؟؟؟!!!
اجازه هست...
*** اللّهم عجّل لولیک الفرج ***
سلامدوستان خواهش میکنم یکی برای ما مبتدی ها هم توضیح بده اصلا چطور با keil و iar پروزه درست کنیم
کتابخونه ها رو از کجا باید بیاریم
خیلی ممنون میشم اگه این کار رو بکنید
خوش اومدی مگه شما هم بورد stm32 رو گرفتی ؟؟
پس چرا الان !!!
مجله شماره 2 رو حتما بخون کار با کامپایلر کیل رو توش خوب توضیح داده فایل های مورد نیازت هم توی پیوست همون مجله هست.
(ویرایش شد)مجله میکروکنترلر فارسی شماره 2 - ایـــــــــران میـــــــکرو ™
موفق باشی
*** اللّهم عجّل لولیک الفرج ***
مهندس شما که می خوای ریز و بیت به بیت رجیسترها رو همین اول کار بدونی کم کم انگیزت برای شروع ضعیف نمیشه ؟ آخه فقط تئوری هم نیست که ؟ نمی خوای اول دو تا مثال ببینی بعد جواب سوالات رو بگیری ؟
تنها منابع یادگیری Applicaton Note ها و Manual و مثال هاست . فکر نکنید مثل AVR براش 10 تا کتاب هست ! همه هم همین طوری یاد می گیرند . نمی تونید چیز کامل و پیشرفته بخواید ولی آسون . بالاخره اولش برای همه سخته دیگه . باید از منابع و اینترنت هم استفاده کنید. منم هنوز اول راهم . مگه از شروع کار با این میکرو 1 ماه بیشتر گذشته ؟ !
من میخاستم اول زیروبمه رجیستر های پر کاربرد مثل RCC و GPIO رو در بیارم بعد برم سراغ مثالمهندس شما که می خوای ریز و بیت به بیت رجیسترها رو همین اول کار بدونی کم کم انگیزت برای شروع ضعیف نمیشه ؟ آخه فقط تئوری هم نیست که ؟
ولی الان که حرفشو زدی اشتهام باز شد مثال بده...
شوخی نکن استادمنم هنوز اول راهم
راستی مهندس شکرریز چطوری کل manual رو تونسته بخونه من که یه هفته هست توی RCC گیر کردم
البته مهندس ما زبانش بیسته 20
*** اللّهم عجّل لولیک الفرج ***
من كجا گفتم كل منوآل رو خوندم .. گفتم GPIO رو خوندم .. و الان هم با ADC كله ميزنم .. البته در واقع گيج ميزنم ..
چون هم مفاهيم جديد هست و هم دستورات رو نميشتونم پيدا كنم ..
داشتم به اين فكر ميكردم اساتيد يه كتاب بزنن مثل كتاب جناب كاهه .. فقط موقع فروش يادتون باشه اين ناشرها مافيا دارن سنگين .. كلا ميزارن سرتون مثل من پشيمون ميشيد.. .. اگر كوير بياد كمك بچه ها كتاب رو چاپ كنه و بفروشه (البته بايد با يك انتشاراتي هم صحبت كنيد) هم سود خوبي داره هم اولين كتابي هست كه به اين شكل توليد شده و هم جاش خيلي خاليه توي بازار
اگر كار سريع پيش بره من خودم طراحي جلد و صفحه آرايي و .. خرج درامدشو انجام ميدم
آقا سعيد من ياد نگرفتم هنوز از روي منوآل دستور بنويسم
چطوري ميشه نوشت ؟این جدول و رجیسترهای اون برای پورت های دیگه GPIO تکرار میشه . فقط باید بیس آدرس ما عدد بدست اومده باشه و با افست دادن به اون عدد (اضافه کردن عدد های سمت چپ جدول متناظر با هر رجیستر میتونیم به رجیستر مربوطه دسترسی داشته باشیم . مثلا آدرس مطلق دسترسی به این هفت رجیستر برای GPIOA به ترتیب برابر :
0X40010818 - 0X40010814-0X40010810-0X4001080C-0X40010808-0X40010804-0X40010800
هست . حالا با رفتن به این آدرس میشه 32 بیت داخلش نوشت یا خواند . بعضی جاهاش هم که رزرو هست
لطفا چند خط دستور بديد
ویرایش توسط alishekarriz : 13-03-2012 در ساعت 20:21
سلام
استاااد كجايييي
بالاخره با راهنماييهاي شما تونستم ADC رو روشن كنم
خيلي خوش به حالمه ..
کد:#include <stm32f10x_lib.h> #include "STM32_Init.h" //#include<stm32f10x.h> int main (void) { int i,j,a,b,c; stm32_Init(); RCC->APB2ENR=0x0000020C; ADC1->CR2=7; while(1) { ADC1->CR2=1; a=ADC1->DR; b=a*0.8; c=a*0.2; for(j=1;j<a;j++) { for(i=b;i<j;i++) GPIOA->ODR = 5; for(i=c;i>j;i--) GPIOA->ODR = 10; } } }
ویرایش توسط alishekarriz : 13-03-2012 در ساعت 22:13
ممنون از راهنمای شما دوست عزیز
من برد رو از جای دیگه ای تهیه کردم
دوستان من یه پروژه تو کیل باز کردم این ارور ها رو میده مشکل از کجاست
Build target 'Target 1'
linking...
1.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o).
1.axf: Error: L6218E: Undefined symbol stm32_Init (referred from main.o).
Target not created
با تشکر
سلامدوستان من یه پروژه تو کیل باز کردم این ارور ها رو میده مشکل از کجاست
مهندس پروژه که ساختی main.c رو تو target اضافه کردی
عکس رو ببین باید همه این توابع رو اونجا اضافه کنی چارش هم اگه کلیک راست کنی گزینه add... داره بزن بعد فایل رو انتخاب کن
اگه مشکلت این نبود فایل پروژت رو بزار ببینیم
ویرایش توسط Doloop : 13-03-2012 در ساعت 23:14
*** اللّهم عجّل لولیک الفرج ***
سلام بر اساتید
اینم یه مثال بسیار ساده برای شروع کار با واحد GPIO و RCC بکمک CMSIS ..........
RCC & GPIO-01.rar - 4shared.com - online file sharing and storage - download
یه توضیحم بدم که داخلش دو تا پوشه بنامهای Project و Libraries هست . پوشه Project در واقع فایلهای پروژه و Main و کتابخانه های کامپایل شده هست و پوشه دیگه تمام کتابخانه های CMSIS نسخه 3.5 (آخرین نسخه) هست . از اونجا که آدرس دادن این کتابخانه ها یه مقدار مشکلات ایجاد می کنه . سعی کنید کل این پوشه رو یه نسخشو جایی نگه دارید و برای نوشتن پروژه و برنامه جدید از همین پوشه استفاده کنید . و همچنین چون با وجود زیپ کردن بازم حجم این پوشه 2.5 مگ شده پس ارسال هر بار اون یخورده سرعت کار رو می گیره . پس من و شما از این به بعد تنها فایل های main و احتمالا سورس کتابخانه هایی که جدید می نویسیم رو که فقط چند کیلو بایت میشه رو آپ کنیم .
مثال هم کلاک رو روی 72 مگ خارجی تنظیم کرده و led متصل به پین A1 رو هر نیم ثانیه روشن و خاموش می کنه . همین مثال به نظر من کافیه تا یه نفر بقیه توابع GPIO و RCC رو هم تست کنه .
اقا خیلی ممنون واقعا لطف کردی مشکل حل شد
دوستان میشه یکم بهتر یعنی ساده تر توضیح بدید این کتابخونه CMSIS چی هست ؟؟ کجا هست ؟؟ برای استفاده کردنش کار خاصی لازمه ؟؟ اصلا چی کار باید کرد ؟؟ راستش من تاپیک رو خوندم ولی چیزی نفهمیدم راجب به این کتابخونه
سلام استاد
پروژه اي كه با CMSIS آپ كرديد .. خيلي خوب بود .. اين دستورات رو هم به همون روش بايد پيدا كنيم
من براي اينكه دستورات رو پيدا كنم رجيستري مپ رو نگاه ميكنم بعد ميرم توي QT كه هينت بده .. اولش رو مينويسم .. بعد ميبينم كدوم دستور شبيه هست به چيزي كه من ميخوام
من يادم نموند اخر اين CMSIS مجاني هست يا پولي؟
OnARM.com
اين رو دانلود دارم ميكنم ..ببينم چيه
استاد ادامه بده ديگه دستا راه افتاد .. قبل از عيد يكي از رباتهاي سوني يا حداقل يه گوشي اپل 6 بسازيم
=========================================
دو تاپيك در مورد CMSIS هست . .
تشریح کامل دستورات cmsisبرای lpc1768 - ایـــــــــران میـــــــکرو ™
Cmsis چیه؟ - ایـــــــــران میـــــــکرو ™
تشریح کامل دستورات cmsisبرای lpc1768 - ایـــــــــران میـــــــکرو ™
====================================