با توجه به افزایش قیمت میکروکنترلرهای شرکت ST , تولید کنندگان میکروکنترلرهای شبیه STM هم این روزها معروفیت مناسبی پیدا کرده اند دو تا از مهمترین اونها شرکت Nanjing Qinheng Microelectronics Coهست که میکروکنترلرهای این شرکت را با پیشوند CH میتوان شناخت و شرکت GigaDevice میباشد که با پیشوند GD مشغول تولید هستند. دوست عزیز مقاله زیر را که شامل مقایسه و استفاده دو مدل از این میکروها میباشد را برای ما ارسال نموده اند که با توجه به عمومیت استفاده حتما میتونه مفید باشه.
با سلام، محمدرضا ادیب هستم. در این آموزش قصد دارم نحوه کار با تراشه CH32F103C8T6 را که به جای تراشه STM32F103C8T6 روی برخی از بردهای بلوپیل قرار گرفته است را به طور مختصر توضیح بدم.
با توجه به اینکه خودم فایلها و اطلاعات مربوط به این تراشه رو در اینترنت به راحتی پیدا نکردم، برای همین تصمیم به ایجاد یک آموزش مختصر گرفتم. در ابتدا باید بگم با توجه به توضیحات پست “از گرانی میکروکنترلر STM32 تا میکروکنترلرهای تقلبی!” باید گفت این تراشه تقلبی نیست و به نوعی مشابه تراشه STM32f103c8t6 است. بعد از مدتی استفاده و برنامهریزی روی این تراشه با مشکلی مواجه نشدهام پس شاید بشه گفت این تراشه ساخت شرکت WCH نسبت به تراشههای فیک که بعضاً درست کار نمیکنن بهتر است و با توجه به تحقیقاتی که داشتم هدف کاهش هزینه و برخی بهبودها بوده است.
تراشه CH32F103C8T6
برد بلوپیل حاوی تراشه CH32F103C8T6 دقیقاً مانند مدل متداول هست و با یک کریستال 12 مگاهرتزی و با کیفیت خوبی عرضه شده (حداقل موردی که من دارم با کیفیت هست) همونطور که در شکل زیر میبینید، از لحاظ ظاهری تفاوتی با مدل اصلی ندارد و تراشه اون هم به صورت زیر است:
از این موارد که بگذریم، این تراشه برای اینکه بتونیم به کمک نرم افزار Keil برنامهریزی کنیم لازم هست که تراشه به نرمافزار شناسانده بشه و این کار از طریق فایلی با نام Keil.WCH32F1xx_DFP.1.0.1.pack صورت میگیرد که در انتهای مطلب لینک دانلود این پک به همراه چند سری مثال آماده و برخی اطلاعات دیگر قرار داده شده است. بعد از دانلود این فایل ضمیمه، وارد پوشه PUB شوید و Keil.WCH32F1xx_DFP.1.0.1.pack را اجرا کنید. بعد از اجرا با پنجره زیر مواجه میشوید.
با زدن Next، نصب به سرعت و راحتی انجام میگیرد و صفحه زیر به نمایش درمیآید.
همه چیز آسون بود نه؟
ولی یک مقدار دیگر هم کار هست. بعد از استفاده از نرم افزار CubeMX و تنظیماتی که در آموزشهای همین سایت قرار دارد کافیست برای مثال چند پایه را به عنوان ورودی و خروجی تعریف کنید تا برنامهای برای تست اجرا کنیم.
تنظیمات اولیه را مطابق آموزش “STM32 با توابع LL قسمت چهارم: RCC (کنترل ریست و کلاک)” انجام دهید و مانند شکل زیر 4 پایه را به عنوان خروجی و 2 پایه را به عنوان ورودی تعریف کنید. هدف در این برنامه تست این است که با فشردن یک کلید تعداد چراغهای روشن زیاد و با فشردن کلید دیگر تعداد چراغهای روشن کم شود.
البته برای راحتی کار فایل این برنامه نیز در بخش انتهای مطلب قرار داده شده است.
بعد از انجام این تنظیمات گزینه generate code را میزنیم و نرمافزار Keil را باز میکنیم. در صورت مشاهده پیغام گزینه YES را انتخاب کنید. سپس در پنجرهای که باز میشود اسم تراشه ساخت شرکت WCH را مطابق شکل زیر وارد کنید.
همانطور که ملاحظه میکنید تراشه CH32F103C8T6 توسط Keil شناسایی شده است و میتوانید به راحتی آن را برنامهریزی کنید.
ممکن است در هربار آپدیت کردن توسط CubeMX نیاز باشد مطابق شکل بالا تراشه را دوباره انتخاب کنید و گاهی نیز ممکن است نوع پروگرامر نیز تغییر کند که مانند شکل زیر میتوانید با کلیک بر روی option target پنجرهی زیر را باز کرده و پروگرامر خود را انتخاب کنید.
حال به سراغ برنامهای که برای این بخش نوشتهام میرویم. طبیعیست که راههای مختلفی برای اجرای این کار وجود دارد اما من سادهترین روش که مطابق با آموزشهای سایت برای STM32 با کتابخانه LL هست را مورد استفاده قرار دادم.
int i = 1; uint8_t LED[5] = {0x00,0x02,0x06,0x0E,0x1E}; while (1) { LL_GPIO_WriteOutputPort(GPIOA,LED[i]); if(LL_GPIO_ReadInputPort(GPIOB) & (1<<5)) { i++; if(i>=4) i=4; LL_mDelay(550); } if(LL_GPIO_ReadInputPort(GPIOB) & (1<<6)) { i--; if(i<=0) i=0; LL_mDelay(550); } }
به کمک uint8_t LED[5] میتوان ترتیب روشن شدن چراغها را مشخص کرد که اگر به کمک ماشین حساب آن را به باینری تبدیل کنید ترتیب آنها را به خوبی میبینید.
به کمک دستور LL_GPIO_WriteOutputPort(GPIOA,LED[i]) میتوان مقادیر پایههای یک پورت را به صورت همزمان مقداردهی کرد.
با توجه به اینکه مقادیر پایهها را به صورت تکی نمیتوان خواند، در ادامه کل مقدار پورت B را میخوانیم و مقدار آن را با پایهای که وضعیت آن را میخواهیم AND میکنیم تا سایر پینها صفر باشد و بتوان عمل مقایسه را صورت داد. در اینجا 2 کلید به پایههای PB6 و PB5 متصل هستند پس مقدار این پورت را یکبار با 1<<5 و یکبار با 1<<6 AND میکنیم تا مقدار i کم و زیاد شود و به دنبال آن مقادیر متناظر در LED[5] درون رجیسترهای پورت ثبت شود.
در زیر مدار این پروژه کوچک را نیز ملاحظه میکنید.(دکمهای که به صورت تک هست به پایه ریست وصل شده)
دانلود فایلهای ضمیمه
لینک دانلود
دانلود – حجم 3 مگابایتاسم فایل: CH32F103EVT.ZIP
منبع:سیسوگ