ทดลองใช้งาน STM32 / STM32F103C8T6

สวัสดีวันสงกรานต์ นานๆทีจะอยู่เมืองไทยไม่ได้ไปเที่ยวไหนช่วงวันหยุดยาว ปีนี้ก็เลยได้กลับบ้านสวนที่บางคนที สมุทรสงคราม กะว่าจะมานั่งเขียนสารนิพนธ์ที่นี่ซึ่งผ่านมาหนึ่งวันแล้วก็ยังไม่ได้เริ่มสักบรรทัด เมื่อวานก็เลยหยิบ Heltec ESP32 Lora 915MHz ที่ติดมาด้วยมาทดสอบซะหน่อย ปรากฎว่าเสียไปตัวนึง โดนพี่จีนเล่นเข้าให้ซะแล้วเหอๆ ก็เลยเก็บใส่กล่องเหมือนเดิม รอตัวใหม่ส่งมา

วันนี้ก็เลยเอาอุปกรณ์ที่ยังไม่เคยลองตัวอื่นมาลองกัน ก็คือ STM32F103C8T6 (ชื่อยาวมากกก) เพราะคราวนี้มีหยิบ USB to Serial ติดตัวมาด้วย โดย STM32 Series F103 นี้ก็ใช้ Core ของ ARM 32Bit-M3 มี Ram มาให้ 20KB และ Flash Memory 64KB มี GPIO ให้ใช้งานเพียบ ซึ่งมาพร้อมกับ ADC 12 Bit ถึง 10 Port ด้วยกัน ถ้าใครจะใช้กับงานที่รับค่าจาก Sensor Output ที่เป็น Analog ก็สบายเลยตัวเดียวต่อเซนเซอร์ได้หลายตัว ส่วนเรื่อง Connectivity ก็อาจใช้ ESP-01 มาเป็นตัว Bridge เพื่อออก Internet ก็ได้

Pinout

เพื่อความเข้าใจง่ายและไว้อ้างอิง เพราะขามันเยอะเหลือเกินสามารถดู Pinout จาก Diagram ด้านล่างนี้เลยครับ เลือกใช้งานให้เหมาะสม บางขาทนแรงดันได้ 5V บางขา 3.3V หรือถ้าจะใช้งาน PWM ก็ต้องเลือกขาที่รองรับให้ถูก

 

Key Features

  • ARM® 32-bit Cortex® -M3 CPU Core
    • 72 MHz maximum frequency,1.25 DMIPS/MHz (Dhrystone 2.1) performance at 0 wait state memory access
    • Single-cycle multiplication and hardware division
  • Memories
    • 64 Kbytes of Flash memory
    • 20 Kbytes of SRAM
  • Clock, reset and supply management
    • 2.0 to 3.6 V application supply and I/Os
    • POR, PDR, and programmable voltage detector (PVD)
    • 4-to-16 MHz crystal oscillator
    • Internal 8 MHz factory-trimmed RC
    • Internal 40 kHz RC
    • PLL for CPU clock
    • 32 kHz oscillator for RTC with calibration
  • Low-power
    • Sleep, Stop and Standby modes
    • VBAT supply for RTC and backup registers
  • 2 x 12-bit(4096), 1 μs A/D converters (up to 16 channels)
    • Conversion range: 0 to 3.6 V
    • Dual-sample and hold capability
    • Temperature sensor
  • DMA
    • 7-channel DMA controller
    • Peripherals supported: timers, ADC, SPIs, I2 Cs and USARTs
  • Up to 80 fast I/O ports
    • 26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
  • Debug mode
    • Serial wire debug (SWD)
  • 7 timers
    • Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input
    • 16-bit, motor control PWM timer with dead-time generation and emergency stop
    • 2 watchdog timers (Independent and Window)
    • SysTick timer 24-bit downcounter
  • Up to 9 communication interfaces
    • Up to 2 x I2 C interfaces (SMBus/PMBus)
    • Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control)
    • Up to 2 SPIs (18 Mbit/s)
    • CAN interface (2.0B Active)
    • USB 2.0 full-speed interface
  • CRC calculation unit, 96-bit unique ID

 

Wiring with USB to Serial

การใช้งานร่วมกันระหว่าง STM32F103C8T6 ตัวนี้กับ PC เพื่อ Upload Code/Debug ก็สามารถทำได้หลายวิธี ซึ่งที่นิยมกันก็คือผ่านทาง STLink หรือ Serial Port แต่เท่าที่หาข้อมูลมา ST Link กับ Mac OSX นั้นใช้งานยุ่งยากพอสมควร ก็เลยตัดวิธีนี้ทิ้งซะ แล้วใช้ usb to serial ที่มีอยู่แทน ซึ่งการต่อสายก็เหมือนรูปด้านล่างนี้เลยครับ หรือดูจาก Diagram เราจะเห็นเลยว่าขา A9, A10 เป็นขาเพื่อใช้งาน USART อยู่แล้ว

 

STM32 Jumper

ในการ Upload Code จาก PC ไปที่ STM32F103C8T6 นี้นอกจากการต่อสายให้ถูกแล้วเรายังต้องดูตำแหน่งของ Jumper ที่อยู่เหนือปุ่ม Reset ด้วยโดยตัวบน (วางบอร์ดให้ปุ่ม reset อยู่ด้านล่าง) จะเป็นตำแหน่ง Jumper ของ Boot0 ซึ่งถ้าจับคู่ซ้าย (GND) จะอยู่ในตำแหน่ง Operate หรือการใช้งานปกติ แต่ถ้าต้องการจะ Upload Code ต้องให้จับคู่ขวา (3.3V) จึงจะสามารถ Upload Code ได้

 

Arduino IDE Boardmanager

เมื่อจัดการในเรื่องของ Hardware และการต่อสายแล้วมาดูในเรื่องของ Code กันบ้าง ซึ่งเราก็จะใช้ Tool ในการพัฒนาที่เรียกได้ว่าเอนกประสงค์กับการพัฒนาหลายๆ Hardware แต่ใช้ IDE ตัวเดียวกันนั่นก็คือ Arduino IDE พระเอกของเรานั่นเอง

เริ่มต้นก็ต้องเพิ่ม Board STM32F103C Series ของเราเข้าไปที่ Board Manager ของ Arduino IDE ซะก่อน โดยเข้าไปที่หน้า Preference แล้วใส่ URL ตามด้านล่างนี้เข้าไป

http://dan.drown.org/stm32duino/package_STM32duino_index.json

 

จากนั้นก็เข้าไปที่ Tools –> Boards –> Boards Manager แล้วค้นหาคำว่า STM32 จะเจอชุดบอร์ดของ STM32F1xxx ก็กด Install ได้เลยครับ

 

First App Blink

มาดูที่โปรแกรมแรกของเรากันบ้าง ถ้าใครใช้งาน Arduino หรือ ESP8266/ESP32 มาในการอ้างอิงการใช้งาน GPIO ก็อาจจะอ้างเป็น GPIO Pin นั้นๆไปเลย หรืออย่าง Nodemcu ก็ใช้งานเป็น D1, D2 แต่สำหรับ STM32F103C8T6 ตัวนี้จะอ้างอิงโดยใช้ PA, PB, PC อย่างเช่น Built-in LED จะต่ออยู่ทีขา PC13 อย่างใน Code ทำไฟกระพริบข้างล่าง ซึ่งผมก็ต่อ LED เรียงกันอีก 6 ดวงกับขา PA0,2,4,6 และขา PB0,10

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin PB1 as an output.
  pinMode(PC13, OUTPUT);
  pinMode(PA0,OUTPUT);
  pinMode(PA2,OUTPUT);
  pinMode(PA4,OUTPUT);
  pinMode(PA6,OUTPUT);
  pinMode(PB0,OUTPUT);
  pinMode(PB10,OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(PC13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(100);              // wait for a second
  digitalWrite(PC13, LOW);    // turn the LED off by making the voltage LOW

  digitalWrite(PA0, HIGH);   
  delay(100);              
  digitalWrite(PA0, LOW);     

  digitalWrite(PA2, HIGH);   
  delay(100);              
  digitalWrite(PA2, LOW);    

  digitalWrite(PA4, HIGH);   
  delay(100);              
  digitalWrite(PA4, LOW);    

  digitalWrite(PA6, HIGH);   
  delay(100);              
  digitalWrite(PA6, LOW);    

  digitalWrite(PB0, HIGH);   
  delay(100);              
  digitalWrite(PB0, LOW);  

  digitalWrite(PB10, HIGH);   
  delay(100);              
  digitalWrite(PB10, LOW);      

  
  
  
}

 

Upload Code

ในส่วนของการ Upload Code นั้นเราก็จะต้องเลือกวิธีการ Upload ให้ถูกต้องด้วย ของผมใช้การ Upload ผ่าน usb to serial ก็เลือกเป็นแบบ Serial และเลือก Port ให้ถูกต้องจากนั้นก็ Upload Code ได้เลยครับ แต่ครับแต่ ก่อนการกด Upload นั้นให้กดปุ่ม reset บนบอร์ดของเราหนึ่งทีก่อน แล้วค่อยทำการ Upload ไม่อย่างนั้นก็จะขึ้น error ไม่สามารถ Upload Code ได้ครับ

มาดูลผลลัพท์กันบ้างกับโค้ดแรกในการทำไฟกระพริบกับบอร์ด STM32F103C8T6

เวลาใช้งานจริงก็อย่าลืมสลับ jumper ของ boot0 กับไปที่คู่ด้านซ้าย (GND) กันด้วยนะครับ ไม่งั้นพอจ่ายไฟปุ้บมันก็จะเข้าสู่โหมดของการ Upload Code ไม่เข้าสู่การทำงานตามโปรแกรมที่เรา Upload ไป

 

สรุป

ไม่ต้องปรับตัวกับการใช้งานเลยเพราะใช้งานผ่าน Arduino IDE มี GPIO ให้ใช้งานเยอะมาก รวมถึง ADC 12Bit 10 Port ยังมี RTC อีกแต่ยังไม่ได้ทดสอบ ซึ่งถ้างานที่ทำต้องใช้คุณสมบัติที่ว่ามา STM32F103C8T6 ตัวนี้ตอบโจทย์ได้ดีเลย แต่ในด้านของ Connectivity ถ้าจะเอาไปทำงานลักษณะของ IOT อาจต้องมีการ Bridge ไปที่ ESP-01 / ESP8266 /ESP32 หรือแม้กระทั่ง Lora ก็สามารถทำงานได้เหมือนกัน

 

ข้อมูลเพิ่มเติม (STM32F103C8 BluePill)

Author: Joe D.S.
Just a man on earth

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.