STM32F103C8T6 - الخطوات الأولى. ابدأ في عمل راسم ذبذبات

حول أفراح وصعوبات التعارف الأول مع STM32 بعد AVR. كما نفذت أبسط مهمة - نقل البيانات إلى جهاز كمبيوتر.


لدي بعض الخبرة مع AVR ، أريد مقارنة وحدات التحكم التي وصلت (والتي تكلف بشكل فردي 1.7 دولار / وحدة ) مع أولئك المقربين منهم بسعر ATMEGA328 ( 1.4 دولار / وحدة ).
ATMEGA328STM32F103C8T6فوز ، مرات
فلاش ، كيلو بايت32642
رام ، كيلو بايت2عشرون10
أقصى تردد MHzعشرون723.6
سرعة ADC ، kSPSخمسة عشر2 * 1000 (يمكن رفع تردد التشغيل)133

على خلفية زيادة مؤشرات الأداء بمقدار 10-100 مرة ، زاد فلاش مرتين فقط. علاوة على ذلك ، يتم استهلاك هذه الـ 64 كيلوبايت بشكل أسرع تقريبًا من 32 على AVR. من المنطقي استخدام وحدات التحكم هذه حيث تكون هناك حاجة إلى أداء عالي ، ولكن لا توجد خوارزميات كثيفة الكود ... على سبيل المثال ، مرسمة الذبذبات.

ظهور لوحات التصحيح: من اليسار إلى اليمين:
صورة



كيف تبرمج


هناك العديد من بيئات البرمجة STM32 - IAR و Keil و Coocox ... في البداية يبدو أنها جيدة وستجد بالتأكيد شيئًا مناسبًا. ثم يأتي فهم كيفية تشكل حديقة الحيوانات هذه. مجرد شخص جعل IDE ليست جيدة للغاية. نظر الآخرون إليها وقرروا ما يمكنهم فعله بشكل أفضل. وقد فعلوا. في بعض النواحي اتضح أنه أفضل ، في شيء أسوأ. بعد قراءة المراجعات وتجربة IAR ، استقرت على Coocox.

هناك برنامج آخر - STM32CubeMX. والحقيقة هي أن الأجهزة الطرفية في STM32 أكثر بكثير من AVR. البدء في الأمر أكثر صعوبة. يسمح لك STM32CubeMX بتحديد وحدة تحكم ، وكزة باستخدام الماوس وإنشاء رمز التهيئة. حتى إذا لم نرغب في استخدام هذا الرمز الذي تم إنشاؤه ، في STM32CubeMX ، من الملائم النظر إلى نظام pinout والساعة ، وتحديد القاسم ، والعوامل وتسجيلها يدويًا في التعليمات البرمجية الخاصة بك! نوصي بشدة لجميع المبتدئين!

STMStudio هو برنامج يسمح بمراقبة الوقت الحقيقي للقيم المتغيرة في MK.

كمبرمج ، قررت استخدام ST-Link V2 الرخيص مقابل 2.6 دولار .
كل شيء متصل بكل بساطة. خذ دبوس JTAG ،


وانظر إلى الصورة على ST-Link ، وقم بتوصيل العملاء المحتملين (ST-LINK -> JTAG):



  • GND -> رقم التعريف الشخصي 20 ؛
  • 3.3 فولت -> دبوس 1 ؛
  • RST -> رقم التعريف الشخصي 15 ؛
  • SWCLC -> دبوس 9 ؛
  • SWDIO -> دبوس 7.

تشغيل CoIDE والكتابة
رمش
#include "stm32f10x.h"
int main(void)
{
	RCC->APB2ENR |= RCC_APB2Periph_GPIOC; //   
	GPIOC->CRH |= (0x3 << 20); //   50 
	GPIOC->CRH &= (~(0xC << 20)); //      -
	volatile long i = 0;
	while(1)
	{
		GPIOC->BSRR = GPIO_BSRR_BR13;
		for(i = 0; i < 1000*1000*5; i++){;};
		GPIOC->BSRR = GPIO_BSRR_BS13;
		for(i = 0; i < 1000*1000*5; i++){;};
	}
}

, AVR, , 2264 Flash… , AVR .
— 2176 .
STDLIB — 1476 .

تجميع ، فلاش ... وعمل كل شيء على الفور! دون أي رقص مع الدف! حتى المصحح في الدائرة يعمل! نبدأ STMStudio - ويعمل. يبني الرسوم البيانية للمتغيرات أثناء عملية MK! هناك لاعبون على اللوحة ، لكنك لست بحاجة إلى تبديل أي شيء إلى البرمجة / بدء MK! تماما مثل اردوينو! حسنًا ، لا يمكن أن تكون جيدة جدًا ... لكنها لا يمكن أن تكون كذلك.

ابدأ في عمل راسم ذبذبات


في أحلامي ، يجب أن يعمل
مذبذب الذبذبات على النحو التالي: يعالج كل من ADC الإشارة في وقت واحد بسرعة 1-2 MSPS. الخياران التاليان:
  1. يتم نقل كل هذا في الوقت الفعلي إلى جهاز الكمبيوتر عبر USB ويتم اتخاذ قرار بشأن ما يجب فعله به (تذكر ، قم بإنشاء رسم بياني ، قم بمعالجته بطريقة أو بأخرى ، ...) ؛
  2. . : (, , , ). .

لا يمكن تنفيذ كلا الخيارين.
الأول لأنني لم أستطع بدء تشغيل USB. بدلاً من ذلك ، يمكنني فقط إنشاء المشروع في STM32CubeMX. ولكن بعد تصديره إلى CoIDE ، كان من الضروري تغيير محمل الإقلاع باستخدام وصلات للبرمجة / التشغيل ، وهو أمر غير مناسب. لذلك ، رفضت هذا الخيار. حسنًا ، بالإضافة إلى ذلك ، تبلغ سرعة USB 12 ميجابايت / ثانية فقط. البيانات بسرعة عالية في الوقت الحقيقي لا تزال غير مناسبة. من أجل نقل البيانات إلى الكمبيوتر بطريقة أو بأخرى ، قمت بتوصيل محول USB <-> UART الذي تم شراؤه في ذلك الوقت لبرمجة Arduino Pro Mini. تم تغطية الخيار الثاني ل معالج المقاطعة يدوم أطول من ADC. كانت السرعة محدودة بـ 340-500 kSPS فقط ، وهو أقل من المتوقع عدة مرات.





اتضح أن الخيار الوحيد عالي السرعة العامل هو: يعمل ADC بشكل مستمر عندما نحتاج إلى قياس ، وتشغيل DMA ، وانتظر حتى يتم تعبئة المخزن المؤقت ، وإيقاف DMA ونقل البيانات ببطء إلى الكمبيوتر عبر USART. تجاوز هذا الخيار جميع التوقعات. يمكن زيادة سرعة MK بحيث يتحول إلى 9 MSPS مع وحدتي ADC! أولئك. 4.5 مرات أكثر من الوثائق! في الوقت نفسه ، من المريح جدًا مراقبة إشارة بتردد يصل إلى 1 ميجاهرتز. مقارنة بما تمكنا من تحقيقه في وقت سابق على Arduino (10 kSPS) ، كانت النتيجة جيدة جدًا - زادت السرعة بمقدار 900 مرة!

ومع ذلك ، مع رفع تردد التشغيل ، ليس كل شيء بهيجة. في المستقبل ، لكي يعمل USB ، يجب تخفيض التردد بمقدار 16/9 = 1.8 مرة ، ثم سيتم الحصول على 5 MSPS فقط.

أثناء محاولتي التعامل مع USB والأجهزة الطرفية الأخرى ، أدركت وجود عيب كبير في أجهزة التحكم هذه - هناك القليل جدًا من المعلومات على الإنترنت. إذا كان لدى AVR مجموعة من كل شيء ، فقد تبين أنه ليس من السهل العثور على مثال للتشغيل المتزامن لاثنين من ADC في وضع التشذير السريع .

تم اختيار Arduino UNO كمولد إشارة لاختبار راسم الذبذبات. ليس لأنه جيد أو شيء ما ... إنه سريع للغاية.
اكتب 8 أسطر:
 void setup() {
  pinMode(2, OUTPUT);  
  long d = 10;
  for(;;){
    PORTD = 255;
    delayMicroseconds(d);
    PORTD = 0;  
    delayMicroseconds(d);
  }
}

void loop() {
  
}


قم بتوصيل أسلاك USB + 1 (بحيث لا يموت STM32 بجهد 3.3 فولت من إشارة 5 فولت ، يتم تغذية الإشارة من خلال المقاوم 2 كيلو أوم) وبذلك تكون قد انتهيت!

اتضح ما يلي (تحت كل صورة توجد صورة لنفس الإشارة على شاشة الذبذبات التناظرية): فترة الإشارة 0.9 μs. 1 متر = 10 بكسل. على راسم التذبذب ، قسم واحد = 0.5 ميكرومتر. فترة الإشارة 10 μs. 1 متر = 5 بكسل. على راسم الذبذبات ، قسم واحد = 2 μs. يتم قطع القمم لأن الإشارة تتجاوز الجهد المرجعي ADC.









ماذا بعد


في الخطط:
  1. اهزم USB للتخلي عن محول USB <-> USART ؛
  2. قم بإنهاء الجزء التناظري بحيث لا يكون نطاق جهد الدخل 0 - 3.3 فولت ، ولكن أكثر لائقًا ؛
  3. جعل وضع متعدد القنوات ؛
  4. تنفيذ التحكم من جهاز كمبيوتر ؛
  5. اصنع جهازًا نهائيًا في العلبة.


في الختام ، أود أن ألفت الانتباه إلى اثنين من عيوب الكشف عن STM32 مقارنة مع AVR:
  1. زيادة استهلاك ذاكرة الفلاش.
  2. التهيئة المعقدة للمحيط ، والتي تتفاقم بسبب نقص المواد.


لا أعرف كيف ، ولكن لمثل هذه المهمة البسيطة ، استغرق الأمر 31 كيلوبايت فلاش.
دائرة لوحة التصحيح (لم يكن من السهل العثور عليها).

الجزء الثاني من المقال.

Source: https://habr.com/ru/post/ar384723/


All Articles