CẨM NANG STM32 CĂN BẢN CẦN BIẾT – giới thiệu

1.1. Giới thiệu

Nền tảng ARM Cortex đang được quan tâm nhiều hiện nay bởi vì các thiết bị ARM được bắt gặp ở mọi nơi. Các sản phẩm có chứa các thiết bị ARM có thể kể từ các hệ thống nhúng vi điều khiển nhỏ đến điện thoại di động, cho đến các máy chủ lớn hơn chạy Linux. ARM cũng sẽ sớm góp mặt nhiều hơn trong trung tâm dữ liệu. Đây là những lý do đủ thuyết phục để làm quen với công nghệ ARM.

Các ứng dụng khác bao gồm các hệ thống nhúng trải suốt sàn nhà xưởng để theo dõi nhiệt độ, an ninh và phát hiện hỏa hoạn. Rõ ràng là sẽ không hợp lý khi dùng một hệ thống máy tính để bàn hoàn chỉnh vào kiểu mục đích như thế này. Các hệ thống nhúng độc lập tiết kiệm chi phí và khởi động ngay tức thì. Cuối cùng, kích thước nhỏ của MCU làm cho nó trở thành sự lựa chọn duy nhất cho drone, nơi trọng lượng là yếu tố quan trọng.

Sự phát triển của các hệ thống nhúng theo truyền thống yêu cầu nguồn lực từ hai ngành:

  • Kỹ sư phần cứng
  • Người phát triển phần mềm

Thông thường, một người được giao nhiệm vụ thiết kế sản phẩm hoàn thiện (end product). Kỹ sư phần cứng chuyên thiết kế các mạch điện tử liên quan, nhưng sau cùng, sản phẩm yêu cầu phần mềm. Để tiết kiệm chi phí và thời gian, kỹ sư điện tử thường kiêm nhiệm kỹ sư phần mềm.

Không có gì bất lợi khi một người thực hiện cả hai chuyên ngành miễn là có các kỹ năng cần thiết. Dù cho bạn là kỹ sư điện tử, người phát triển phần mềm (software developer), làm vì sở thích riêng, hay là maker, thì không có gì bằng là tự tay thực hành để nắm vấn đề. Đó là điều mà cuốn sách này nói đến.

=> Bài viết được trích từ sách : Cẩm nang STM32 (tập 1)

STM32F103C8T6

Thiết bị được sử dụng trong cuốn sách này là STMicroelectronics STM32F103C8T6. Số hiệu chi tiết này khá rối rắm, vì vậy ta cần cắt nghĩa nó:

  • STM32 (nền tảng STMicroelectronics)
  • F1 (họ thiết bị)
  • 03 (phân họ thiết bị)
  • C8T6 (dung lượng thực khả dụng của SRAM, bộ nhớ flash, v.v.)

Tên của nền tảng này hàm ý rằng, các thiết bị này sử dụng đường dẫn có độ rộng 32-bit, do vậy mà mạnh hơn đáng kể so với các thiết bị 8-bit.

F103 là một nhánh (F1 + 03) của thiết bị STM32. Phân họ này quyết định khả năng CPU và ngoại vi của thiết bị.

Cuối cùng, hậu tố C8T6 xác định thêm khả năng của thiết bị, như dung lượng bộ nhớ và tốc độ xung.

Thiết bị STM32F103C8T6 đã được chọn sử dụng trong cuốn sách này vì những yếu tố sau:

  • Chi phí thấp (~2 USD trên eBay)
  • dễ mua (eBay, Amazon, AliExpress,…)
  • Khả năng tiên tiến
  • kích cỡ thiết bị

STM32F103C8T6 có chi phí thấp cho sinh viên và người yêu thích nó để khám phá thiết bị ARM Cortex-M3. Thiết bị này có sẵn và cực kỳ tiềm năng. Cuối cùng, kích cỡ nhỏ của PCB cho phép hàn chân cắm vào các cạnh và cắm vào breadboard. Breadboard là cách thuận tiện nhất để thực hiện nhiều loại thí nghiệm khác nhau.

Hình 1-1.  STM32F103C8T6 PCB với các chân hàn, thường được gọi là “Blue Pill”

Chi phí thấp có một lợi thế khác – nó cho phép bạn sở hữu một vài thiết bị cho các dự án liên quan đến giao tiếp CAN, chẳng hạn thế. Cuốn sách này khám phá giao tiếp CAN bằng cách sử dụng ba thiết bị được kết nối bằng một bus chung. Chi phí thấp, nghĩa là với túi tiền sinh viên bạn vẫn có thể làm được.

Sự hỗ trợ của thiết bị ngoại vi của STM32F103 bao gồm:

  • 4 × Cổng GPIO 16-bit (đa số chịu được điện áp 5-volt)
  • 3 × USART (Universal Synchronous/Asynchronous Receiver/Transmitter: Bộ thu/phát đồng bộ/không đồng bộ đa dụng)
  • 2 × bộ điều khiển I2C
  • 2 × bộ điều khiển SPI
  • 2 × ADC (Analog Digital Converter: Bộ chuyển đổi Số – Tương tự)
  • 2 × DMA (Direct Memory Address; bộ điều khiển địa chỉ bộ nhớ trực tiếp)
  • 4 × timer (bộ định thời)
  • 2 × đồng hồ báo hiệu (watchdog timers)
  • 1 × bộ điều khiển USB
  • 1 × bộ điều khiển CAN
  • 1 × bộ phát CRC
  • 20K RAM tĩnh (SRAM)
  • 64K (hoặc 128K) bộ nhớ FLASH
  • CPU ARM Cortex M3, xung tối đa 72 MHz

Tuy nhiên, có một số hạn chế. Ví dụ, bộ điều khiển USB và CAN không thể hoạt động đồng thời. Các thiết bị ngoại vi khác có thể gặp xung đột với các chân I/O được sử dụng. Hầu hết sự xung đột chân được quản lý thông qua cấu hình AFIO (Alternate Function Input Output: Input Output Chức năng Thay thế), cho phép các chân khác nhau được sử dụng cho chức năng của thiết bị ngoại vi.

Trong cấu hình ngoại vi, một số xung riêng biệt có thể được bật riêng để điều chỉnh mức sử dụng năng lượng. Khả năng tiên tiến này của MCU làm cho nó phù hợp với việc nghiên cứu.

Bộ nhớ flash được công bố chính thức là 64K byte, nhưng bạn có thể thấy rằng nó hỗ trợ 128K. Điều này được đề cập trong Chương 2 và cho phép các ứng dụng kích thước khá lớn vẫn đưa được vào bộ nhớ flash của thiết bị.

FreeRTOS

Không giống như dòng chip AVR phổ biến (hiện thuộc sở hữu của Microchip), họ STM32F103 có đủ SRAM (RAM tĩnh) để chạy thoải mái FreeRTOS (freertos.org). Quyền truy cập vào một RTOS (hệ điều hành thời gian thực) cho ta một số lợi thế, bao gồm:

  • Đa nhiệm ưu tiên;
  • Hàng đợi;
  • Mutex và semaphore; và
  • Software timer.

Lợi thế đặc biệt là khả năng đa nhiệm. Nó giúp giảm bớt đáng kể gánh nặng của việc thiết kế phần mềm. Có nhiều dự án Arduino tiên tiến lại bị nặng nề việc xử lý do sử dụng các máy trạng-thái (state machine) với một mô hình vòng lặp sự kiện (event loop model). Mỗi lần qua vòng lặp, phần mềm phải kiểm tra vòng (poll) xem event đã xảy ra chưa, và quyết định xem đã đến thời điểm cho một thao tác (action) nào đó chưa. Điều này đòi hỏi phải quản lý các biến trạng thái, mà sẽ chóng trở nên phức tạp và dẫn đến lỗi lập trình. Ngược lại, đa nhiệm ưu tiên cung cấp các tác vụ điều khiển riêng biệt, thực hiện rõ ràng chức năng độc lập của chúng.

FreeRTOS cung cấp đa nhiệm ưu tiên, tự động chia thời gian CPU giữa các tác vụ được định cấu hình. Tuy vậy, các tác vụ độc lập có đặt thêm nhiệm vụ cho việc tương tác một cách an toàn giữa chúng. Đây là lý do tại sao FreeRTOS cũng cung cấp hàng đợi tin nhắn (message queue), semaphore, mutex và nhiều thứ khác để quản lý an toàn. Chúng ta sẽ tìm hiểu RTOS trong suốt cả quyển sách này.

libopencm3

Phát triển code cho các ứng dụng MCU có thể rất khắt khe. Một phần của sự đòi hỏi này là phát triển với phần cứng của nền tảng đó. Nó bao gồm tất cả các thanh ghi (register) ngoại vi chuyên dụng và địa chỉ của chúng. Ngoài ra, nhiều thiết bị ngoại vi yêu cầu một “vũ điệu” nhất định mới có thể sẵn sàng để sử dụng.

Đây là chỗ mà libopencm3 rất phù hợp (từ libopencm3.org). Nó không chỉ xác định địa chỉ bộ nhớ cho các địa chỉ thanh ghi ngoại vi, mà nó còn định nghĩa các macro cho các hằng số đặc biệt cần thiết. Cuối cùng, thư viện bao gồm các hàm C đã được kiểm tra để tương tác với các thiết bị phần cứng ngoại vi. Dùng libopencm3 đỡ cho chúng ta phải bắt tay làm mọi việc từ đầu.

Không Arduino

Không có code Arduino nào được trình bày trong cuốn sách này. Arduino phục vụ mục đích của nó khá tốt, cho phép học sinh nghiên cứu thế giới MCU mà không cần có kiến thức tiên quyết. Tuy vậy, cuốn sách này nhắm đến mục tiêu xa hơn môi trường Arduino, bằng một chế độ phát triển chuyên nghiệp độc lập với các công cụ Arduino.

Không có Arduino, không có “cổng digital 10.” Thay vào đó, làm việc trực tiếp với một cổng MCU và tùy chọn một chân.

Không IDE

Là một quyết định hữu lý khi chọn cho quyển sách này một môi trường phát triển trung lập với các lựa chọn với nền tảng phát triển trên máy tính. Có một số môi trường IDE dựa trên hệ điều đành Windows có sẵn, với những giấy phép (license) khác nhau. Nhưng IDE thay đổi, license thay đổi, và các thư viện liên kết với chúng cũng thay đổi theo thời gian. Lợi thế của IDE chọn trước thường bị loại bỏ khi IDE và hệ điều hành nó chạy trên đó thay đổi.

Bằng lối tiếp cận thuần là nguồn mở, bạn có lợi thế là được bảo vệ khỏi những thay đổi chóng mặt giữa các phiên bản. Bạn có thể lưu trữ lại toàn bộ code và những công cụ hỗ trợ, và tin rằng chúng có thể được khôi phục hoạt động lại vào mười năm sau, nếu cần. Ngược lại, khôi phục phần mềm có bản quyền sẽ có những bất lợi, nếu bản quyền đó hết hạn, hay website đó “đóng cửa”.

Cuốn sách này phát triển các dự án dựa trên các công cụ và thư viện nguồn mở sau:

  • gcc/g ++ (tập hợp trình biên dịch GNU: nguồn mở)
  • make (GNU binutils: open sourced)
  • libopencm3 (thư viện: nguồn mở)
  • FreeRTOS (thư viện: mã nguồn mở và miễn phí cho mục đích thương mại)

Với cơ sở này, các dự án trong cuốn sách này sẽ vẫn có thể sử dụng được lâu dài sau khi bạn mua cuốn sách này. Hơn nữa, nó cho phép người dùng Linux, FreeBSD và MacOS – ngoài những người sử dụng nền tảng Windows – sử dụng cuốn sách này. Nếu dùng Windows, bạn sẽ cần tải về và cài đặt môi trường Cygwin (www.cygwin.com), vì chúng ta sẽ dùng một môi trường tựa-Linux để build các dự án demo.

Tất cả các dự án được trình bày sử dụng tiện ích GNU make (GNU không phải là Unix), cung cấp một số chức năng build với thời gian tối thiểu. Nếu các bản build được cho trong cuốn sách này có lỗi, khi đó hãy sử dụng trình nhập lệnh (command) GNU make, đặc biệt là trên FreeBSD. Một số hệ thống cài đặt GNU make là gmake.

=> xem thêm : Lập trình Arm STM32

Framework Phát triển

Mặc dù gcc, libopencm3 và FreeRTOS có thể hoạt động cùng nhau, nhưng nó đòi hỏi nhiều công sức và sự sắp xếp. Thời gian của bạn đáng giá bao nhiêu?

Thay vì làm công việc tẻ nhạt này, có một framework phát triển có sẵn trên github.com để tải về miễn phí. Framework này tích hợp libopencm3 với FreeRTOS. Trên đó cũng có sẵn các file make cần thiết để thực hiện toàn bộ cây dự án (project tree) cùng một lúc hoặc từng dự án riêng lẻ. Cuối cùng, có một số chương trình (routine) thư viện nguồn mở có thể rút ngắn thời gian phát triển của các ứng dụng mới. Framework này có thể tải xuống tại github.com hoặc tải xuống theo code riêng của cuốn sách.

=> Sách Arduino, ESP8266, STM32 : Sách tự động hóa