Getting Started STM32F103C Board with Arduino IDE [EP2]

การทดลองการเรียนรู้การใช้งานบอร์ดควบคุม STM32F103C8T6 ในตอนที่่ 2 ครั้งนี้ เป็นการทดลองใช้ฟังก์ชั่นต่างๆ ของบอร์ดควบคุมกันต่อ ในเรื่องของการส่งข้อมูลต่างๆ ไปยังหน้าต่าง Serial Monitor, การส่งสัญญาณลอจิกไปยังขาเอาต์พุต, การรับสัญญาณลอจิกขาอินพุต และการอ่านค่าสัญญาณอะนาลอกขนาด 12 บิต โดยเนื้อหาจะเป็นตัวอย่างการทดลอง 3 แบบ ทั้งนี้เพื่อเป็นความรู้พื้นฐานนำไปประยุกต์ใช้งานต่างๆ ต่อไป 

Getting Started STM32F103C Board with Arduino IDE
รูปที่ 1 แสดงการต่ออุปกรณ์ต่างๆ สำหรับทดลองการทำงาน

รูปที่ 1 แสดงการต่ออุปกรณ์ต่างๆ สำหรับทดลองการทำงานให้กับบอร์ดควบคุม STM32F103C8T6 คือเป็นการเชื่อมต่อบอร์ด USB to Serial กับบอร์ด STM32F103C8T6 ที่ตำแหน่งขา PA9 และ PA10 สำหรับโปรแกรมคำสั่งและรับ/ส่งข้อมูลที่หน้าต่าง Serial Monitor, การต่อแอลอีดีที่ขา PB12, การต่อสวิตช์ที่ขา PB0 และการต่อตัวต้านทานปรับค่าที่ขา PA0 ซึ่งจะใช้ในการทดลอง 3 แบบ สำหรับการทดลองในตอนที่ 2 นี้

/* Lesson 1: Serial Monitor and LED PB12 Blink */

void setup() {  
  pinMode(PB12, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  Serial.println(" www.electronicsDNA.com");
  digitalWrite(PB12, HIGH);        // turn the LED on (HIGH is the voltage level)
  delay(500);                      // wait for a second
  digitalWrite(PB12, LOW);         // turn the LED off by making the voltage LOW
  delay(500);                      // wait for a second
}
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 2 แสดงผลการทดลอง Serial Monitor and LED PB12 Blink

การทดลองที่ 1 เป็นการส่งสัญญาณลอจิกไปยังขาเอาต์พุต PB12 เพื่อควบคุมการการติด/ดับ ให้กับแอลอีดีทุก 0.5 วินาที และให้ส่งข้อความ www.electronicsDNA.com ไปยังหน้าต่าง Serial Monitor ตลอดเวลา โดยใช้โปรแกรม Lesson 1: Serial Monitor and LED PB12 Blink ซึ่งผลการทดลองดังแสดงในรูปที่ 2 และการทดลองนี้จะเป็นการควบคุมขาในระดับบิตและทดสอบการส่งข้อความต่างๆ ไปยังหน้าต่าง Serial Monitor ของโปรแกรม Arduino IDE

/* Lesson 2: Pushbutton PB0 Control LED PB12 */

const int buttonPin = PB0;
const int ledPin = PB12;

void setup() {
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
  // INPUT_PULLUP keeps pin HIGH when button is NOT pressed
  pinMode(buttonPin, INPUT_PULLUP); 
}

void loop() {
  // Read button state (0 = Pressed, 1 = Not Pressed)
  int buttonState = digitalRead(buttonPin);

  if (buttonState == LOW) {
    digitalWrite(ledPin, HIGH); // Turn LED ON
    Serial.println(" SW ON");
  } else {
    digitalWrite(ledPin, LOW);  // Turn LED OFF
  }
}
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 3 แสดงผลการทดลอง Push button PB0 Control LED PB12

การทดลองที่ 2 เป็นการรับสัญญาณลอจิกมายังขาอินพุต PB0 พร้อมกับการควบคุมการการติด/ดับ ให้กับแอลอีดีที่ขา PB12 และให้ส่งข้อความ SW ON ไปยังหน้าต่าง Serial Monitor ให้ทราบ โดยใช้โปรแกรม Lesson 2: Pushbutton PB0 Control LED PB12 ซึ่งผลการทดลองดังแสดงในรูปที่ 3 สำหรับการทดลองนี้จะเป็นการทดลองรับค่าสัญญาณลอจิกและกำหนดขาอินพุตระดับบิต รวมถึงการส่งข้อความไปยังหน้าต่าง Serial Monitor ของโปรแกรม Arduino IDE

/* Lesson 3: Analog Read & Serial Monitor */

const int potPin = PA0;  // ADC Pin

void setup() { 
  Serial.begin(9600);  
}

void loop() {
  int sensorValue = analogRead(potPin); // Reads 0 - 4095 
  Serial.print(" ADC0 = ");
  Serial.println(sensorValue);    
  delay(200); 
}
Getting Started STM32F103C Board with Arduino IDE
รูปที่ 4 แสดงผลการทดลอง Analog Read & Serial Monitor

การทดลองที่ 3 เป็นการอ่านค่าสัญญาณอะนาลอกขนาด 12 บิต มายังขาอินพุต PA0 และให้ส่งเป็นข้อความ ADC0 = xxxx ไปยังหน้าต่าง Serial Monitor ให้ทราบ (ค่า xxxx คือระดับของสัญญาณอะนาลอกที่อ่านได้) โดยใช้โปรแกรม Lesson 3: Analog Read & Serial Monitor ซึ่งผลการทดลองดังแสดงในรูปที่ 4 และการทดลองนี้จะเป็นการทดลองการอ่านค่าสัญญาณอะนาลอก รวมถึงการส่งค่าสัญญาณอะนาลอกที่อ่านได้เป็นข้อความไปยังหน้าต่าง Serial Monitor ของโปรแกรม Arduino IDE เช่นเดียวกับการทดลองที่ 1 และการทดลองที่ 2 ท้ายนี้สำหรับการทดลองทั้ง 3 แบบตามที่กล่าว เพื่อเป็นความรู้พื้นฐานนำไปประยุกต์ใช้งานต่างๆ ต่อไป 

Reference

  1. https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html
  2. https://www.st.com/resource/en/datasheet/stm32f103c8.pdf
  3. https://github.com/stm32duino/BoardManagerFiles/raw/master/STM32/package_stm_index.json
  4. https://www.pcb-hero.com/blogs/lickys-column/stm32f103c8t6-blue-pill-development-board
  5. https://forum.arduino.cc/t/wiring-uart-communication-between-arduino-nano-softserial-and-stm32f103c8t6/638799/2
  6. https://reversepcb.com/stm32f103c8t6/
  7. https://www.instructables.com/How-to-Program-STM32F103C8T6-With-ArduinoIDE/