در قسمت چهارم از مجموعه آموزشی میکروکنترلر STM8 سیسوگ نحوه کار با نرمافزار کاربردی STM8CubeMX را آموزش داد. حال، قبل از شروع برنامه نویسی برای میکروکنترلر STM8 به یک سری اطلاعات نیاز داریم که با همراهی سیسوگ این اطلاعات را میتوانید بدست آورید. همچنین با کتابخانه استاندارد SPL و محیط نرمافزاری STVD آشنا میشوید:
STM8 Reference Manual
دیتاشیت (MCU (STM8S003 که از آن استفاده میکنیم.
اینها اطلاعاتی هستند که در طول دوره یادگیری به آنها نیاز داریم. Reference Manual ها همه جا مورد استفاده هستند و جزئیات بلوکهای سخت افزاری را در اختیار قرار میدهند، که شامل توضیحات رجیستری، نامگذاری، حالت عملکرد سختافزار و غیره است. که این مرجع برای تمام میکروهای STM8S و STM8AF تهیه شده است و تنها یک STM8 مشخص را بیان نمیکند. همانطور که میدانید در خانوادهای از میکروها، هر MCU با MCU های دیگر متفاوت است. بیشتر این اختلافها به ظرفیت حافظه و تعداد پینها برمیگردد. گاهی اوقات مشخصات الکتریکی نیز متفاوت است و برای بدست آوردن مشخصات کلی MCU مورد نظر باید به دیتاشیت آن مراجعه کنیم. در نهایت راهنمای کاربر Discovery board برای تخصیص پینها و طرحهای سختافزاری مناسب است که پیشنهاد میکنم از این الگو استفاده کنید.
حال، با نصب برنامههای Cosmic، STVD و STVP ابزارهای نرمافزاری ما آماده هستند. دو روش برای پروگرام کردن STM8 وجود دارد. اولین روش استفاده از روشهای سنتی برای برنامهنویسی است. روش دوم، استفاده از روشهای متداول برنامهنویسی با استفاده از کتابخانههای استاندارد توسعه یافته توسط STM است که همگانی هستند. بدین معنی که کد نوشته به زبان C برای هر کامپایلری که از این کتابخانهها استفاده میکند بدون اینکه نیازی به تغییر ،مورد استفاده است. این کتابخانهها ” کتابخانههای استاندارد محیطی”(Standard Peripheral Libraries (SPL” نامیده میشوند. با استفاده از این کتابخانهها دیگر نیازی به تعریف سطوح اولیه برنامهنویسی نیست. کتابخانهها به گونهای برنامهنویسی شدهاند که تنها لازم است برنامهنویس مشخصات سختافزاری تراشهها و برخی از اصول این سختافزارها را بداند. در قسمت برنامهنویسی تنها کافی است برنامهنویس خواص و مقادیر مورد نظر را تنظیم نماید. SPL بقیه موارد را مدیریت میکند. به عنوان مثال، هنگام تنظیم UART ، تنها نیاز به تنظیم وقفهها، ویژگیهای I/O و ویژگیهای UART مانند سرعت بوت (baud rate)، توازن و … است. همه این تنظیمات با اعداد و متون معنیدار انجام می شود.
کتابخانههای استاندارد محیطی (SPL) را برای میکروکنترلرهای STM میتوانید از اینجا دانلود کنید.
در این مقاله از SPL استفاده شده است زیرا برای STM8s استفاده از روشهای قدیمی برای پیکربندی به صورت دستی چندان مناسب نیست. بنابراین، دانلود فایل بالا الزامی است. باید فایل زیپ SPL دانلود شده را نگهداری کنید تا در زمانی که همه چیز خراب شد بتوانید از آن استفاده کنید.
دو پوشه به نامهای “inc” و “src” ایجاد کنید. پوشه “inc” با تمام فایلهای هدر (فایل های با پسوند “.h”) که از فایل زیپ استخراج میشوند پر میشود. بطور مشابه، گوشه “src” با فایلهای سورس (فایلهایی با پسوند “.c”) پر میشود. برای راحتی بیشتر، بهتر است این پوشهها را به صورت فایل زیپ نگهداری کنید زیرا هربار که پروژه جدیدی ایجاد کنیم به فایلهای این پوشهها نیاز دارید. شما میتوانید این فایلها را در پوشه پروژه خود کپی کنید و یا میتوانید آن را بطور مرکزی در جایی نگهداری کنید. من ترجیح میدهم از روش اول استفاده کنم و هیچ مشکلی برای سایر پروژههایی که نیازی به تغییر ندارند پیش نمیآید. تنها بخشی از فضای هارد دیسک را هزینه میکنید ولی این روش برای مبتدیان کمتر گیج کننده و بدون دردسر است. تمامی فایلها را به صورت زیر استخراج نمایید:
همانطور که میبینید تعداد فایلهای هدر از فایلهای سورس بیشتر است. به این دلیل که دوتا فایل هدر stm8s.h و stm8s_conf.h که نوع پردازنده وخواص پردازنده را مشخص میکند اضافه شدهاند. برای راهاندازی stm8s_conf.h باید خط زیر را در فایل آن کامنت و یا غیر فعال نمایید، در غیر این صورت کامپایلر برای شما پیغام خطا نمایش میدهد. همیشه در ابتدای پروژهها این را خط را چک کنید.
1 | #define USE_FULL_ASSERT (1) |
با فرض اینکه STVD، STVP و Cosmic به درستی نصب شده باشند، خواهیم دید که چگونه یک پروژه جدید ایجاد کنیم.
C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8
نکته: وارد کردن کتابخانههای مشخص شده در اینجا برای شما کافی است و اگر در فایل دانلود کتابخانههای دیگری وجود دارد لزومی به اضافه کردن آنها نیست.
کد را یکبار با استفاده از کلیدهای CTRL + F7 یا با فشار دادن دکمه “compile” کامپایل کنید. اگر همه چیز درست باشد، هیچ خطایی یا پیام هشدار وجود ندارد. دلیل این کامپایل کردن این است که از ویژگی قدرتمند کد کننده کامپایلر استفاده کنید. با استفاده از این ویژگی، میتوانید فقط با نوشتن چند حرف اول و سپس با استفاده از فشردن همزمان کلیدهای CTRL + SPACE کد را پیشبینی یا تکمیل کنید.
در طول نوشتن برنامه در محیط نرمافزاری STVD، شما ممکن است تعداد زیادی خطا برای فایلهای سختافزاری که در میکروکنترلر STM8S مورد نظر شما در دسترس نیستند، دریافت کنید. به عنوان مثال، سختافزار CAN در STM8S003F3 در دسترس نیست و بنابراین اگر شما فایل های CAN سورس و هدر اضافه کرده باشید خطایی برای آن دریافت خواهید کرد. پس از شناسایی پیامهای خطا، فایلهای هدر و فایل سورس مربوطه برای آن سختافزار خاص باید حذف شوند.
یک رویکرد عاقلانه برای جلوگیری از این مسئله این است که دیتا شیت میکروکنترلر مورد نظر خود را مطالعه نمایید و در مورد سخت افزارهای درون آن اطلاعات کسب کنید. همانطور که در زیر دیده میشود، بخش محتوای دادهای درون دیتا شیت این موضوع را نشان می دهد:
از STM8CubeMX هم می توان برای بدست آوردن اطلاعات سختافزاری میکروکنترلر استفاده کرد، اما همانطور که قبلاً هم مطرح شد برخی از لوازم جانبی سختافزاری که ورودی-خروجی ندارند در آن دیده نمی شوند.
به طور مشابه، اگر کد شما از وقفه استفاده نمیکند، فایلهای سورس و هدر وقفه (stm8s_it.h و stm8s_it.c) باید از محیط STVD حذف شوند. گاهی بهتر است فقط آن فایلهایی را که برای تکمیل یک پروژه نیاز دارید اضافه کنید. به عنوان مثال، اگر پروژه شما فقط از GPIO ها استفاده میکند، بهتر است تنها فایلهای GPIO سورس و هدر ( stm8s.h و stm8s_conf.h) اضافه شوند. البته من این روش را تنها برای کسانی که با برنامه نویسی STM8 به خوبی آشنایی دارند توصیه میکنم زیرا در اکثر موارد شما به سختافزارهایی نیاز دارید که به یکدیگر وابسته هستند. به عنوان مثال، هنگامی که از SPI استفاده میکنید، به هر دو ماژول GPIO و SPI نیاز دارید. اگر شما این وابستگیها را درک میکنید، میتوانید تنها فایلهای مورد نیاز را اضافه کنید. شما میتوانید ماژولهای سختافزاری غیرضروری را در فایل هدر stm8s_conf.h کامنت کنید تا فرآیند کامپایلر را سرعت ببخشید. (البته یک سری تعریف structure اضافی هم داخل stm8s.h باقی میماند که نیازی نیست وقتتان را برای کامنت کردن آن ها بگذارید.) پس از نوشتن برنامه، همیشه باید با کلیک بر روی دکمه build/rebuild، پروژه خود را بسازید و یا بازسازی کنید. با این کار فایل خروجی نهایی S19 در هر دو پوشه Debug یا Release با توجه به حالت انتخاب شده تولید میشود. اگر همه چیز مرتب باشد، هیچ خطایی یا پیام هشداری وجود ندارد.
در نهایت، من هیچ نرم افزار شبیهسازی مفیدی مانند Proteus VSM یا Electronic Workbench که از خانواده میکروکنترلر STM8 پشتیبانی کند پیدا نکردهام. بنابراین، ما باید کد خود را با سختافزار واقعی امتحان کنیم. این ممکن است دشوار باشد اما در واقع اینطور نیست.ما میتوانیم از چنین نرمافزارهایی برای ساخت مدل های STM8 استفاده کنیم و PCB ها را تولید کنیم. از آنجا که شبیهسازیها چندان دقیق و واقعی نیستند، شخصاً آنها را دوست ندارم.
یک توصیه دیگر که مایلم به خوانندگان سیسوگ بدهم. لطفاً فایل راهنما SPL را مطالعه کنید این فایل در فایل زیپ شده SPL تحت نام stm8s-a_stdperiph_lib_um.chm قرار دارد. در آن هر تابع، تعریف، ساختار داده، تمام ماژولهای سختافزاری داخلی و نحوه استفاده از آنها به درستی توضیح داده شده است. این یک فایل اطلاعاتی بسیار مهم و بهترین دوست شما در برنامه نویسی میکروکنترلر STM8 است. کتاب مرجع نیز به اندازه همین فایل مهم است و قابلیتهای تمام سختافزار داخلی را مشخص میکند.
در قسمت ششم آموزشهای سیسوگ قصد داریم نحوه آپلود کردن برنامه روی STM8 را آموزش دهیم. با سیسوگ همراه باشید.
مطالب مرتبط
سلام وقتتون بخیر
من موقع کامپایل کردن به این ارور برمیخورم:
Compiling main.c…
cxstm8 +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8″ -clDebug\ -coDebug\ main.c
#error cpstm8 C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8\mods0.h:1 FlexLM Invalid host.
main.c:
The command: “cxstm8 +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8″ -clDebug\ -coDebug\ main.c ” has failed, the returned value is: 1
exit code=1.
main.o – 3 error(s), 0 warning(s)
همه آدرسای پیش فرض رو انتخاب کردم ولی هنوز هم این ارور رو میده که انگار کامپایلر رو پیدا نمیکنه
میشه کمکم کنید؟
سلام
با تشکر از سایت ارزشمندتون که بسیار با سخاوت به آموختن مطالب جدید می پردازید. خواستم یه راهنمایی کلی داشته باشید که آیا کتابخانه هایی که برای stm8s وجود داره برای سری Stm8L هم قابل استفاده هست ؟
سلام حمید. بله میشه استفاده کرد.
سلام
خواستم یه راهنمایی کلی داشته باشید که آیا کتابخانه هایی که برای stm8s وجود داره برای سری Stm8L هم قابل استفاده هست ؟
سلام
فکر میکنم سری s و a کتابخانه های یکسان داشته باشن و سری L کتابخانه های متفاوتی داشته باشه
از داخل مثالهاش کپی کردم،ممنون
سلام ممنون از آموزش های خوبتون
یه سوال داشتم، کتابخونه spl رو از لینکی که فرمودید دانلود کردم اما فایل stm8s_conf.h در پوشه هدر نیست
سلام ممنون از آموزش بیار خوب و کاربردیتون
برای من هم stm8s_conf.h موجود نیست و خطا میده
ممنون میشم راهنمایی کنید
سلام دوستن عزیز من کتابخانه رو دریافت کردم و فایل stm8s_conf.h داخل فایل ها موجود بود 😐
آقا مشکل حل شد
از گیت هاب دانلود کردم
سلام
منظور من برای سری L بود که از لینک زیر در قابل دانلود هست.
متاسفانه این فایل موجود نیست و کار من قفل شده!
https://www.st.com/content/my_st_com/en/products/embedded-software/mcu-mpu-embedded-software/stm8-embedded-software/stsw-stm8016.license=1637850782198.product=STSW-STM8016.version=1.6.2.html
خیلی ممنون از مطالب مفیدتون
خواهش میکنم دوست عزیز
سلام ممنون از شما
من هنگامی که کد رو پروگرام میکنم رو میکرو هیچ کاری برام انجام نمیده
از تو اینترنت هم چند تا کد پیدا کردم ولی باز هم اتفاقی نیافتاد
با کامپایلر IAR تست کردم و شد البته یه بار باید برق رو کامل قطع کنم و دوباره وصل کنم تا شروع به کار کند ولی با STVD نشد ممنون میشم اگه راهنمایی کنین
سلام دوست عزیز. شما وقتی میکرو رو پروگرام میکنید باید یک بار آن را ریست کنید تا برنامه اجرا شود. این کار به صورت نرمافزاری هم قابل انجام است. این موردی که شما برق را قطع و وصل میکنید به احتمال زیاد همان عمل ریست انجام میشود که برنامه شروع به اجرا شدن میکند. اگر بر روی بردتان برای ریست کلیدی در نظر گرفته شده است، پس از پروگرام یک بار این دکمه را فشار بدهید تا برنامه اجرا بشود.
توی اینترنت هم گشتم ی جا زده بود از قدیمی بودن نسخه نرم افزاره ولی اونم نصب کردم بازم نشد
سلام بعد از نصب و انجام مراحل با زدن ctrl+f7 ارور زیر رو میده
———– Project test1 – STM8 Cosmic – Configuration Debug ————-
Compiling main.c…
cxstm8 -i”e:\stm tst\lib\inc” +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8″ -clDebug\ -coDebug\ main.c
#error cpstm8 C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8\mods0.h:1 FlexLM No such feature exists.
main.c:
The command: “cxstm8 -i”e:\stm tst\lib\inc” +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8″ -clDebug\ -coDebug\ main.c ” has failed, the returned value is: 1
exit code=1.
main.o – 3 error(s), 0 warning(s)
کلا اعصابمو خورد کرده لطفا کمک کنید
احتمال خیلی زیاد شما کمپایلر را رجیستر نکردید. مقاله های قبلی را مطالعه و بعد از دریافت لایسنس آن را در نرم افزار ثبت کنید.
یکی از پروژه های مثال ما یه خود st رو باز کنید ببینید مشکل همچنان هست ؟
سلام
خیلی ممنون بابت مطالب مفیدتون، چه این مطلب چه بقیه ی مطالب این دوره و مطالب دیگه سایت. خدا قوت.
یه نکته هم در مورد این مطلب این که برای حذف ماژولهای سختافزاری غیرضروری؛ مواردی که نیاز نیست در فایل هدر stm8s_conf.h باید کامنت بشن (نه stm8s.h؛ البته یه سری تعریف structure اضافی هم داخل stm8s.h باقی میمونه که به زحمت کامنت کردنش نمی ارزه!!)
باز هم تشکر میکنم و امیدوارم روز به روز پیشرفت کنین 🙂
سلام ممنونم
در واقع هدف ما اینه که دور هم چیزای جدید یاد بگیریم 🙂
ممنونم برای توضیحتون – مطلب رو اصلاح میکنیم
سلام وقت
مطابق آموزش همین صفحه جلو میرم. پروژه بدون خطا کامپایل میشه. برای build کردن که اقدام میکنم خطای زیر رو میده . امکانش هست راهنمایی بفرمایید مشکل چیه ؟ ممنون
———– Project mahdi_pro – STM8 Cosmic – Configuration Debug ————-
Compiling source\src\stm8s_adc1.c…
cxstm8 -isource -isource\inc -isource\src +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\Hstm8″ -clDebug\ -coDebug\ source\src\stm8s_adc1.c
source\src\stm8s_adc1.c:
Compiling source\src\stm8s_adc2.c…
cxstm8 -isource -isource\inc -isource\src +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\Hstm8″ -clDebug\ -coDebug\ source\src\stm8s_adc2.c
#error cpstm8 source\src\stm8s_adc2.c:56(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:57(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:58(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:59(8+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:60(8+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:56(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:60(15+21) ADC2_TDRL_RESET_VALUE undefined
#error cpstm8 source\src\stm8s_adc2.c:59(15+21) ADC2_TDRH_RESET_VALUE undefined
#error cpstm8 source\src\stm8s_adc2.c:58(15+20) ADC2_CR2_RESET_VALUE undefined
#error cpstm8 source\src\stm8s_adc2.c:57(15+20) ADC2_CR1_RESET_VALUE undefined
#error cpstm8 source\src\stm8s_adc2.c:56(15+20) ADC2_CSR_RESET_VALUE undefined
#error cpstm8 source\src\stm8s_adc2.c:113(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:113(15+13) ADC2_CR1_ADON undefined
#error cpstm8 source\src\stm8s_adc2.c:113(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:128(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:132(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:128(17+13) ADC2_CR1_ADON undefined
#error cpstm8 source\src\stm8s_adc2.c:128(4+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:132(28+13) ADC2_CR1_ADON undefined
#error cpstm8 source\src\stm8s_adc2.c:132(4+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:149(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:154(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:154(42) const assignment
#error cpstm8 source\src\stm8s_adc2.c:149(26+14) ADC2_CSR_EOCIE undefined
#error cpstm8 source\src\stm8s_adc2.c:149(4+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:154(28+14) ADC2_CSR_EOCIE undefined
#error cpstm8 source\src\stm8s_adc2.c:154(4+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:170(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:172(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:170(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:170(26+14) ADC2_CR1_SPSEL undefined
#error cpstm8 source\src\stm8s_adc2.c:193(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:194(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:194(29+3) const assignment
#error cpstm8 source\src\stm8s_adc2.c:198(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:199(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:206(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:210(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:210(82) const assignment
#error cpstm8 source\src\stm8s_adc2.c:217(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:221(12+4) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:193(6+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:198(6+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:206(6+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:210(6+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:217(6+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:221(6+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:244(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:246(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:251(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:256(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:256(41) const assignment
#error cpstm8 source\src\stm8s_adc2.c:260(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:262(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:244(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:260(26+11) ADC2_CSR_CH undefined
#error cpstm8 source\src\stm8s_adc2.c:244(26+14) ADC2_CR2_ALIGN undefined
#error cpstm8 source\src\stm8s_adc2.c:251(17+13) ADC2_CR1_CONT undefined
#error cpstm8 source\src\stm8s_adc2.c:256(28+13) ADC2_CR1_CONT undefined
#error cpstm8 source\src\stm8s_adc2.c:282(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:287(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:287(43) const assignment
#error cpstm8 source\src\stm8s_adc2.c:292(10+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:296(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:282(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:282(26+15) ADC2_CR2_EXTSEL undefined
#error cpstm8 source\src\stm8s_adc2.c:287(27+16) ADC2_CR2_EXTTRIG undefined
#error cpstm8 source\src\stm8s_adc2.c:292(28+16) ADC2_CR2_EXTTRIG undefined
#error cpstm8 source\src\stm8s_adc2.c:310(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:310(15+13) ADC2_CR1_ADON undefined
#error cpstm8 source\src\stm8s_adc2.c:310(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:325(13+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:328(18+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:330(18+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:337(18+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:339(18+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:325(7+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:325(19+14) ADC2_CR2_ALIGN undefined
#error cpstm8 source\src\stm8s_adc2.c:355(28+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:355(34+12) ADC2_CSR_EOC undefined
#error cpstm8 source\src\stm8s_adc2.c:355(22+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:365(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:365(38) const assignment
#error cpstm8 source\src\stm8s_adc2.c:365(26+12) ADC2_CSR_EOC undefined
#error cpstm8 source\src\stm8s_adc2.c:365(2+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:376(26+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:376(32+12) ADC2_CSR_EOC undefined
#error cpstm8 source\src\stm8s_adc2.c:376(20+4) ADC2 undefined
#error cpstm8 source\src\stm8s_adc2.c:386(8+3) bad struct/union operand
#error cpstm8 source\src\stm8s_adc2.c:386(38) const assignment
#error cpstm8 source\src\stm8s_adc2.c:386(26+12) ADC2_CSR_EOC undefined
#error cpstm8 source\src\stm8s_adc2.c:386(2+4) ADC2 undefined
source\src\stm8s_adc2.c:
The command: “cxstm8 -isource -isource\inc -isource\src +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\Hstm8″ -clDebug\ -coDebug\ source\src\stm8s_adc2.c ” has failed, the returned value is: 1
exit code=1.
mahdi_pro.elf – 94 error(s), 0 warning(s)
یه سری ثابت ها هست که میگه اونا رو پیدا نمکنه و داره لیستشون میکنه براتون :/
سلام لطفا لینک قسمت ششم را در انتهای مقاله اصلاح کنید . قسمت 5 را باز می کند.
ممنونم دوست عزیز برای دقت شما – اصلاح شد لینک
با عرض سلام و خسته نباشید
تشکر میکنم بخاطر پاسختون
میشه یه مقدارم لطف کنید بفرمائید که چطور فایل و از حالت کامنت در بیارم
فکر کنم اشتباه خط با فایل اشتباه شده – حق با شماست – اون خط از فایل رو باید از کامنت خارج کنید
خارج کردن فایل از کامنت توی این ادیتور معنی نمیده (توی برخی ادیتورها معنی میده البته) !!
سلام و ارزوی موفقیت
دیدم زحمت کشیدید مطالب اموزشی مفیدی رو در اختیار هم وطن هاتون گذاشتید
دور از ادب دونستم که تشکر نکنم
علی یارتون
ممنونم دوست عزیز برای نظر امید بخشتون 🙂
با سلام و عرض ادب و تشکر از فایل آموزشی با ارزشتون
میشه این قسمت و بیشتر توضیح بفمائید.
(باید فایل هدر h را ویرایش نمایید و همانطور که در زیر نشان داده شده است، نام میکروکنترلر مورد استفاده تان را از حالت کامنت خارج نمایید.)
سپاس
سلام و درود دوست عزیز
منظور اینه که فایل stm8s.h را باز کنید بعد با توجه به میکروکنترلر که قراره کد رو برای اون کامپایل کنید – خط مورد نظر رو از کامنت خارج کنید. مثلا در این مثال ما خط ۴۹ از فایل رو از کامنت خارج کردیم برای میکروکنترلر stm8s003
سلام ممنون از آموزش روان و ساده و در حین عالی
من نصب رو انجام دادم اما به ارور
error clnk Debug\dd.lkf:1 symbol _main not defined (C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Lib\crtsi0.sm8 )
The command: “clnk -m Debug\dd.map -l”C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Lib” -o Debug\dd.sm8 Debug\dd.lkf ” has failed, the returned value is: 1
exit code=1.
بر خوردم ممنون میشم راهنمایی بفرمایید
سلام فکر کنم توی فایل main.c این کد ها رو اضافه کنین درست می شه
#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(u8* file, u32 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
سلام درست شد. ممنون.
سلام خسته نباشید.
من طبق آموزش همه تنظیمات رو انجام دادم . موقع کامپایل این خطا رو میده
error cpstm8 C:\Program Files\COSMIC\FSE_Compilers\CXSTM8\Hstm8\mods0.h:1
FlexLM System clock has been set back.
exit code=1.
c02.elf – 2 error(s), 0 warning(s)
میشه راهنمایی کنید؟
#error cpstm8 C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8\mods0.h:1 FlexLM Cannot find license file.
main.c:
The command: “cxstm8 -iinc +debug -pxp -no -l +mods0 -pp -i”C:\Program Files (x86)\COSMIC\FSE_Compilers\CXSTM8\Hstm8″ -clDebug\ -coDebug\ main.c ” has failed, the returned value is: 1
exit code=1.
برای رفع این ایراد چه باید بکنم
سلام دوست عزیز
دقیقا نمیدونم چه ربطی داره ولی خطایی که دارید دریافت میکنید برای تنظیم نبودن ساعت سیستم است 😐
شاید سیستم لایسنسینگ نیاز به زمان درست داره که با سرور سینک بشه :/
سلام و عرض ادب
کتابخانه SPL رو نمیشه دانلود کرد چونخود سایت غیر فعالش کرده Not available for download
اگه دارین میشه آپلودش کنین؟
سلام دوست عزیز
ممنون از اطلاعی که دادین. لینک دانلود جدید توی متن اضافه شد.
سلام دوست عزیز به علت تحریم اجازه دانلود نمیده با فیلترشکن وارید بشید مشکلی نداره
سلام دستتون درد نکنه __مطالب عالی __اما فکر کنم قسمت نصب و اکتیو کردن رو یا درست انجام ندادم یا مطالب تون کمی نقص داره __ چون توی گزینه های file به من یک new خالی نشون میده و new workspce را ندارم من
سلام. دوست عزیز شما چه ورژنی را نصب کردین؟
من کلا بیخیال آموزش های شما شدم ترجیح میدهم از آموزش دیگری که اینجا نام نمیبرم استفاده کنم _ حداقل براساس IAR هست و آموزش دهنده تلفنی _ ایمیلی _ پیامکی _ تلگرام و حتی دایرکت اینستا جوابگو هست __ فکر میکنم آخرش باید هزینه کنم _ ایرادهای آموزش های رایگان شبیه هم هستند و همیشه دارای نواقص جدی ای هستند _ متشکر از وقتی که گذاشتین .
دوست عزیز فعال سازی باید توی Cosmic انجام بشه نه توی STVD.
گزینه new workspace مربوط به نرم افزار STVD هست. فک کنم شما توی Cosmic نگاه میکردین و توضیحات شما برای گزینه new مربوط به Cosmic کمیشه. در حالیکه باید توی STVD از گزینه new workspace پروژه جدید بسازید.
موفق باشید
سلام _ گاهی باید شهامت داشت و به سوتی هایی هرچندبزرگ که میدیم اعتراف کنیم __ ابتدا معذرت _ سپس بگم که من تا همین الان داشتم COSMIC را باز میکردم و دنبال FILE و NEW WORKSPACE میگشتم_ __ بله باید اعتراف کنم من اشتباه و سهوا بجای باز کردن STVD همش COSMIC را باز میکردم و الان فهمیدم _ گاهی آنقدر فشار و استرس زیاد میشه که کلمات به اون درشتی را آدم نمی بینه _ باز هم میگم پوزش بنده رو پذیرا باشین _ باتشکر
سلام خواهش میکنم
گاهی این اشتباهات پیش میاد. خوشحالم که مشکلتون بر طرف شد.
موفق باشید.
دوست عزیز زود قضاوت نکنید ؛ شمایی که توی موارد اولیه مثل نصب یک نرم افزار ساده مشکل دارید ؛ بله فکر میکنم بهتره هزینه کنید ؛ اینطور سریعتر به جواب خواهید رسید ؛ این آموزش بارها توسط افراد مختلف تست و استفاده شده و مشکلی درش وجود نداشته ؛ خودم منم همین مسیر رو طی کردم و مشکلی ندیدم ؛
به هر حال ؛ من در صحت این آموزش هیچ شکی ندارم و مطمئنم که درست هست ؛ خوشحال میشم اگر بتونیم مساله شما رو حل کنیم ولی اگر خودتون تمایل نداشته باشید قطعا کاری از دست ما بر نمیآد ، براتون آرزوی موفقیت میکنم.
شاید آموزش زیر بدردتون بخوره
stm8 در ایکلیپس
ورژن 9.1.7
من از ورژن 4.3.12 استفاده کردم سال 2017
موضوعی که شما بهش اشاره کردین به دلیل اختلاف ورژن هاست و مشکلی در آموزش وجود نداره.
موفق باشید.
عزیزجانم ، من این نرم افزار را به همراه STVP و COSMIC دانلود کرده ام و همه موارد رو طبق موارد گفته شده در آموزش پیش رفته ام ___ چ اصراری دارین براین موارد ابتدایی !!!!!
سلام. دستتون درد نکنه…
من نمیتونم فایل stm8s.h رو ویرایش کنم…اصلا امکان ویرایش وجود نداره……
فایل رو از حال رید اونلی read only خارج کنید به قسم پروپرتیس فایل مراجعه کنید
سلام دوست عزیز
فایل stm8s.h رو با NotePad باز کنین و آنجا ویرایش را انجام بدید بعد فایل ویرایش شده را فراخوانی کنین.
سلام وتشکر از شما
من STM8 را با سایت شما شروع کردم و این آموزش را دنبال می کنم.
در حال انجام یک پروژه هستم که نیاز به تعریف متغیر در حافظه EEPROM و همچنین متغیر نوع const در حافظه فلش هست. لطفا در این مورد هم آموزش ارائه دهید.
سپاس
سلام دوست عزیز ، فکر میکنم برای تعریف متغیر توی حافظه فلش فقط کافی باشه که واژه const رو به ابتدای اون اضافه کنید.
احتمالا در قسمت های اینده به موضوع eeprom نیز پرداخته بشه.
نویسنده شو !
سیسوگ با افتخار فضایی برای اشتراک گذاری دانش شماست. برای ما مقاله بنویسید.