STM32F103 مقابل GD32F103: البديل المتوافق مع الأطراف
مقارنة STM32F103 وGD32F103: قارن بدائل MCU المتوافقة من حيث النواة، التردد، خريطة السجلات، والمحيطيات، ومتطلبات نقل البرامج الثابتة للاستبدال.
تعد المقارنة بين STM32F103 و GD32F103 هي المقارنة الجوهرية في سوق البدائل المحلية، لأن GD32F103 هي المحاولة الأكثر شهرة لإعادة إنتاج STM32F103، وهو أحد أكثر المتحكمات الدقيقة (microcontrollers) استخداماً في الجيل الأخير، بنفس الأرجل (pins) وبشكل كبير بنفس البرمجيات. إن STM32F103 هو المتحكم الدقيق الكلاسيكي بنواة Cortex-M3 من شركة STMicroelectronics، وهو القطعة التي شغلت جيلاً من اللوحات بدءاً من أنظمة التحكم الصناعية وصولاً إلى لوحة Blue Pill الشهيرة، بينما يعد GD32F103 هو البديل المتوافق مع الأرجل من شركة GigaDevice، وهو قطعة بنواة Cortex-M3 صُممت لتناسب نفس بصمة LQFP48 ولتشغيل معظم البرامج الثابتة (firmware) نفسها. تكمن أهمية المقارنة في أن STM32F103 كان نادراً، ومرتفع السعر، ومقيداً بظروف التوريد، ويعد GD32F103 هو الحل العملي للمشتري أو المهندس الذي يريد للوحة الدائرة أن تستمر دون الحاجة إلى إعادة تصميم. يقارن هذا الدليل بين الاثنين من حيث الحزمة (package)، والنواة، وساعة التوقيت (clock)، وخريطة الذاكرة، والمسجلات (registers)، والمحيطيات (peripherals)، وهجرة البرامج الثابتة، وهو صريح تماماً بشأن التوافق: إن GD32F103 متوافق مع الأرجل ومتوافق برمجياً إلى حد كبير، مع وجود اختلافات موثقة تظهرها اختبارات التشغيل الأولية، ويحدد الدليل أماكن هذه الاختلافات.
تعتبر هذه المقارنة أيضاً مثالاً تطبيقياً للاستبدال المتوافق مع الأرجل والكود الذي بني حوله كتالوج هذا الموقع، وهي الحالة التي تشرح الفئة بأكملها. اللوحة التي كانت تستخدم STM32F103 لا تحتاج إلى إعادة تصميم لاستخدام GD32F103، لأن بصمة LQFP48 متطابقة، ولا يلزم إعادة كتابة البرامج الثابتة من الصفر لأن النواة ومعظم خريطة المسجلات متطابقة، ولكن عملية التبديل ليست مجرد إحلال بسيط دون تفكير: إذ تختلف إعدادات ساعة التوقيت، وتهيئة المحيطيات، وبعض سلوكيات المحيطيات، وهذه الاختلافات هي بالضبط ما يحدده النقل المنظم واختبارات التشغيل. يوفر هذا الدليل ذلك الهيكل، وهو يمثل المقارنة الهندسية الصادقة التي يحتاجها المصمم قبل اعتماد خط إنتاج للبديل.
STM32F103 مقابل GD32F103: ادعاء التوافق
إن مقارنة GD32F103 مقابل STM32F103 هي ادعاء حول مستويين من التوافق، وقراءة هذا الادعاء بدقة هي الخطوة الأولى للمقارنة. التوافق على مستوى الأطراف (Pin compatibility) هو المستوى الفيزيائي: يتم تقديم GD32F103 في نفس حزمة LQFP48 ويضع نفس الوظائف على نفس الأطراف مثل حزمة LQFP48 الخاصة بـ STM32F103، لذا فإن اللوحة التي تدعم STM32 تدعم GD32 دون إعادة تصميم المسارات، وتتطابق أطراف الطاقة، والأرضي، والمذبذب، وإعادة الضبط (Reset)، والتمهيد (Boot)، و GPIO، وأطراف الأجهزة الطرفية. توافق البرمجيات هو المستوى الثاني، وهو ادعاء مشروط: يستخدم GD32F103 نواة Cortex-M3 وخريطة سجلات (Register map) مصممة لتكون متوافقة إلى حد كبير مع STM32F103، لذا فإن الكثير من البرامج الثابتة (Firmware) يتم تجميعها وتشغيلها بعد الهجرة، لكن التوافق ليس كلياً، وتكمن الاختلافات في شجرة الساعة (Clock tree)، وبعض سجلات الأجهزة الطرفية، و ADC، وتفاصيل أخرى تكشفها ملاحظات الهجرة واختبارات التشغيل الأولية. الملخص الصادق هو أن GD32F103 متوافق من حيث الأطراف ومتوافق إلى حد كبير من حيث السجلات والبرمجيات، ويقرأ هذا الدليل الادعاء عند هذا المستوى بدلاً من اعتباره وعداً ببديل مثالي ومطابق تماماً.
يتطابق الجزءان أيضاً في الحزمة والسعة الأساسية، وهي الحقيقة التي تجعل المقارنة عملية. يتواجه STM32F103C8T6 و GD32F103C8T6 مباشرة: كلاهما Cortex-M3، وكلاهما LQFP48، وكلاهما يحمل ذاكرة فلاش سعة 64 كيلوبايت وذاكرة SRAM سعة 20 كيلوبايت من فئة C8، وكلاهما يعمل بساعة كلاسيكية من فئة 72 ميجاهرتز التي تشتهر بها العائلة، مع توفير جزء GD32 لمساحة أداء إضافية تتجاوز ذلك في بعض الفئات. تخبر المواصفات المتطابقة المشتري أن GD32F103 مصمم ليشغل بالضبط مكان STM32F103، والاختلافات تكمن في التنفيذ وليس في الشكل، وهذا هو السبب في أن المقارنة هي قصة هجرة (Migration) وليست قصة إعادة تصميم. ادعاء التوافق هو إطار المقارنة بأكملها، وبقية هذا الدليل تقرأ الادعاء مقابل الحزمة، والنواة، والسجلات، والسلوك.
ما هو التوافق الذي يقدمه GD32F103 فعلياً
يوفر GD32F103 توافق الأطراف كضمان، وتوافق البرمجيات كادعاء موثق وصحيح غالباً، وهذا التمييز هو التوصيف العادل للسوق. المصمم الذي يحتاج إلى بصمة LQFP48 ووظائف الأطراف يمكنه تركيب GD32F103 والوثوق بالأطراف، لأن توزيع الأطراف (Pinout) مصمم ليتطابق وتذكره ورقة البيانات (Datasheet). أما المصمم الذي يحتاج إلى تشغيل البرنامج الثابت كما هو، فهو في وضع مختلف: يقوم GD32F103 بتشغيل مجموعة تعليمات Cortex-M3 وخريطة سجلات متوافقة إلى حد كبير، لذا يتم تجميع البرنامج الثابت لـ GD32 مع CMSIS الخاص به وبداية التشغيل (Startup) الخاصة به، وتظهر الاختلافات في تهيئة الساعة والأجهزة الطرفية. التوافق الذي يقدمه GD32 فعلياً هو مزيج من الأطراف كضمان، والبرمجيات كادعاء متوافق ومفحوص، والاستخدامات المهنية للجزء تتطلب قراءة ملاحظة الهجرة، وتكييف البرنامج الثابت، وإجراء اختبارات التشغيل بدلاً من افتراض أن الملف الثنائي (Binary) من STM32 سيعمل دون تغيير.
الحزمة، وتوزيع الأطراف (Pinout)، والبصمة (Footprint): STM32F103 مقابل GD32F103
تعد الحزمة وتوزيع الأطراف (pinout) الطبقة الأولى والأكثر صلابة في المقارنة، ويتطابق GD32F103 مع STM32F103 في مكان استقرار اللوحة. يتم شحن كلا الجزأين في حزمة LQFP48، وهي نفس الحزمة المسطحة الرباعية منخفضة البروفيل المكونة من 48 طرفاً وبقياس 7 في 7 مليمتر، مع نفس تباعد الأطراف وهندسة الوسادات، لذا فإن اللوحة المصممة لبصمة LQFP48 الخاصة بـ STM32F103 تقبل جسم LQFP48 الخاص بـ GD32F103 دون تغيير. تتطابق وظائف الأطراف عبر التغذية، والأرضي، وVDDA وVSSA، والمذبذب وإعادة الضبط، وأطراف boot، وأطراف تصحيح الأخطاء SWD، وGPIO والوظائف البديلة للملحقات، وقد تم تصميم تعيينات الوصلات لتصطف تماماً. البصمة هي عقد التبديل، وهي أقوى سبب يجعل GD32F103 بديلاً وليس إعادة تصميم، لأن اللوحة، والتجميع، وتجهيزات الاختبار، وبرنامج الالتقاط والوضع (pick-and-place) كلها تنجو من التغيير.
يقرأ توزيع الأطراف (pinout) أيضاً الوظائف البديلة بعناية، لأن أطراف المتحكم الدقيق تحمل العديد من الوظائف من خلال معدد الإرسال (multiplexer)، وخريطة الوظائف البديلة هي المكان الذي يمكن أن يخفي فيه ادعاء التوافق في الأطراف اختلافاً. يجب أن تعيش منافذ GPIO وUSART وSPI وI2C وقنوات المؤقت وقنوات ADC التي يعينها البرنامج الثابت (firmware) من خلال سجلات الوظائف البديلة على نفس الأطراف في GD32F103 كما في STM32F103، وتوضح ملاحظة الانتقال وجداول البيانات (datasheet) هذا التعيين. يقوم المصمم الذي ينقل البرنامج الثابت بالتحقق من وضع الوظيفة البديلة التي يستخدمها البرنامج الثابت، بدلاً من افتراض أن اسم الطرف المشترك يعني وظيفة مشتركة في كل معدد إرسال، والتحقق هو جزء من قائمة مراجعة النقل. الحزمة وتوزيع الأطراف هما المرساة المادية للمقارنة، وفحص الوظيفة البديلة هو التفاصيل الدقيقة التي تحافظ على دقة المرساة.
مقارنة بصمة LQFP48 وتعيين الأطراف
إن مقارنة بصمات LQFP48 جنباً إلى جنب تضع الجزأين على نفس اللوحة. كلاهما عبارة عن حزم مسطحة رباعية مكونة من 48 طرفاً بجسم 7 مليمتر وتباعد أطراف 0.5 مليمتر، واتجاه الطرف 1 وتخطيط الوسادة هما نفسهما، لذا فإن اللحام بالتدفق (reflow) والفحص يتبعان نفس الوصفة. يسير تعيين الأطراف بنفس الترتيب، الطاقة والأرضي في مواقعهما الثابتة، وأطراف المذبذب، وإعادة الضبط NRST، وطرف BOOT0، وأطراف SWD، وGPIO المنظمة حسب المنفذ مع الوظائف البديلة المعينة بنفس مخطط معدد الإرسال. اللوحة التي وضعت STM32F103 واللوحة التي تضع GD32F103 تستخدمان نفس رمز البصمة، والنصف المادي للمقارنة هو تطابق تام. تعيين LQFP48 هو السبب في أن التبديل يحافظ على اللوحة، وهو نصف المقارنة الذي لا يحتاج إلى تحفظ، وهو البيان الصادق الذي تقدمه ورقة البيانات (datasheet).
النواة، وناقل الساعة، والأداء: STM32F103 مقابل GD32F103
النواة والأداء هما الجانبان اللذان يتطابق فيهما الجزءان في الجوهر ويختلفان في التنفيذ. كلاهما يستخدم نواة ARM Cortex-M3، وهي نفس المعمارية بـ 32 بت مع نفس مجموعة تعليمات Thumb-2 ونفس بنية التصحيح والمقاطعة التحتية، لذا فإن سلوك البرنامج الثابت المجمع على مستوى التعليمات هو نفسه، كما أن سلسلة الأدوات والمصحح هما نفسهما. ناقل الساعة (clock) هو المكان الذي يختلف فيه التنفيذ: يعمل STM32F103 بحد أقصى 72 ميجاهرتز، بينما تم بناء GD32F103 ليعمل في نفس فئة الـ 72 ميجاهرتز مع وجود هامش إضافي في تصميم القطعة، وشجرة الساعة التي تولد ساعة النظام من المذبذب عبر الـ PLL تمتلك تهيئة خاصة بـ GD32، لذا يجب تكييف كود تهيئة الساعة في البرنامج الثابت مع سجلات PLL الخاصة بـ GD32 بدلاً من نسخها دون تغيير. وبناءً عليه، فإن مقارنة الأداء هي نفس النواة عند ساعة متوافقة، مع اعتبار تهيئة الساعة هي أول مهمة نقل (porting)، وهي القراءة الهندسية الصادقة للقطعتين.
يستحق المترجم (compiler) وسلسلة الأدوات ملاحظة خاصة، لأن عملية الانتقال تمر من خلالهما. كلا الجزأين مدعومان من سلسلة أدوات ARM وبيئات التطوير المتكاملة (IDEs) الرئيسية، ويأتي GD32F103 مع رأس جهاز CMSIS الخاص به، وملف بدء التشغيل الخاص به، وملف ساعة النظام الخاص به، ومكتبة الأجهزة الطرفية القياسية الخاصة به، والتي يضيفها المهندس إلى المشروع بدلاً من مكتبة البرامج الثابتة الخاصة بـ ST. البرنامج الثابت الذي تمت كتابته بناءً على مكتبة الأجهزة الطرفية لـ ST أو برامج التشغيل منخفضة المستوى لـ ST يجب تكييفه مع مكتبة GD32، والبرنامج الثابت الذي كُتب على مستوى السجلات (register level) يجب فحصه سجلاً بسجل، وهنا يصبح ادعاء التوافق عبارة عن عمل فعلي. النقل هو التكلفة الحقيقية للاستبدال، وهو السبب في أن المقارنة تعامل GD32F103 كقطعة متوافقة إلى حد كبير مع عملية انتقال، وليس كبديل متطابق تماماً (drop-in). النواة هي نقطة التطابق، والساعة هي نقطة الاختلاف، والانتقال هو العمل المطلوب بينهما.
كيف تختلف تهيئة الساعة بين الاثنين
تهيئة الساعة هي أول وأكثر مهام النقل ملموسة، لأن STM32F103 و GD32F103 يولدان ساعات النظام الخاصة بهما من خلال مخططات PLL متشابهة ولكنها ليست متطابقة. البرنامج الثابت الذي يهيئ ساعة ST، والمذبذب، والـ PLL، ومفتاح ساعة النظام، ومقسمات ناقل الساعة، يجب نقله إلى سجلات التحكم في الساعة الخاصة بـ GD32، والتي يختلف تخطيط البتات وقيم إعادة الضبط فيها في التفاصيل، ويقوم النقل بضبط ساعة النظام بالطريقة التي يصفها دليل البيانات وملاحظة الانتقال الخاصة بـ GD32. تضبط التهيئة أيضاً ساعات الأجهزة الطرفية، APB1 و APB2، التي تغذي مقسماتها المؤقتات (timers)، والـ USARTs، والـ SPI، والـ ADC، وأي خطأ في نقل الساعة يظهر كـ baud rates خاطئة، وفترات مؤقت خاطئة، وأخذ عينات ADC خاطئ، ولهذا السبب يعد التحقق من الساعة هو أول شيء يتم فحصه عند بدء التشغيل. نقل الساعة هو عمل، ولكنه عمل محدود، لأن المعمارية هي نفس Cortex-M3 وشجرة الساعة لها نفس الشكل، وتوضح ملاحظة الانتقال الاختلافات. الساعة هي النقطة التي يتوقف فيها GD32F103 عن كونه بديلاً متطابقاً تماماً ويبدأ في كونه بديلاً مؤهلاً، والنقل هو الصفحة الأولى من عملية التأهيل.
خريطة الذاكرة وتوافق السجلات: STM32F103 مقابل GD32F103
تعد خريطة الذاكرة وتوافق السجلات هما الطبقة البرمجية للمقارنة، وهما يحددان مقدار ما سيتم نقله من البرامج الثابتة (firmware). خريطة الذاكرة متوافقة إلى حد كبير: حيث تقع ذاكرة flash و SRAM في نفس مناطق العناوين، وتقع سجلات الأجهزة الطرفية (peripherals) عند نفس العناوين الأساسية للكتل الرئيسية، كما أن منطقة النظام وتصحيح الأخطاء الخاصة بـ Cortex-M3 قياسية، لذا فإن نص الرابط (linker script) وتخطيط الذاكرة ينتقلان مع تعريفات الجهاز. توافق السجلات هو ادعاء مشروط: الأجهزة الطرفية الرئيسية، مثل GPIO والمؤقتات (timers) و USART و SPI و I2C، تمتلك سجلات في نفس العناوين مع نفس الحقول إلى حد كبير، وتكمن الاختلافات في التفاصيل الدقيقة، وبعض بتات التحكم، وبعض بتات الحالة، وبعض قيم إعادة الضبط، وبعض السجلات الخاصة بالأجهزة الطرفية التي تنفذها GD32 بطريقتها الخاصة. القراءة المهنية هي أن خريطة السجلات متوافقة إلى حد كبير على المستوى الذي تستخدمه برامج التشغيل القياسية، والبرامج الثابتة المكتوبة على مستوى برنامج التشغيل تُنقل مع تكييف المكتبة، بينما تتطلب البرامج الثابتة المكتوبة على مستوى السجلات الخام فحصاً سجلاً بسجل.
تقرأ خريطة السجلات أيضاً المناطق التي يختلف فيها الجزءان حقاً، وهذه الاختلافات هي التي يركز عليها النقل والتشغيل الأولي. يعد تكوين ADC، وحساب معدل البود (baud-rate) لـ USART، وتنفيذ أجهزة USB الطرفية، وبعض سلوكيات المؤقتات مناطق معروفة يختلف فيها تنفيذ GD32F103 عن STM32F103، والبرامج الثابتة التي تشغل تلك الأجهزة الطرفية وتتوقع سلوك ST الدقيق يجب تكييفها واختبارها بدلاً من افتراض توافقها. توثق ملاحظة الهجرة ومكتبة الأجهزة الطرفية لـ GD32 الاختلافات، ويقرأها المهندس للأجهزة الطرفية التي تستخدمها البرامج الثابتة فعلياً قبل بدء التشغيل الأولي. خريطة الذاكرة هي الأساس المتوافق، وخريطة السجلات هي الوسط المتوافق إلى حد كبير، واختلافات الأجهزة الطرفية هي العمل المحدد، والثلاثة معاً هم السبب في أن GD32F103 بديل قوي مع نقل موثق بدلاً من كونه بديلاً صامتاً تماماً.
اختلافات الأجهزة الطرفية بين STM32 و GD32
اختلافات الأجهزة الطرفية هي التفاصيل الصادقة للمقارنة، وتسميتها هي الانضباط الذي يمنع عملية الهجرة من افتراض التوافق التام. يعد ADC منطقة معروفة، لأن تكوين ADC في GD32F103، وتعيين القنوات الخاص به، وسلوك أخذ العينات يختلف بطرق يجب أن تتكيف معها تهيئة البرامج الثابتة وحلقة القراءة ثم التحقق منها مقابل مخرجات المحول الفعلية. و USART منطقة أخرى، لأن سجل معدل البود وبعض بتات التحكم تختلف، لذا تنتقل تهيئة التسلسل إلى مكتبة GD32 ويتم التحقق من معدل البود الفعلي على السلك. جهاز USB الطرفي هو منطقة ثالثة يشير المجتمع إلى حاجتها للاهتمام، لأن تنفيذ USB في GD32F103 يختلف عن ST، ومجموعة برامج USB المكتوبة لجهاز ST الطرفي تتطلب تكييفاً. مجموعة المؤقتات هي منطقة رابعة من التفاصيل، لأن بعض ميزات وسلوكيات المؤقتات تختلف في تنفيذ GD32. لا يوجد أي من هذه الاختلافات يمثل عائقاً، ولكن كل منها يمثل مهمة، والمهندس الذي ينقل برنامجاً ثابتاً يستخدم ADC أو USART أو USB أو المؤقتات يخطط للمهمة ويتحقق من النتيجة في التشغيل الأولي بدلاً من افتراض أن النقل مجاني.
نقل البرامج الثابتة (Firmware Porting) والتشغيل التجريبي (Bring-Up): STM32F103 مقابل GD32F103
يعد نقل البرامج الثابتة من STM32F103 إلى GD32F103 عملية هجرة منظمة، واختبار التشغيل التجريبي (bring-up) هو البوابة التي تؤهل هذا النقل. تتم عملية النقل عبر مراحل: إضافة ملفات جهاز GD32 والمكتبة البرمجية إلى المشروع، ونقل إعدادات الساعة (clock configuration) إلى سجلات الساعة الخاصة بـ GD32، وتكييف تهيئة الأجهزة الطرفية (peripherals) مع مكتبة GD32 أو حقول السجلات التي تم التحقق منها، وإعادة بناء البرنامج الثابت لتعريف جهاز GD32. ثم يتم إجراء التشغيل التجريبي على نفس المراحل على الأجهزة (hardware): التأكد من بناء سلسلة الأدوات (toolchain) وبرمجة الهدف، والتأكد من الإقلاع (boot) والساعة عن طريق قياس ساعة النظام وساعات الأجهزة الطرفية، واختبار كل جهاز طرفي يستخدمه البرنامج الثابت، مثل GPIO و USART و SPI والمؤقتات (timers) و ADC و USB، ومقارنة السلوك والتوقيت مع STM32F103 الأصلي على نفس اللوحة. التشغيل التجريبي هو الحكم في عملية الاستبدال بأكملها، لأنه يؤكد توافق المسامير (pin compatibility) على الجزء المثبت وتوافق البرامج في الكود المشغل، وهي الخطوة التي تحول الهجرة من مجرد ادعاء إلى تأهيل معتمد.
ينتج عن التشغيل التجريبي أيضاً السجل الذي يحتاجه الاستبدال، لأن أي تغيير في الإنتاج يُحكم عليه بناءً على الأدلة. قم بتسجيل قياسات الساعة، ونتائج تشغيل الأجهزة الطرفية، وحركة البيانات التسلسلية، وقيم ADC، وأشكال موجات المؤقت، وتعداد USB، بجانب قراءات STM32F103، وسجل الاختلافات والتعديلات التي تطلبها النقل. هذا السجل هو الوثيقة التي تقبلها عملية التحكم في التغيير ويستخدمها المراجع التالي، وهو السبب في أن استبدال GD32F103 يمكن أن يكون بديلاً موثقاً ومؤهلاً بدلاً من كونه مجرد تجربة معملية. كما يحدد التشغيل التجريبي الجدول الزمني للنقل بصدق: البرنامج الثابت الذي يستخدم GPIO والمنافذ التسلسلية والمؤقتات يتم نقله في أيام، بينما البرنامج الثابت الذي يشغل ADC و USB وميزات المؤقتات المعقدة يستغرق وقتاً أطول، ويأتي التقدير من خريطة الأجهزة الطرفية التي وصفها القسم السابق. النقل هو عمل محدد النطاق، والتشغيل التجريبي هو إثبات لهذا النطاق، وكلاهما معاً يمثلان المنهجية التي تؤهل البديل.
كيفية إجراء الهجرة من STM32 إلى GD32
إجراء الهجرة من STM32F103 إلى GD32F103 هو عبارة عن قائمة مراجعة يتبعها أي مهندس بنفس الترتيب. قم بحفظ المشروع الأصلي والبرنامج الثابت، واعرف الأجهزة الطرفية وطبقات التعريف (driver layers) التي يستخدمها، لأن نطاق الهجرة يتحدد بخريطة الأجهزة الطرفية وليس فقط برقم القطعة. أضف ملفات CMSIS الخاصة بـ GD32، وملف التشغيل (startup)، وساعة النظام، ومكتبة الأجهزة الطرفية لـ GD32F103، وقم ببناء المشروع وفقاً لتعريف جهاز GD32، مع إصلاح أخطاء المترجم (compiler) والرابط (linker) التي تظهر نتيجة تغيير الجهاز. انقل إعدادات الساعة، والمذبذب (oscillator)، و PLL، ومقسمات الحافلة (bus prescalers)، إلى سجلات ساعة GD32، وانقل تهيئة الأجهزة الطرفية إلى مكتبة GD32، مع فحص كل حقل يشغله البرنامج الثابت. قم ببرمجة GD32 على اللوحة التي كانت تحمل STM32، وقم بتنفيذ مراحل التشغيل التجريبي: الإقلاع والساعة، والأجهزة الطرفية، واختبار النظام، واختبار التحمل (soak test) عبر نطاق درجة الحرارة. سجل النتائج بجانب نتائج STM32، ويصبح الاستبدال مؤهلاً عندما يطابق GD32 أداء STM32 ضمن حدود التفاوت المسموح بها للمنتج. قائمة المراجعة هذه هي الشكل التشغيلي للهجرة، وهي تظل ثابتة سواء كان البرنامج الثابت صغيراً أو كبيراً.
متى تختار STM32F103 أو GD32F103
إن الاختيار بين STM32F103 و GD32F103 هو قرار يتعلق بالمفاضلة بين التوافق والتوافر، وينحصر في قاعدة واضحة. اختر STM32F103 عندما يجب أن يعمل البرنامج الثابت (firmware) دون تعديل على الجهاز الأصلي، أو عندما يعتمد التصميم على سلوك الأجهزة الطرفية (peripherals) الذي لا يعيد GD32 إنتاجه بدقة، أو عندما يجب أن تكون سلسلة الأدوات (toolchain) والمكتبة من إنتاج ST، أو عندما تم منح الشهادات والاعتمادات بناءً على قطعة ST، وكان الجهاز الأصلي متوافراً وبسعر مناسب. اختر GD32F103 عندما تحتاج اللوحة إلى تبديل LQFP48، أو عندما تكون قطعة ST نادرة أو مرتفعة السعر، أو عندما يمكن للتصميم تحمل مجهود النقل (porting) والتشغيل الأولي (bring-up)، وعندما تكون الأجهزة الطرفية التي يستخدمها البرنامج الثابت هي المتوافقة، لأن GD32 يوفر نفس اللوحة مع إمدادات لا يقيدها نقص ST. القاعدة هي قمع المقارنة: التوافر يحدد المحفز، وخريطة الأجهزة الطرفية تحدد تكلفة النقل، والتشغيل الأولي يحدد التأهيل، والاختيار هو مزيج من الثلاثة وليس مجرد عنوان واحد.
يقرأ الاختيار أيضاً مشهد التوريد والمخاطر، لأن القطعتين تقعان في مراكز توريد مختلفة. ندرة STM32F103 هي السبب في وجود GD32F103، وتوافر GD32 والنظام البيئي المحلي هما نقطة قوة البديل، بينما تختلف وثائق GD32 ومكتبة البرنامج الثابت والمجتمع عن ST، ويتعين على المهندس العمل من مواد GD32 الخاصة. الفريق الذي يقدر استمرارية التوريد يرى في GD32 الإجابة الاستراتيجية، والفريق الذي يقدر نظام ST البيئي يرى في STM32 الإجابة الآمنة، والإطار الصادق للمقارنة يبقي كلاهما مرئياً. إن GD32F103 ليس ترقية مجانية لـ STM32F103، بل هو بديل مؤهل يحافظ على اللوحة ويتطلب الهجرة، والاختيار هو قرار المجموعة الهندسية بين نظام الأصل البيئي وتوافر البديل.
دليل قرار سريع لـ STM32 و GD32
| القرار | STM32F103 | GD32F103 |
|---|---|---|
| العبوة وتوزيع الدبابيس (pinout) | LQFP48، البصمة المرجعية | LQFP48، متوافق مع الدبابيس |
| النواة (Core) | Cortex-M3 | Cortex-M3 |
| الذاكرة (فئة C8) | 64 KB flash، 20 KB SRAM | 64 KB flash، 20 KB SRAM |
| التوافق البرمجي | المرجع | متوافق إلى حد كبير، مع نقل موثق |
| الساعة (Clock) | تكوين PLL الخاص بـ ST | تكوين PLL الخاص بـ GD، يتطلب نقلاً |
| الاختلافات المعروفة | المرجع | ADC، بود ريت USART، USB، بعض تفاصيل المؤقت |
| التوافر | نادر ومقيد بالسعر أحياناً | توريد محلي، نقطة قوة البديل |
| أفضل استخدام | نظام ST البيئي الحالي، برنامج ثابت غير معدل | تبديل يحافظ على اللوحة عند ندرة ST |
دليل عملي لعملية النقل: برنامج تشغيل GPIO و Timer و UART
إن إجراء دليل عملي لعملية النقل يجعل الهجرة ملموسة، وتغطية برنامج تشغيل يستخدم GPIO، ومؤقت (Timer) لـ PWM، و UART بمعدل 115200 baud تشمل الجوانب النموذجية. الخطوة الأولى هي سلسلة الأدوات (toolchain): أضف حزمة الجهاز الخاصة بـ GD32F103 ومكتبة البرامج الثابتة إلى المشروع، واستبدل ملف بدء التشغيل (startup) وترويسة الجهاز الخاصة بـ STM32 بتلك الخاصة بـ GD32، ثم قم بالبناء (build)، مع إصلاح أخطاء المترجم (compiler) والرابط (linker) التي تظهر نتيجة تغيير الجهاز. الخطوة الثانية هي الساعة (clock): انقل تكوين ساعة النظام إلى سجلات التحكم في الساعة الخاصة بـ GD32، والمذبذب، و PLL، ومقسمات ناقل البيانات (bus prescalers)، لأن مخطط PLL في GD32 يختلف في تخطيط السجلات، وتحقق من ساعة النظام الناتجة باستخدام راسم الإشارات (oscilloscope) على MCO أو دبوس الساعة. الخطوة الثالثة هي تهيئة الأجهزة الطرفية: انقل GPIO و Timer و UART إلى مكتبة GD32، ويعد UART هو الحالة التعليمية الأبرز، لأن سجل معدل البود (baud-rate register) في GD32 يختلف عن ST، لذا يتم إعادة اشتقاق تكوين 115200 من حسابات GD32 بدلاً من نسخها، ويؤكد اختبار الطرفية (terminal test) البود الفعلي على السلك. الخطوة الرابعة هي حلقة البرنامج الثابت: قم بتشغيل التطبيق الحالي وتأكد من تبديل حالات GPIO، وأن PWM يقود مخرجاته، وأن UART يرسل البيانات، ويكتمل الدليل العملي عندما يعمل التطبيق على GD32 كما كان يعمل على STM32.
يستعرض الدليل العملي أيضاً الاختلافات التي تظهرها الأجهزة الطرفية، وعادة ما يتم بذل الجهد الأكبر في النقل عند Timer و UART. يتم فحص سجلات المقسم الأولي (prescaler) والفترة الخاصة بالمؤقت، وقنوات PWM التي يقودها البرنامج الثابت، مقابل خريطة سجلات GD32، لأن المؤقت الذي يحتوي على ترتيب مقسم أولي مختلف ينتج تردد PWM مختلفاً حتى يتم نقل التكوين. سجل البود الخاص بـ UART هو الاختلاف الكلاسيكي، والبرنامج الثابت الذي ينسخ قيمة ST بدون نقل ينتج دفقاً مشوشاً تظهره الطرفية، وهو الفشل الذي يثبت ضرورة عملية النقل. يسجل الدليل العملي كل خطوة، وتغيير سلسلة الأدوات، ونقل الساعة، ونقل الأجهزة الطرفية، واختبار التطبيق، ويكون هذا السجل هو الدليل الذي يحتاجه ملف الهجرة. المثال العملي هو النموذج لعملية الهجرة بأكملها، وهو النموذج الذي يتم القياس عليه في قسم الإخفاقات الشائعة لاحقاً.
قياس الساعة والمحيطيات أثناء التشغيل التجريبي (Bring-Up)
يعد قياس الساعة والمحيطيات أثناء التشغيل التجريبي هو نصف التحقق من عملية الهجرة، ويتم تنفيذه على oscilloscope و terminal. قم بقياس ساعة النظام أولاً، وفحص مخرج MCO أو الكريستال وتكوين PLL، وتأكد من أن GD32 يعمل بالتردد المطلوب، لأن منفذ الساعة هو أول شيء تلمسه عملية الهجرة وتنتقل الساعة الخاطئة إلى كل طرف محيطي. قم بقياس UART بعد ذلك، بتوصيل terminal عند 115200 وإرسال نمط اختبار معروف، وتأكد من وصول الأحرف بدون أخطاء في التأطير (framing errors)، لأن التدفق المشوه هو دليل مرئي على عدم تطابق سجل البود (baud-register). قم بقياس المؤقت و PWM، وفحص دبوس الإخراج وتأكيد التردد ودورة التشغيل (duty) مقابل التصميم، وقياس تبديل GPIO، وقراءات ADC إذا كانت البرامج الثابتة تستخدمها، وزمن انتقال المقاطعة (interrupt latency) حيث يعتمد التطبيق عليه. يتم تسجيل القياسات بجانب قراءات STM32 الأصلية، والمقارنة هي الدليل على أن GD32 يطابق الأصل ضمن تفاوت المنتج، وهي البوابة التي تعبرها عملية الهجرة.
يتضمن التشغيل التجريبي أيضاً اختبار النقع (soak) الذي تتطلبه كل من datasheet والمنتج، لأن الهجرة التي تعمل على طاولة الاختبار يمكن أن تفشل عند الحدود القصوى. قم بتشغيل التطبيق عبر نطاق الجهد ودرجة الحرارة للمنتج، عند الإمداد المنخفض حيث تختلف ساعة GD32 والمنظمات، وعند درجة الحرارة المرتفعة حيث ينحرف ADC والتوقيت، وعند خطوات الحمل حيث يتغير سلوك البرامج الثابتة، وقارن النتائج بسلوك الأصل المسجل. يكشف اختبار النقع عن الاختلافات المتقطعة التي يفتقدها اختبار الطاولة، وهو السبب في تأهيل الهجرة على نطاق المنتج بدلاً من المسار المثالي للطاولة. القياس والنقع معاً هما التشغيل التجريبي، وهما نصف عملية الهجرة التي تحول البرامج الثابتة المنقولة من مجرد ادعاء إلى بديل مؤهل، وهو الانضباط الذي طبقه دليل المقارنة طوال الوقت.
فشل الهجرة الشائع وإصلاحاته
تفشل عملية الانتقال من STM32F103 إلى GD32F103 بطرق متكررة، وتكون الإصلاحات قصيرة لأن أسباب الفشل معروفة. إذا لم تعمل اللوحة، فإن السبب المعتاد هو بدء التشغيل أو الساعة (clock)، أو عدم إضافة ملف بدء التشغيل الخاص بـ GD32، أو عدم توجيه جدول المتجهات (vector table)، أو عدم نقل تكوين PLL، والإصلاح هو إتمام خطوة سلسلة الأدوات (toolchain) بالكامل وقياس الساعة قبل الأجهزة الطرفية (peripherals). إذا كانت بيانات UART مشوشة، فالسبب هو سجل البود (baud register)، حيث تم نسخ قيمة ST في سجل GD32 الذي يحسب بشكل مختلف، والإصلاح هو استخدام حساب البود الخاص بـ GD32 واختبار الطرفية على السلك. إذا كان PWM أو المؤقت (timer) يعمل بتردد خاطئ، فالسبب هو مقسم التردد (prescaler) للمؤقت أو شجرة الساعة خلفه، والإصلاح هو نقل التكوين وقياس المخرجات. إذا قرأ ADC قيمًا خاطئة، فالسبب هو تكوين ADC أو خريطة القنوات، والإصلاح هو نقل تهيئة ADC والمعايرة مقابل مرجع معروف. إذا لم يتم التعرف على USB مطلقًا، فالسبب هو اختلاف تنفيذ طرفية USB في GD32 عن ST، والإصلاح هو المحول أو إعادة العمل التي تصفها ملاحظة الهجرة، وهي المنطقة المعروفة بأنها الأصعب في عملية التبديل. لكل فشل بصمته وإصلاحه، وهذه الإصلاحات هي السبب في أن الهجرة المخطط لها تفشل بنسبة أقل من تلك التي تعتمد على التخمين.
تحمل الإصلاحات أيضًا الانضباط الذي يبقي الهجرة على المسار الصحيح، وهذا الانضباط يتمثل في ترتيب النقل. قم بإصلاح سلسلة الأدوات قبل الساعة، والساعة قبل الأجهزة الطرفية، والأجهزة الطرفية قبل التطبيق، لأن الساعة الخاطئة تجعل كل جهاز طرفي خاطئًا، والجهاز الطرفي الخاطئ يجعل التطبيق خاطئًا، وهذا الترتيب يحصر حالات الفشل فور ظهورها. اختبر كل مرحلة قبل الانتقال للتالية: التجميع (compile)، بدء التشغيل (boot)، الساعة، الأجهزة الطرفية، ثم التطبيق، وسجل كل نتيجة، بحيث يتم إرجاع أي فشل في التطبيق إلى الجهاز الطرفي الذي لم يتم التحقق منه بعد. هذا الانضباط هو نفس الترتيب المستخدم في دليل العمل، وهو الترتيب الذي يحول الهجرة من سلسلة من المفاجآت إلى تتابع من المراحل المؤكدة. إن حالات الفشل الشائعة وإصلاحاتها تكمل منهجية الهجرة، وهي تمثل الجانب العملي المكمل لخطوات النقل، والتي تعد الوجه التنفيذي للهجرة في هذا الدليل.
واجهة التشغيل (Boot) وتصحيح الأخطاء (Debug) أثناء الانتقال
تعد واجهة التشغيل وتصحيح الأخطاء من التفاصيل الهادئة في عملية الانتقال، وهي تستحق قسماً خاصاً لأن اللوحة التي تُبرمج أو تعمل بشكل خاطئ توقف عملية النقل قبل أن تبدأ. يتم فحص دبوس BOOT0 وتكوين وضع التشغيل الخاص بـ GD32F103 مقارنة بـ STM32، لأن مصدر التشغيل، سواء كان الـ flash أو ذاكرة النظام أو SRAM، يتم اختياره بواسطة دبابيس التشغيل، واللوحة التي كانت تدعم إعدادات تشغيل STM32 يجب أن تدعم GD32 بنفس الطريقة، وإلا سيعمل الرقاقة من الذاكرة الخاطئة ولن يعمل التطبيق أبداً. واجهة تصحيح الأخطاء SWD هي التفصيل الثاني، لأن عملية الانتقال تبرمج GD32 من خلال نفس دبابيس SWD، ويجب أن يتعرف مصحح الأخطاء وحزمة الجهاز (device pack) على معرف GD32 وسجلات تصحيح الأخطاء الخاصة به، وهي خطوة سلسلة الأدوات (toolchain) التي غطاها الشرح العملي. أما التفصيل الثالث فهو توقيت إعادة الضبط (reset) وتشغيل الطاقة، ودبوس NRST ومنحنى إمداد الطاقة الذي يصفه الـ datasheet، لأن اللوحة ذات إعادة الضبط الهامشية أو منحنى الإمداد البطيء قد تفشل في البدء بشكل موثوق على السيليكون الجديد. إن قراءات التشغيل وتصحيح الأخطاء هي مرحلة ما قبل الطيران للانتقال، وهي الفحوصات التي يتم إجراؤها دائماً في تسلسل تشغيل اللوحة قبل الوثوق في الأجهزة الطرفية.
تكتمل التفاصيل بقراءة ملاحظة الانتقال الخاصة بـ GD32، لأن وثيقة الشركة المصنعة نفسها توضح الاختلافات التي يجب أن يحترمها النقل. تسرد ملاحظة الانتقال اختلافات السجلات (register)، واختلافات الساعة (clock)، واختلافات الأجهزة الطرفية، وتغييرات التعريفات (driver)، ويقرأها المهندس للأجهزة الطرفية التي يستخدمها البرنامج الثابت، مع تحديد الأجهزة التي تهم هذا المشروع، وتلك القائمة المحددة هي نطاق النقل الذي ينفذه الشرح العملي. توضح ملاحظة الانتقال أيضاً إعدادات سلسلة الأدوات والمكتبات، وحزمة الجهاز، وبدء التشغيل، والمشاريع النموذجية، ويتبعها المهندس بدلاً من تكييف مشروع STM32 من الصفر، لأن مسار المورد نفسه هو الأسرع والأكثر أماناً. إن التشغيل وتصحيح الأخطاء وملاحظة الانتقال هي التحضير لعملية الاستبدال، وهي السبب في أن النقل الذي يبدأ من وثائق المورد يفشل بنسبة أقل من ذلك الذي يبدأ من التخمين. يكمل التحضير منهجية الانتقال، وهو مرحلة ما قبل الطيران التي يفترضها كل من الشرح العملي والإخفاقات الشائعة.
رؤية الاستبدال والتوريد: STM32F103 مقابل GD32F103
تتمثل رؤية الاستبدال في المقارنة في عملية التوريد التي يفتحها التبديل مع الحفاظ على اللوحة، وهي الجانب العملي للمشتري. إن التصميم الذي يؤهل GD32F103 كمصدر هو تصميم لم تعد لوحته تعتمد على توفر STM32F103، ويمكنه تشغيل GD32 كجزء أساسي للإنتاج الضخم، أو كمصدر ثانٍ، أو كخيار طوارئ، مع التنقل بين الاثنين على نفس لوحة LQFP48 ونفس برنامج الاختبار حيث يدعم البرنامج الثابت (firmware) كليهما. يتضمن تأهيل GD32F103 عمليات النقل والتشغيل (port-and-bring-up) التي وضعها هذا الدليل، والنتيجة هي بديل موثق يمكن لفريق التوريد استخدامه وطلبه وتخزينه. كما تشمل رؤية التوريد المجال الأوسع، لأن النظام البيئي المتوافق مع STM32 يتضمن AT32 والعائلات المحلية الأخرى التي تؤدي نفس الدور، والمشتري الذي يؤهل بديلاً واحداً يمكنه تقييم البديل التالي بنفس الطريقة. يعد GD32F103 هو الحالة الرائدة، ورؤية التوريد تحول توافقه إلى أصل من أصول الإمداد.
تختتم المقارنة بالبيان الصادق الذي يقدمه كل من السوق وهذا الدليل. إن GD32F103 هو البديل المتوافق مع الدبابيس (pin-compatible) والمتوافق برمجياً إلى حد كبير مع STM32F103، وهو بديل حقيقي على لوحة LQFP48، ولكنه ليس بديلاً صامتاً (drop-in) تماماً، لأن الساعة (clock)، وتفاصيل السجلات (registers)، و ADC، و USART، و USB، والمؤقتات (timers) تحمل اختلافات يتطلب تأهيلها عملية هجرة وتشغيل. المهندس الذي يقرأ المقارنة بين STM32F103 و GD32F103 بهذه الطريقة يعرف أين تتفق الأجزاء، وأين تختلف، وكيفية نقل وإثبات التبديل، وهذه المعرفة هي ما يحول المتحكم الدقيق (MCU) الأكثر تقييداً في السوق إلى لوحة تستمر في الشحن. المقارنة هي خريطة العمل بين الأصل والبديل، وهذه الخريطة هي السبب في أن التصميم الذي استخدم STM32F103 لا يجب أن يتوقف عندما يتوقف توفر STM32F103.
غير متأكد أي مستشعر يناسب مشروعك؟
تحدث مع مهندسي تطبيق الموجات المليمترية لدينا للحصول على استشارة مجانية.
حدد مشروع فندقك مع مهندسينا
أخبرنا بعدد الغرف ونوع السقف والبروتوكول المفضل. سنعود إليك بخطة عينات وعرض سعر خلال 24 ساعة عمل.
- انتقل من الإرشادات العامة إلى نقاش حول المنتج أو التطبيق.
- استخدم RFQ عندما يحتاج التسعير أو الرسومات أو MOQ أو توقيت الإطلاق إلى هيكلة.
- أبقِ مسار اتصال مباشر ظاهرًا للتوضيحات السريعة والتسليم.