PDA

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



Doloop
30-07-2012, 01:34
آموزش ساخت پروژه برای استفاده از توابع CMSIS



ساخت پروژه برای استفاده از توابع CMSIS یکم دردسر داره ولی اگه چندتا خودت بسازی دیگه هیچ مشکلی نخواهی داشت...You can see links before reply

برای شروع باید اول محل ذخیره پروژه رو تعین کنی
مثلا من میخام برای کار با واحد ADC یه پروژه درست کنم
اول : یه پوشه به نام ADC ایجاد میکنم
دوم : سه تا پوشه با نام های زیر داخل پوشه ADC ایجاد میکنم
lib
project
source

پوشه project محل ذخیره پروژه میباشد
پوشه source هم محل ذخیره main و سایر هدر ها ی اضافی میباشد
اما پوشه lib محل ذخیره درایور های مربوط به توابع CMSIS میباشد
این درایور ها بطور کلی شامل دوتا پوشه به نام های زیر میباشد که کافیه فقط داخل پوشه lib کپی شوند :

CMSIS
STM32F4xx_StdPeriph_Driver

بعد هدر stm32f4xx_conf.h رو هم در آدرس زیر کپی کنید

ADC\lib\CMSIS\ST\STM32F4xx\Include

سوم :حالا میریم داخل نرم افزار کیل و یک پروژه جدید میسازیم بعد پروژه رو تو آدرس پوشه project ذخیره میکنیم
حالا قبل از ایجاد محیط برنامه نویسی در قسمت project نرم افزار keil که سمت چپ محیط نرم افزار هست مطابق شکل زیر یک گروه اصلی وجود دارد که به نام ADC نامگذاری میکنیم و یک زیر گروه هم به نام startup نام گذاری میکنیم
دو زیر گروه هم خودمان به نام های main و lib ایجاد میکنیم
مطابق شکل زیر :

You can see links before reply

چهارم :یه new document برای نوشتن برنامه میسازیم و با نام و پسوند main.c در آدرس پوشه source ذخیره میکنیم
پنجم :فایل های مورد نیاز رو به پنجره project اضافه میکنیم
این فایل ها عبارتند از :
main.c

system_stm32f4xx.c

این فایل در آدرس زیر است
ADC\lib\CMSIS\ST\STM32F4xx\Source\Templates

و تمام فایل های موجود در آدرس زیر را نیز به گروه lib اضافه میکنیم :

ADC\lib\STM32F4xx_StdPeriph_Driver\src

مطابق شکل :

You can see links before reply

بعد از اضافه کردن این فایل ها به قسمت project نرم افزار keil نوبت تنظیمات tools میباشد
در نرم افزار keil در نوار بالا گزینه flash را زده و بعد گزینه configure flash tool را انتخاب کنید
1 در تب target فقط مقدار xtal را روی 8 تنظیم کنید
2 در تب output گزینه create hex file را فعال کنید
3 تب c/c++ که این تب رو باید با دقت تنظیم کنید چون مشکل بیشتر پروژه ها مربوط به تنظیمات این قسمت میباشد
در قسمت define این تب همیشه عبارت زیر را با حروف بزرگ تایپ کنید
USE_STDPERIPH_DRIVER,STM32F4XX
گزینه optimization را هم روی گزینه level 3 قرار دهید

You can see links before reply

حالا باید در قسمت include paths آدرس یکسری فایل ها را فرا بخوانید
چهارتا آدرس نیازه که به شرح زیر میباشد :

ADC
(آدرس پوشه پروژه میباشد)

ADC\lib\CMSIS\Include

ADC\lib\CMSIS\ST\STM32F4xx\Include

ADC\lib\STM32F4xx_StdPeriph_Driver\inc

انتهای این چهار تا آدرس برای همه کسانی که طبق این روال پیش رفتند دقیقا مطابق بالا میباشد و تفاوت تنها در آدرس قبل از ADC است

You can see links before reply

حالا میریم به تب های دیگه
4 تب debug

You can see links before reply

5 تب utilities
در تب utilities تب های زیر نیز وجود داره که اونا رو هم مطابق شکل باید تنظیم کنید
تنظیمات این قسمت مربوط به پروگرمر کردن و دیباگ کردن میشه

You can see links before reply

You can see links before reply

You can see links before reply

You can see links before reply


عزیزای مهندس اگه ایرادی هست یا موردی فراموش شده حتما ذکر کنید :wink:

Doloop
30-07-2012, 15:05
ببخشید این مورد رو فراموش کرده بودم

هدر stm32f4xx_conf.h رو هم در آدرس زیر کپی کنید

ADC\lib\CMSIS\ST\STM32F4xx\Include

پست قبلی رو هم ویرایش کردم :0013:

saeidhp
30-07-2012, 20:13
مهندس خیلی ممنون به خاطر توضیحات
در تب utilities من ST-Link Debugger رو انتخاب میکنم ولی وقتی روی دکمه setting میکنم هیچ اتفاقی نمیافته

در صورتی که قبلا این مشکل نبود و از داخل کیل هم پروگرم میشد

از دیروز این طوری شده مشکل از کجاست ؟

Doloop
30-07-2012, 23:39
من همچین مشکلی رو ندارم
شما هم ST-LINK جدا دارید یا همونی که روی بورد دیسکاوری رو میگید ؟
از تب debug امتحان کنید ببینید
توی تب دیباگ هم گزینه setting رو بزنید این پنجره باز میشه


You can see links before reply

بعد تب flash download رو بزنید :wink:

saeidhp
31-07-2012, 01:28
ممنون مهندس مشکل حل شد توی کیل 4.5 درسته توی 4.2 اینکار انجام نمیشه
من از ST-Link دیسکاوری استفاده میکنم

alishekarriz
10-08-2012, 00:55
سلام مهندس

ممنون از توضيحات خوبي كه گذاشتي
لطف ميكني توضيح بدي كه اين تنظيماتي كه گفتي هر كدام به چه علت هست و چه راه كارهاي مشابهي داره و كدومهاش واجب هست و كدام مستحب

Doloop
10-08-2012, 05:08
سلام


ممنون از توضيحات خوبي كه گذاشتي
خواهش میکنم


لطف ميكني توضيح بدي كه اين تنظيماتي كه گفتي هر كدام به چه علت هست

قسمت اولش که مربوط به ساخت پوشه ها بود کاملا اختیاری و بر حسب سلیقه بود
یه جور دسته بندی برای فایل های مورد نیاز پروژه بود
فقط این قسمت چون توابع مورد نیاز CMSIS هست مهم بود که باید کپی میشد



این درایور ها بطور کلی شامل دوتا پوشه به نام های زیر میباشد که کافیه فقط داخل پوشه lib کپی شوند :

CMSIS
STM32F4xx_StdPeriph_Driver

بعد هدر stm32f4xx_conf.h رو هم در آدرس زیر کپی کنید

ADC\lib\CMSIS\ST\STM32F4xx\Include



اضافه کردن توابع توی گروه lib داخل پنجره project به خاطر اینه که مقدار دهی اولیه رجیستر ها و دستورات توابع CMSIS داخل این فایل ها تعریف شدن و اگه اضافه نکنیم هیچ کدوم از دستورات رو نمیشناسه




حالا باید در قسمت include paths آدرس یکسری فایل ها را فرا بخوانید
چهارتا آدرس نیازه که به شرح زیر میباشد :

ADC
(آدرس پوشه پروژه میباشد)

ADC\lib\CMSIS\Include

ADC\lib\CMSIS\ST\STM32F4xx\Include

ADC\lib\STM32F4xx_StdPeriph_Driver\inc



این قسمت هم مشکل اصلی همه هست
اینجا ما تنها آدرس تمام توابع مورد نیازه CMSIS رو میدیم و موقع کامپایل خودش تمام هدر های استفاده شده در برنامه رو توی قسمت project اضافه میکنه و البته فایل های مورد نیاز خودش رو هم از همون آدرس ها می خونه
این خیلی واجبه :wink:
فکر کنم اگه همه فایل های مورد نیاز رو خودمون ADD هم بکنیم جواب بده ولی به شخصه تست نکردم

قسمت define توی همین تب هم باید دقیقا درست پر بشه و بسته به نوع میکرو و نام میکرو تغیر میکنه یادمه آقا سعید یجا گفته بود (نوع میکرو بسته به این ویژگی تعین میشه low-, medium-, high- and XL-density)
روی این قسمت زیاد حساب نکن مموری مغزم خرابه :0013:

قسمت optimization همین تب هم روی 3 باشه بهینه ترین کد رو تولید میکنه


کلا اینطوری بگم که تنظیمات تب های utilities و debug به ترتیب مربوط به پروگرم کردن و دیباگ کردن میباشد و توی عمل کامپایل برنامه هیچ تاثیری نداره

تب target هم فقط مقدار xtal رو متناسب با کریستال متصل به میکرو انتخاب میکنیم و توی کامپایل تاثیری نداره

alishekarriz
11-08-2012, 18:36
خب بيا يه كتاب مرجع با مثال كاربردي بزن مثل بسكام 20-30 تا تجديد چاپ ميخوره ها !!

از ما گفتن
الان هر دستور رو بايد جدا جدا توي ديتا شيت بگرديم از هدر ها پيداش كنيم ..
يه كتاب بنويسي كلي دعات ميكنن

كي بيام كتاب رو بگيرم؟!lov:

alishekarriz
11-04-2013, 01:20
استاد اين آموزش آپگريد هم ميشه ؟! :mrgreen:

Doloop
11-04-2013, 01:25
نیاز داری ؟

آره چرا نشه ؟

منتظر باشید ...

spring110.sh
01-09-2013, 22:30
آقا من هرچی گشتم قسمت config کردن های این میکرو کنترلر ها رو دیدم ! اما دستورات استفاده ازونا مثل دستور adc_getconversionvalue رو درست و حسابی پیدا نکردم . تو هر مثالی یه جوری استفاده شده !!! مقدار تایمر ، وقفه تایمر و ... هرجا یه جور استفاده شدن ! ارسال اطلاعات با spi هم تقریبا همینطوره !

roohlla
01-09-2013, 22:48
به نظر من کار با ریجستر خیلی بهتر از درگیر شدن با این کتابخونست .

spring110.sh
08-09-2013, 16:33
آقا من هرچی گشتم قسمت config کردن های این میکرو کنترلر ها رو دیدم ! اما دستورات استفاده ازونا مثل دستور adc_getconversionvalue رو درست و حسابی پیدا نکردم . تو هر مثالی یه جوری استفاده شده !!! مقدار تایمر ، وقفه تایمر و ... هرجا یه جور استفاده شدن ! ارسال اطلاعات با spi هم تقریبا همینطوره !

استفاده از تایمر و وقفه رو تا حدودی راه انداختم . ولی خب هنوز یکم کار می بره که بتونم به وقفه ها مسلط بشم . مخصوصا راه اندازی چند تا وقفه . الان وقتی از چند تا وقفه استفاده می کنم ، اولویت رو هم تغییر می دم ، اما فقط وارد وقفه تایمر می شه و به وقفه های خارجی و ... محل نمی ذاره !!!

jonbakhsh
22-03-2014, 01:14
خیلی ممنون
ببخشید درایور هر ic از کجا میشه دان کرد
؟؟؟

jonbakhsh
22-03-2014, 05:04
یه نرم افزار پیدا کردم از توی سایت st برای سری stm هلووووووو :o لبووووووووو :o آدم میخاد بخورتش با کد ویزاردی که lpc داشت خیلی متفاوته
You can see links before reply
یه کد ویزارد کامله و بعدش فایلی که ایجاد میکنه با cmsis - main ..... کامله . فقط حتما java نصب کنید

You can see links before reply

Fate
03-04-2014, 03:43
سلام ، ممنون از توضیحات خوبتون
من مطابق آنچه ک شما توضیح دادید رفتم جلو ولی در نهایت target not created رو نشان میده
25 خطا داره ک همش بخاطر اینه ک هدر ها رو نمیتونه باز کنه
وقتی من فایل های c رو add میکنم ، هدر ها باهاشون add نمی شوند، در واقع مثل عکسی ک گذاشتید و فایل های c شما شاخه ای شدند ، مال من نمیشه
لطفا اگر امکانش هست ، راهنمایی کنید ک مشکل پروژه من از کجاست؟
ممنون

sadeghbakhshi
03-04-2014, 04:20
سلام
شما فایل های هدر رو به پروژتون اضافه نکردید
توی پست اول از از عکس زیر دوباره شروع کنید به خوندن
ادرس هدر فایل ها رو نوشته
با استفاده از فیلد Include Pach فایلهای هدر رو اضافه کنید

You can see links before reply
و در مورد شاخه ای شدن یا بهتره بگیم دسته بندی فایل ها با نمودار درختی روی گزینه ی نشون داده شده در عکس زیر کلیک کنید
موقع اضافه کردن فایلهای با فرمت دات سی
از فیلد وسط گزینه ی نشون داده شده رو بزنید تا یه فولدر دیگه اضافه بشه بعد بهش نام بدید و در اخر هم در فیلد سمت راست
فایلها مورد نظر رو اضافه کنید
به سادگی به همین خوشمزگی :mrgreen:
7470

Fate
05-04-2014, 01:10
سلام ، اول از همه اینو اضافه کنم ک من از میکرو stm32f103 استفاده میکنم ، و شاید نحوه ساخت پروژه اش متفاوت باشه ولی اگر متفاوت نباشه مطابق با توضیحات دوستان جلو رفتم و داخل عکسی ک گذاشتم اگر میشه نگاه کنید و راهنماییم کنید کجا رو اشتباه کردم

شما فایل های هدر رو به پروژتون اضافه نکردید
توی پست اول از از عکس زیر دوباره شروع کنید به خوندن
ادرس هدر فایل ها رو نوشته
با استفاده از فیلد Include Pach فایلهای هدر رو اضافه کنید

و در مورد شاخه ای شدن یا بهتره بگیم دسته بندی فایل ها با نمودار درختی روی گزینه ی نشون داده شده در عکس زیر کلیک کنید موقع اضافه کردن فایلهای با فرمت دات سی
و منظور من از شاخه ای شدن فایل های فرمت دات سی هست ک شاخه ای نیست و هدرها داخلشون نیست و نمی دونم چجوری اینکارو کنم ، البته داخل عکس این مورد رو نشان دادم....
ممنون بابت راهنمایی هاتون ، اگر میشه بازم راهنمایی کنید :wink:
با تشکر

7484

sadeghbakhshi
05-04-2014, 01:27
سلام ، اول از همه اینو اضافه کنم ک من از میکرو stm32f103 استفاده میکنم ، و شاید نحوه ساخت پروژه اش متفاوت باشه ولی اگر متفاوت نباشه مطابق با توضیحات دوستان جلو رفتم و داخل عکسی ک گذاشتم اگر میشه نگاه کنید و راهنماییم کنید کجا رو اشتباه کردم


و منظور من از شاخه ای شدن فایل های فرمت دات سی هست ک شاخه ای نیست و هدرها داخلشون نیست و نمی دونم چجوری اینکارو کنم ، البته داخل عکس این مورد رو نشان دادم....
ممنون بابت راهنمایی هاتون ، اگر میشه بازم راهنمایی کنید :wink:
با تشکر

7484
فرق چندانی نداره که شما با چه میکرویی کار میکنید

لطفا پروژتون رو آپلود کنید با بهتر بتونیم راهنمایی کنیم

Fate
05-04-2014, 07:54
سلام
پروژه ای ک گذاشتم ، قبلا داخل پروژه آماده ای ک داشتم امتحان کردم و ج دادم
ممنون واقعا :)

Fate
06-04-2014, 21:36
سلام
میشه توضیح بدید مشکل پروژه ای ک ساختم ،چی هست؟
ممنون

saras
23-07-2014, 07:28
من همچین مشکلی رو ندارم
شما هم ST-LINK جدا دارید یا همونی که روی بورد دیسکاوری رو میگید ؟
از تب debug امتحان کنید ببینید
توی تب دیباگ هم گزینه setting رو بزنید این پنجره باز میشه


You can see links before reply

بعد تب flash download رو بزنید :wink:

ممنون از مطالب مفیدتون فقط من نمی تونم اسم تارگت را که دیفالت هست با اسم مورد نظر خودم عوض کنم!ii998)

barghiam
23-07-2014, 11:07
با عرض سلام
نمیدونم منظورتون رو درست فهمیدم یا نه.ولی اگه می خواید اسم targetرو از جای شکل زیر عوض کنید .کافیه اون رو انتخاب و بعد کلید f2رو فشار بدید.7891

saras
23-07-2014, 23:42
با عرض سلام
نمیدونم منظورتون رو درست فهمیدم یا نه.ولی اگه می خواید اسم targetرو از جای شکل زیر عوض کنید .کافیه اون رو انتخاب و بعد کلید f2رو فشار بدید.7891

سلام و ممنون از راهنماییتون . دقیقا" منظورم همین بود و درستش کردم. یه سوال دیگه! برای هر پروژه ای باید این مراحل را انجام داد؟ یکی از پروژه های من اندازه گیری فرکانس یک موج ورودی مربعی است با استفاده از بخش capture-compare از STM32F407 و انتقال دیتا به صورت داده های 8 بیتی از طریق پورت سریال... برای هر پروژه همین فایل ها ADD می شوند یا اینکه برای هر پروژه فرق می کنه؟؟ ممنون می شم راهنمایی کنید!
:0013:

Doloop
24-07-2014, 04:55
سلام


برای هر پروژه همین فایل ها ADD می شوند یا اینکه برای هر پروژه فرق می کنه؟؟ ممنون می شم راهنمایی کنید!

برای پروژه های مختلف یه تفاوت خیلی کوچیک وجود داره اونم توی فایل هایی هست که توی قسمت Target اضافه میشن...
ولی در کل میشه یک پروژه مبنا یا پایه ساخت بعد برای هر پروژه ی جدید یه کپی ازش گرفت ... :0013:
بعد تغیرات مورد نظر رو اعمال کرد..!! تغیرات هم توی فایل های C. هست که قراره به پروژه اضافه بشه همین
مثال : من قراره یه پروژه چشمک زن بسازم ، واحد هایی که نیاز دارم GPIO , RCC , Flash , MISC هستن
ولی برای پروژه ای که قراره از Usart و Spi و Timer هم استفاده کنم طبیعتا باید کتابخونه ایناروهم به پروژه اضافه کنم ...

در کل به نظر من پروژه ی بیس ی که ساخته میشه این چهارتا واحد GPIO , RCC , Flash , MISC رو داره ... بقیه بسته به نیاز افزوده بشن :wink:

موفق باشید...

saras
24-07-2014, 11:26
سلام


برای پروژه های مختلف یه تفاوت خیلی کوچیک وجود داره اونم توی فایل هایی هست که توی قسمت Target اضافه میشن...
ولی در کل میشه یک پروژه مبنا یا پایه ساخت بعد برای هر پروژه ی جدید یه کپی ازش گرفت ... :0013:
بعد تغیرات مورد نظر رو اعمال کرد..!! تغیرات هم توی فایل های C. هست که قراره به پروژه اضافه بشه همین
مثال : من قراره یه پروژه چشمک زن بسازم ، واحد هایی که نیاز دارم GPIO , RCC , Flash , MISC هستن
ولی برای پروژه ای که قراره از Usart و Spi و Timer هم استفاده کنم طبیعتا باید کتابخونه ایناروهم به پروژه اضافه کنم ...

در کل به نظر من پروژه ی بیس ی که ساخته میشه این چهارتا واحد GPIO , RCC , Flash , MISC رو داره ... بقیه بسته به نیاز افزوده بشن :wink:

موفق باشید...

برای شروع پروژه مسیرهایی که توی کیل تعریف میکنیم با فایلی که میسازیم به عنوان پروژه از نظر اسم و روتها نباید یکی باشند؟

barghiam
26-07-2014, 13:56
با عرض سلام
بر اساس راهنمایی هاتون بنده پروژه ای از cd آموزشی رو دوباره ساختم و اجراش کردم.خوشبختانه کامپایل شد ولی بعد از debugدر قسمتperipheralزیر بخش های gpio نمیاد .میشه بگید مشکل از کجاست؟
ببخشید اگه ممکنه میفرمایید مثلا gpioaدقیقا کدوم یک از پایه هایstmf103veهست؟و بقیه رو چه طور میشه فهمید؟
یک سوال فنی هم اینکه اگه حجم فایلی که میخوام پیوست کنم زیاد باشه مثل الان؛به جای اینکه اون رو قسمت قسمت کنم.چه راهی وجود داره؟
با سپاس فراوان

rezaeee
19-07-2016, 17:58
در قسمت define این تب همیشه عبارت زیر را با حروف بزرگ تایپ کنید
USE_STDPERIPH_DRIVER,STM32F4XX
گزینه optimization را هم روی گزینه level 3 قرار دهید

You can see links before reply



سلام و تشکر بابت زحمتی که کشیدید
میخواستم چرایی این موارد رو بپرسم؟ خصوصا اون عبارت چیه و معناش چی هست؟ همچنین بعد از کلمه ی درایور کاما هست یا نقطه؟ و اگر برای میکروی دیگری میخواستیم همین کار رو کنیم فقط آخر خط که اسم میکرو هست تغییر میکرد؟ (مثلا میشد nxp1768 ؟ )

----------------------------------------

یک سوال کلی تر هم دارم
این توابع CMSIS توی تمام میکروکنترولرهایی که CMSIS رو پشتیبانی میکنند، به صورت مشابه پیاده سازی شده اند؟
یعنی مثلا فرض کنیم با تابع (تابع فرضی است)
getpinNumber();
ما در stm32 میتونیم شماره پین هایی که ۱ هستند رو بدست بیاریم. آیا عین این دستور رو میشه برای خانواده ی nxp هم اجرا کرد؟ یا نه توابع همگی با هم متفاوتن؟ یعنی مثلا در nxp این تابع بصورت
scanPins();
هست ؟

در بین یک خانواده چطور؟ یعنی بین میکروهای مختلف st یا nxp . اونجا توابع CMSIS یکسانه بین همه ؟

با سپاس

rezaeee
19-07-2016, 19:17
ببخشید یک سوالم از دوستان حرفه ای دارم
میخواستم بپرسم کسی بصورت حدودی اطلاع داره تعداد رجیسترهای میکروهای ARM چه تعداد هست (مثلا از ۵۰ تا شروع میشه تا ۲۰۰ تا بسته به مدل ... کسی چنین آماری بصورت حدودی داره؟)
منظورم رجیسترهایی مثل pinsel , pcon, pconp, apbdiv و .... هستش ... اینایی که معمولا تو برنامه نویسی استفاده میشه.
آیا به غیر از یوزر منوال های حداقل ۳۰۰ صفحه ای مربوط به هر میکرو، راه دیگه ای برای پیدا کردن این رجیستر ها بصورت جمع و جور تر هست؟

من حس میکنم کار کردن با رجیسترها یه چیزی شبیه کدنویسی به زبان اسمبلی توی کامپبوتر باشه! و کار کردن با CMSIS شبیه کار کردن با زبان C در کامپیوتر.

من واقعا درباره ی تعداد رجیسترها گیج شدم و نمیدونم چندتا هستن؟!!
میشه یه نفر یکمی دید بده بهم در این زمینه؟

پ ن: من الان رجیسترهای سری 213X رو شمردم. حدود ۱۹۰ تا رجیستر داره!! حالا چنتاش بیشتر به کار برنامه نویسی میاد و باید بهش مسلط بود خدا میدونه! احتمالا مال سری های پیشرفته تر (مثل 17XX ) باید از اینم بیشتر باشه! حتی شاید دو برابر!!

البته ببخشید اینجا بحث ST هست و من مثال هام همش از nxp :(