PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مجموعه دستورات cmsis برای stm32f4xxxx



Ma3ood
28-07-2012, 11:29
با درود :hi:
با توجه به تصمیمات و نتیجه گیری تصمیم بر این شد تا تایپیکی مستقل برای بحث و اموزش دستورات پرکاربرد CMSIS برای میکرو کنترلر STM32 سری F4 راه اندازی شود .
امید است تا دوستان و مدیران تا انجا که می توانند به این تایپک کمک کنند.
من برای شروع با اجازه دوستان چند دستور را می نویسم در پست های بعدی که رسما تایپیک کار خودشو شروع کنه
من تصمیم دارم برای هر قسمت که تکمیل شد PDF مربوط به ان قسمت را هم بسازم تا دوستان دیگه راحت باشند برای همین در ابتدای بحث به بحث مهم و شیرین رجیستر RCC می پردازیم لطفا دوستان هم ما را یاری کنند.:0013:

Ma3ood
28-07-2012, 11:49
سری دستورات مربوط به RCC
دستور مربوط به فعال سازی کلاک مربوط یه پورت یا یک پین از میکرو مربوط به AHB1


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);

مثال در اینجا کلاک مربوط به دو پورت A, B را فعال کردیم:


RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA | RCC_AHB1Periph_GPIOB , ENABLE);

دستورات زیر هم همانند دستور بالا کار میکنند :


RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_GPIOx, ENABLE);
RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_GPIOx, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_GPIOx, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOx, ENABLE);

Ma3ood
28-07-2012, 11:50
اما سوال خودم :mrgreen:
این دو دستور از سری دستورات RCC دقیقا برای چی استفاده میشوند.


RCC_GetClocksFreq(&RCC_Clocks);
SysTick_Config(RCC_Clocks.HCLK_Frequency / 100);

sigma-mx
28-07-2012, 13:07
سلام دوستان . امیدوارم تاپیک خوبی بشه . پس بحث مربوط به CMSIS و سری F4 میکروی ST رو فقط در اینجا مطرح کنید .. با تشکر ..

خب آقا مسعود دستور اول مقدار کلاک رو در RCC_Clocks ذخیره میکنه . و این دستور جهت دیباگ کاربرد داره .. فکر کنم اگه پاک بشه هم کار کنه ...
دستور دوم هم کلاک واحد SysTick رو کانفیگ میکنه .. برای استفاده از delay

Ma3ood
28-07-2012, 20:18
سلام دوستان . امیدوارم تاپیک خوبی بشه . پس بحث مربوط به CMSIS و سری F4 میکروی ST رو فقط در اینجا مطرح کنید .. با تشکر ..

خب آقا مسعود دستور اول مقدار کلاک رو در RCC_Clocks ذخیره میکنه . و این دستور جهت دیباگ کاربرد داره .. فکر کنم اگه پاک بشه هم کار کنه ...
دستور دوم هم کلاک واحد SysTick رو کانفیگ میکنه .. برای استفاده از delay

متاسفانه کاربرد دستور دوم را زیاد متوجه نشدم واحد SysTick اگه اشتباه نکنم برای تایمر و.... بود درسته :0013:

sadmonew
28-07-2012, 20:52
متاسفانه کاربرد دستور دوم را زیاد متوجه نشدم واحد SysTick اگه اشتباه نکنم برای تایمر و.... بود درسته
سلام مهندس
همونطور كه آقا سعيد هم توضيح دادن اين دستور براي ايجاد تاخير به كار ميره. يعني با عددي كه بهش نسبت ميديم باعث ايجاد وقفه ميشه.
حالا چطوري؟
فرض كنيم كه فركانس هسته ميكرو، روي 72 مگاهرتز تنظيم كرديم.
خوب اگه 72 مگاهرتز رو بر 1000 تقسيم كنيم ميشه 72كيلوهرتز.
ميدونيم كه 72 كيلوهرتز يعني 72000 هرتز. اگه اين عدد رو داخل دستور SysTick_Config قرار بديم. به اين صورت:

SysTick_Config(72000);با قرار دادن اين عدد وقفه هر 1 ميلي ثانيه اتفاق ميافته. خوب اگه بخوايد وقفه در زمان مورد نظر خودتون افتاق بيفته ميتونيد از روش زير استفاده كنيد
اگه عدد 72000 رو بر 72000000 تقسيم كنيد ميشه 0.001 ثانيه يعني همون يك ميلي ثانيه.
يا اگه ميخوايد وقفه هر 1 ميكرو ثانيه رو بده، به جاي 72000 عدد 72 رو تو دستور SysTick_Config بذاريد. فقط همين..
اميدوارم خيلي پيچيدش نكرده باشم.

sadmonew
28-07-2012, 21:25
خوب يه مثال ميزنم كه ملموس تر باشه.
تو كتابخونه CMSIS دو تا فايل به اسم هاي stm32f4xx_it.c و stm32f4xx_it.h داريم كه از اسم فايل هم مشخصه براي وقفه(interrupt) به كار ميره.
تو فايل stm32f4xx_it.c يه تابع به اسم SysTick_Handler وجود داره.
هر موقع وقفه در زمان مشخص شده مثلا هر 1 ميلي ثانيه رخ بده، اين تابع فراخواني ميشه و دستوراتي كه توش قرار داده باشيم رو اجرا ميكنه.
حالا شما فرض كنيد كه اگه يه متغير تعريف كنيد كه با هر بار فراخواني اين تابع ، يك واحد ازش كم بشه ميتونيد با اين روش يك تابع براي ايجاد تاخير(Delay) بنويسيد.

electeron_man
02-08-2012, 01:56
سلام بر مهندسین ایران زمین
خیلی عالیه
انشالله این تاپیک مثل دیسکاوری نباشه و هر روز پر بارتر و کاربردی تر و علمی تر بشه :wink:

alishekarriz
13-08-2012, 23:19
خوب يه مثال ميزنم كه ملموس تر باشه.
تو كتابخونه CMSIS دو تا فايل به اسم هاي stm32f4xx_it.c و stm32f4xx_it.h داريم كه از اسم فايل هم مشخصه براي وقفه(interrupt) به كار ميره.
تو فايل stm32f4xx_it.c يه تابع به اسم SysTick_Handler وجود داره.
هر موقع وقفه در زمان مشخص شده مثلا هر 1 ميلي ثانيه رخ بده، اين تابع فراخواني ميشه و دستوراتي كه توش قرار داده باشيم رو اجرا ميكنه.
حالا شما فرض كنيد كه اگه يه متغير تعريف كنيد كه با هر بار فراخواني اين تابع ، يك واحد ازش كم بشه ميتونيد با اين روش يك تابع براي ايجاد تاخير(Delay) بنويسيد.

درواقع ايجاد تاخير در اجراي قسمتي از برنامه نبايد توسط حلقه انجام بشه .. يعني نبايد در زمان تاخير Cpu در گير باشه .. در كارهاي كوچك و تك پردازشي شايد اهميتي نداشته باشه ولي وقتي سيستم عامل باشه يا چند پروسس هم زمان در حال انجام باشه درگير كردن cpu براي تاخير كاملا اشتباه هست

ممنون از آموزش خوبتون

sadmonew
13-08-2012, 23:28
درواقع ايجاد تاخير در اجراي قسمتي از برنامه نبايد توسط حلقه انجام بشه .. يعني نبايد در زمان تاخير cpu در گير باشه .. در كارهاي كوچك و تك پردازشي شايد اهميتي نداشته باشه ولي وقتي سيستم عامل باشه يا چند پروسس هم زمان در حال انجام باشه درگير كردن cpu براي تاخير كاملا اشتباه هست

ممنون از آموزش خوبتون
سلام مهندس شكرريز عزيز
خواهش ميكنم، نظر لطفتونه.
بله كاملا درسته.
منظور من هم همون كارهاي تك پردازشي هستش. خودمو دارم ميگم، هنوز مونده با سيستم عاملي كه براي اين ميكرو طراحي شده كار كنم.هنوز نتونستم همه قسمتاشو راه بندازم و باهاشون كار كنم!

alishekarriz
14-08-2012, 18:28
اقا اگر من اندازه شما بلد بودم كه ...

دست ما رو هم بگير مهندس .. بعد كلي كه فهميديم استراكت چي هست .. شما عزيزان در حركتي ستودني رفتيد سراغ Cmsis و حالا بايد برم كلاس ياد بگيرم .

ممنون از راهنماييهاتون ..
فعلا بايد ربط بين دستورات cmsis و منوآل رو درك كنم

موفق و شاد باشيم

sadmonew
14-08-2012, 20:12
اقا اگر من اندازه شما بلد بودم كه ...
سلام دوست گلم مهندس شكرريز:hi:
مهندس كي بلده؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ من.................:mrgreen:


دست ما رو هم بگير مهندس ..
مهندس بگو چيكار كنم كه از ما راضي بشين؟؟ :0013:


بعد كلي كه فهميديم استراكت چي هست ..
مهندس همه مواردي كه به برنامه نويسي تو C مربوط ميشه رو ميتونيد خيلي راحت از كتاباي آموزش زبان C ياد بگيرين. خيلي قشنگ توضيح دادن.

alishekarriz
14-08-2012, 23:56
مهندس چوبكاري ميكني

شما هم استادي هم همه دوست داشتني ..همه هم ازت راضي هستن

كتاب سي رو دارم شروع ميكنم

امروز پرينتر هم خريدم spp100 .. براي خريد lcd گرافيكي يك بار با جناب حسينا رفتيم ولي نخريدم .. شما پيشنهادتون چيه .. 3.2 اينچ موبايلي ...

يا گرافيك lcd هاي قديم تك رنگ (يكي دارم)

ممنون از آموزشها و راهنماييها
شاد و موفق تر

shayanmelody
16-08-2012, 11:58
يعني همه بچه ها رو اين ميكرو كار كردن و همه قسمت هاشو راه انداختن ديگه ؟! :sa:
از جمله تايمر كه ميخواستم مطالبش رو بزارم ، پس نيازي نيست كه بزارم همه كار كردن ! :wink:

Doloop
16-08-2012, 13:53
خوب آقا شایان نیکی و پرسش :mrgreen:
بزار منتظریم ببینیم چی کار کردی :wink::o

shayanmelody
16-08-2012, 14:03
خداييش مطالبش خيلي خيلي زياده ‌!‌
توابع مربوط به تايمر/كانتر تو خود فايل سورسش به 9 قسمت تقسيم شده ،‌ كار ترجمه و توضيح توابع قسمت اولش تقريبا تموم شده و امروز فردا با يه مثالي كه روي همين برد جواب بده قرار ميدم
فكر نكنم بتونم هر 9 قسمت رو قرار بدم ، چون تنهايي اصلا نميشه ! 3 ،‌4 قسمت مهمش رو ميزارم كه بيشتر به كارمون مياد :wink:

shayanmelody
16-08-2012, 21:28
به نظر شما تو فايل ورد قرار بدم يا همينجا بنويسم ؟!

mzarkoob
16-08-2012, 22:47
توابع مربوط به تايمر/كانتر تو خود فايل سورسش به 9 قسمت تقسيم شده ،‌
سلام
از کدوم مثالها برای تایمر استفاده می کنید؟ در فایل:
STM32F4xx_DSP_StdPeriph_Lib_V1.0.1\Project\STM32F4 xx_StdPeriph_Examples\TIM
که جزء لینکهای دانلودی هست که اینجا
ایـــــــــران میـــــــکرو ™ - مشاهده یک موضوع - شروع کار با برد Discovery kit for STM32 F4 series - with STM32F407 MCU (You can see links before reply)
گذاشتم یه تعداد مثال تایمر هست:

You can see links before reply

اینها را میگید زیاده؟

mzarkoob
16-08-2012, 22:49
به نظر شما تو فايل ورد قرار بدم يا همينجا بنويسم ؟!
در فایل pdf قرار بدید:0013:

shayanmelody
16-08-2012, 23:13
والله از مثال هاي آماده استفاده نميكنم ، از اول شروع ميكنم به نوشتن مثالي كه هم ساده باشه و هم بشه به يه صورتي نتيجش رو روي برد ديد:0013:
ترجمه قسمت اول بدون مثال حدود 11 صفحه شده !‌ با اينكه در هم و قاطي پاتي نوشتم ، كي ميخواد اينهمه تايپ كنه !‌cry::

shayanmelody
17-08-2012, 21:56
اينم از آموزش قسمت اول:o
تو فايل ضميمه يه فايل pdf هست كه آموزش بخش اول تايمر توش هست و يه فولدر كه توش يه مثال هم هست.كامپايلر هم Keil هست.
فقط يه نكته ديگه هم توجه داشته باشيد ،‌ ممكنه تو كامپايل مشكل داشته باشيد و اونم به خاطر اين هست كه آدرس فايل هايي كه من تو برنامه ادد كردم با شما فرق كنه كه تو عكس با يه كادر قرمز مشخص كردم.شما بايد آدرس رو بنويسيد تا كامپايل شه.البته اگه مثل من كل فولدر رو دكستاپ بزاريد مشكلي نداريد ، اگه گذاشتين تو يه درايو ديگه بايد آدرس جديد بهش بديد.:wink:
در ضمن ،‌ اگه دانلود كرديد تشكر فراموش نشه ،‌ شايد باعث شه كه بقيه قسمت هارو زودتر آماده كنم ! :mrgreen:

Ma3ood
17-08-2012, 23:14
درود اول تشکر میکنم بابت پست مفیدتون و ممنون که شما پیش قدم شدید .
دوم ما همه جوره اعلام امادگی میکنیم :o امیدوارم که این تایپک بهترین مرجع بشه :wink:

shayanmelody
18-08-2012, 00:12
دوم ما همه جوره اعلام امادگی میکنیم :o امیدوارم که این تایپک بهترین مرجع بشه :wink:

براي اينكه اين تاپيك مرجع باشه از اونجا كه بررسي قسمت RCC و gpio انجام نشده ،‌ نميشه اسمش رو مرجع گذاشت.بايد توابع مربوط به اون قسمت ها هم ترجمه و موشكافي بشه.چون 2 قسمت پايه و اساسي براي هم خانواده از ميكرويي هست.
من امروز فايل مربوط به قسمت rtc رو نگاه كردم ، اصلا فكر نميكردم اين قسمت اونقدر طولاني باشه ! از بخش تايمر بيشتر نباشه كمتر هم نبود ! كاملا جا خوردم.خودم به تنهايي به هيچ وجه نميتونم ترجمش كنم ، بايد چند نفر بشيم و بريم سراغ هر قسمت.يا چند نفري بريم سراغ 1 قسمت و اون قسمت رو زود تموم كنيم.اينطوري اگه 5 نفر باشيم خوشبينانه تو تو 1 هفته هر قسمت تموم ميشه.
البته من فكر نميكنم 5 نفر پايه واس اينكار پيدا بشه :sa:

Ma3ood
18-08-2012, 00:26
براي اينكه اين تاپيك مرجع باشه از اونجا كه بررسي قسمت RCC و gpio انجام نشده ،‌ نميشه اسمش رو مرجع گذاشت.بايد توابع مربوط به اون قسمت ها هم ترجمه و موشكافي بشه.چون 2 قسمت پايه و اساسي براي هم خانواده از ميكرويي هست.
من امروز فايل مربوط به قسمت rtc رو نگاه كردم ، اصلا فكر نميكردم اين قسمت اونقدر طولاني باشه ! از بخش تايمر بيشتر نباشه كمتر هم نبود ! كاملا جا خوردم.خودم به تنهايي به هيچ وجه نميتونم ترجمش كنم ، بايد چند نفر بشيم و بريم سراغ هر قسمت.يا چند نفري بريم سراغ 1 قسمت و اون قسمت رو زود تموم كنيم.اينطوري اگه 5 نفر باشيم خوشبينانه تو تو 1 هفته هر قسمت تموم ميشه.
البته من فكر نميكنم 5 نفر پايه واس اينكار پيدا بشه :sa:
مهندس راستش میخواستم قبل ماه رمضان بخش GPIO را به کمک شما و دوستان کم کم توی سایت قرار بدم و از فردا هم میرم دنبالش فقط قول بدین کمک کنین :wink:
من اعلام امادگی میکنم ولی من اصلا به اندازه شما حرفه ای نیستم در حد اکابر و اینا :mrgreen:

shayanmelody
18-08-2012, 00:34
بابا حرفه اي چيه ! من برد اون هفته رسيده دستم ر رسما 3 روز هم هست كه دارم روش كار ميكنم ، فقط همت و علاقه ميخواد + زبان در حد معمولي + يكم تجربه كار در مورد ميكروكنترلر ها.
ماشالله بچه هاي اينجا همه 2 مورد آخر رو دارند ، فقط ميمونه همت و علاقه كه اينم بستگي به خود افراد داره
يك دست ، دو دست صدا نداره ، منتظر دست هاي بيشتر هستيم

Ma3ood
19-08-2012, 15:31
با درود خدمت شما اینم عیدی من به شما
اموزش بخش GPIO را اماده کردم امیدوارم خوشتون بیاد اشکلاتی هم داره به بزرگی خودتون ببخشید .
در فايل ضميمه يه فايل pdf هست كه آموزش بخش GPIO و يه مثال با كامپايلر هم Keil هست.
موفق باشید :0013:
با تشکر ویژه از اقای نیکزاد :wink:

shayanmelody
01-09-2012, 01:10
مثل اينكه كسي ديگه به غير از منو آقا مسعود پايه اين ميكرو نيست ،‌ حدودا 2 هفته ميشه كه يوزارت رو راه انداختم ،‌ كسي مشتاق نبود تا مطالب رو بزارم كه هيچ ، حس خودم هم پريد lov:

mzarkoob
01-09-2012, 01:24
سلام
کی گفته مشتاق نیست. من که پیگیر هستم. مشغلم تموم بشه شروع می کنم با stm

mahdimolaei
03-09-2012, 03:50
سلام دوستان
من پایه پایه ام
البته پایه یادگرفتن نه یاددادن
اون سه موردی رو که دوستمون گفت رو هم نسبتا دارم
زبانم خیلی قوی نیست ولی در حد دیتاشیت خوندن شاید باشه
قبلا ها هم با ای-وی-آر و ای-آر-ام کار کردم ولی خب در حد یادگیری
تازه دو روزه که به این تاپیک و تاپیک 34 صفحه ای اس تی ام سر زدم
برد رو هم سفارش دادم که انشاالله 2 روز دیگه دستمه
اگر دوستان تو این زمینه ترجمه ای هم داشتن که نیاز به تایپ داشت اعلام کنن ، عکساش رو بفرستن ، تایپ شده تحویل بگیرن(شاید تنها کمکی باشه که از دستم به خوبی بربیاد)
چیز زیادی بلد نیستم
فعالیتم رو تازه از سر گرفتم
اینقدر هم پایه هستم که الان که ساعت نزدیک 3 نصف شب هست و تازه از راه رسیدم اومدم به این تاپیک سربزنم و ببینم مطلب جدیدی هست یانه
خواهشا دوستان بیان و کمک کنن تا ما هم یادبگیریم!
:wink:یا علی!

hfmicro
03-09-2012, 21:11
سلام دوستان
اگه خدا بخواد منم میخوام به شما بپیوندم !

Ma3ood
03-09-2012, 22:35
مثل اينكه كسي ديگه به غير از منو آقا مسعود پايه اين ميكرو نيست ،‌ حدودا 2 هفته ميشه كه يوزارت رو راه انداختم ،‌ كسي مشتاق نبود تا مطالب رو بزارم كه هيچ ، حس خودم هم پريد lov:

سلام شایان جان:hi:
حق با شماست هیچکی اعلام امادگی نمی کنه منم انگیزه ام پرید و دو هفته هست گذاشتم کنار میخواستم چند قسمت دیگه را راه اندازی و نمونه برنامه بنویسم که اصلا حسش نبود :sa:

electeron_man
19-10-2012, 23:43
سلام دوستان
برای استفاده از دستور printf در کیل چه باید کرد؟

Doloop
20-10-2012, 00:34
سلام دوستان
برای استفاده از دستور printf در کیل چه باید کرد؟


برای چه کاری این دستور مد نظرته ؟؟؟
از توابع CMSIS استفاده میکنی (سوالت توی تایپیک CMSIS بود) ؟؟؟
ببین دستور sprintf کارتو راه میندازه...!

نمونش هم این :





uint16_t Value[20];
uint32_t adcValue;



sprintf((char*)Value,"%d",adcValue);

alishekarriz
11-04-2013, 01:50
اين موضوع هم همينطور

alamdar
19-05-2013, 11:28
دلیلش اینه که کسی هیچ کار کاربردی با هیچ برد یا میکرویی انجام نمیده(مگر چند میکروی محدود) . برای همین این تاپیک ها اولش که یک میکروی جدید میاد فعال میشه و بعد مدتی خاطره ....

من خودم پارسال این میکرو رو خریدم اما چون واسم کاربرد نداشت همینطوری موند . اما الان چون واسم کاربرد پیدا کرده و میخوام قسمت های مختلفش رو راه بندازم دنبال فایل های اصلی که دوستان از روی اونها ترجمه میکنن میگردم! اگر کسی قرار بده و من بتونم با استفاده از اونها کار مثبتی انجام بدم سعی میکنم بیام و اینجا هم قرار بدم

چون اولین تجربه کارم با میکرو هست نمیدونم از کجا باید شروع کرد

Ma3ood
19-05-2013, 12:52
شما به این لینک (You can see links before reply)مراجعه کن

و این تایپیک را زا ابتدا تا انتها بخونید
You can see links before reply

alamdar
23-05-2013, 19:55
من یه زمان از بنیانگذاران اون تاپیک بودم مهندس :mrgreen:

حالا از این حرفا بگذریم ، شما این آموزش هارو از روی همین example ها که توی فایل cmsis هست ترجمه میکنید و قرار میدید؟ یعنی در اصل اون توضیحات انگلیسیشو به فارسی ترجمه میکنید؟

یا منبع بهتری مثل کتاب آموزشی یا چیز دیگه ای دارید؟

اصلا این مثالها که با برد فروشگاه تحویل میشه چی هستند؟ همون مثالهای فایل cmsis هست یا از روی نت پیدا کردن یا هم از روی یه کتاب آموزشی ای چیزی؟

spring110.sh
29-08-2013, 12:12
سلام.
خسته نباشید..
من تازه با stm32f103 شروع کردم .هنوز دارم یاد می گیرم . میشه بگید بعد از config امکانات مثل adc / timer و ... چطور می شه ازشون استفاده کرد ؟ من برنامه نویسی c م یکم ضعیفه !!

spring110.sh
29-08-2013, 12:15
/****************************************Copyright (c)*********************************************** *****
**
** 浩宇电子 - 嵌入式系统解决方案提供商 (You can see links before reply)
**
**--------------File Info---------------------------------------------------------------------------------
** File name: main.c
** Descriptions: The TIM application function
**
**--------------------------------------------------------------------------------------------------------
** Created by: AVRman
** Created date: 2010-10-30
** Version: v1.0
** Descriptions: The original version
**
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
************************************************** ************************************************** *****/

/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include <stdio.h>


/* Private function prototypes -----------------------------------------------*/
void GPIO_Configuration(void);
void NVIC_Configuration(void);
void TIM_Configuration(void);

/************************************************** *****************************
* Function Name : main
* Description : Main program
* Input : None
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
int main(void)
{
GPIO_Configuration();
NVIC_Configuration();
TIM_Configuration();
/* Infinite loop */
while (1){
}
}

/************************************************** *****************************
* Function Name : GPIO_Configuration
* Description : Configure GPIO Pin
* Input : None
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
void GPIO_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB , ENABLE);
/**
* LED1 -> PB0 LED2 -> PB1
*/
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}

/************************************************** *****************************
* Function Name : TIM_Configuration
* Description : TIM_Configuration program.
* Input : None
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
void TIM_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
TIM_DeInit(TIM2);
TIM_TimeBaseStructure.TIM_Period=2000; /* ×ش¶¯ضط×°شط¼ؤ´وئ÷ضـئعµؤضµ( ئت‎ضµ) */
/* ہغ¼ئ TIM_Period¸ِئµآت؛َ²ْةْز»¸ِ¸üذآ »ٍصكضذ¶د */
TIM_TimeBaseStructure.TIM_Prescaler= (36000 - 1); /* ت±ضسش¤·ضئµت‎ ہ‎بç£؛ت±ضسئµآت=72MHZ/(ت±ضسش¤·ضئµ+1) */
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DI V1; /* ²ةرù·ضئµ */
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterM ode_Up; /* دٍةد¼ئت‎ؤ£ت½ */
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
TIM_ClearFlag(TIM2, TIM_FLAG_Update); /* اه³‎زç³ِضذ¶د±êض¾ */
TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM2, ENABLE); /* ؟ھئôت±ضس */
}

/************************************************** *****************************
* Function Name : NVIC_Configuration
* Description : Configuration the nested vectored interrupt controller.
* Input : None
* Output : None
* Return : None
* Attention : None
************************************************** *****************************/
void NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriori ty = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}

#ifdef USE_FULL_ASSERT

/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval None
*/
void assert_failed(uint8_t* file, uint32_t line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

/* Infinite loop */
while (1)
{
}
}
#endif

/************************************************** ************************************************** *****
END FILE
************************************************** ************************************************** *****/

برنامه بالا رو کسی می تونه کامل توضیح بده ؟
تایمر و پورت ها کانفیگ می شن !تو سیمولاتور کیل پایه ها بر اساس تایمر ست و ریست می شن ! چطوری ؟ آخه دستوری مثل for نداره

Doloop
29-08-2013, 13:24
سلام

پس یعنی شما توی کانفیگ مشکلی ندارید :wink:

استفاده ازش هم کار مشکلی نیست البته در مورد تایمر اعتراف میکنم که اونقد رجیستر داره که منم کم آوردم و بعضی وقت ها قات میزنم :0013:

ولی چون از CMSIS استفاده میکنید دستوراتش با F103 شاید خیلی کم تفاوت داشته باشه میتونید برای راهنمائی از مثال های توی تایپیک 103 هم استفاده کند

این یک نمونه برای کانفیگ و خوندن ADC برای 407 هست :




RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
ADC_CommonInitStructure.ADC_Mode = ADC_Mode_Independent;
ADC_CommonInitStructure.ADC_Prescaler = ADC_Prescaler_Div2;
ADC_CommonInitStructure.ADC_DMAAccessMode = ADC_DMAAccessMode_Disabled;
ADC_CommonInitStructure.ADC_TwoSamplingDelay = ADC_TwoSamplingDelay_5Cycles;
ADC_CommonInit(&ADC_CommonInitStructure);


ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b;
ADC_InitStructure.ADC_ScanConvMode = ENABLE;
ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
ADC_InitStructure.ADC_ExternalTrigConvEdge = ADC_ExternalTrigConvEdge_None;
ADC_InitStructure.ADC_ExternalTrigConv=ADC_Externa lTrigConv_T1_CC1;
ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
ADC_InitStructure.ADC_NbrOfConversion = 1;
ADC_Init(ADC1, &ADC_InitStructure);

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_56Cycles);

با اینا هم ADC فعال میشه :




ADC_Cmd(ADC1, ENABLE);
ADC_SoftwareStartConv(ADC1);

و این دستور هم مقدار ADC رو میخونه و در متغیر ذخیره میکنه :




i=ADC_GetConversionValue(ADC1);


راستی یادم رفت بگم این مثالی که شما گذاشتید برای 103 هست نه 407 (اگه دقت کنید این تایپیک برای میکروی 407 هست)

spring110.sh
31-08-2013, 13:34
[QUOTE=Doloop;76039]سلام

پس یعنی شما توی کانفیگ مشکلی ندارید :wink:

استفاده ازش هم کار مشکلی نیست البته در مورد تایمر اعتراف میکنم که اونقد رجیستر داره که منم کم آوردم و بعضی وقت ها قات میزنم :0013:


آقا خیلی ممنون . دمت گرم . اما یه سوال .بعضی وقتا من به دستوراتی مثل این تو مثالا برخورد می کنم :
if(DMA_GetITStatus(DMA1_IT_TC1))
{
status=1;
LEDToggle(LEDG);


این LEDToggle متغیره ؟ دستوره ؟ چون متغیر که تعریف نشده بود .

یا مثلا دستوری مثل ...openpage(245) و ... اینارو چه طور و از چه منبعی میشه استخراج کرد؟

Doloop
31-08-2013, 14:50
ledtoggle

بله متغیر هست من فکر کنم این برنامه رو توی نت دیده باشم :0013:
احتمالا هدری چیزی همراه پروژه باید باشه که توی اون تعریف کرده



یا مثلا دستوری مثل ...openpage(245) و ... اینارو چه طور و از چه منبعی میشه استخراج کرد؟

متوجه نشدم این چی هست ؟؟

spring110.sh
31-08-2013, 15:58
منم اون دستور رو بین دستورهایی که یکی از برنامه نویسای arm نوشته بود دیدم . همینطور گذری دیدم و متوجه نشدم اصلا چی هست ! اما می دونم که مفهوم و قالبش اینجوری بود .
یه سوال دیگه . چه طور می شه از تایمر به صورت عملی استفاده کرد ؟ باید از فلگ تایمر استفاده کرد؟یا رجیستر های اون ؟دستوراتشو می شه بگید ؟

spring110.sh
02-09-2013, 12:58
اون دستورو کشف کردم . قبا براش یه تابع تعریف شده بود !!!

newman
19-09-2013, 12:01
سلام ....
میشه این بخش یکم توضیح بدید ؟



RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
RCC_PLLCmd(DISABLE);
RCC_PLLConfig(RCC_PLLSource_HSE,16,288,2,6);
RCC_PLLCmd(ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

Doloop
19-09-2013, 14:03
سلام


RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);این دستور منبع کلاک سیستم رو روی کریستال خارجی قرار میده


RCC_PLLCmd(DISABLE);این دستور هم مشخصه که PLL رو غیر فعال میکنه , هر بار که بخواهیم PLL رو مجدد کانفیگ بکنیم باید غیر فعالش کنیم بعد کانفیگ رو اعمال کنیم بعد دوباره فعال کنیم برای :wink:

RCC_PLLConfig(RCC_PLLSource_HSE,16,288,2,6);این جا این قسمت رو من طور دیگه ای منویسم , این مدلیشو ندیدم :mrgreen:
من به این صورت مینویسم :
که منبع PLL رو روی کریستال خارجی تقسیم بر یک قرار دادم و در 5 که ضریب PLL هست ضرب کردم یعنی با کریستال 8 مگ کلاک PLL میشه 40 مگاهرتز :wink:



RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_5) ;



RCC_PLLCmd(ENABLE);

خط چهارم هم که بعد از اتمام کانفیگ PLL اومده فعالش کرده


RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);خط آخر هم , منبع کلاک رو که در خط اول روی کریستال خارجی قرار داده بودیم به PLL تغیر میده

shayanmelody
03-11-2013, 19:46
سلام ....
میشه این بخش یکم توضیح بدید ؟



RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
RCC_PLLCmd(DISABLE);
RCC_PLLConfig(RCC_PLLSource_HSE,16,288,2,6);
RCC_PLLCmd(ENABLE);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);


این چن خط چقد آشنان :mrgreen: