9.7 C
London
Thứ Tư, Tháng 2 11, 2026

Modbus RTU STM32 (Phần 2)

phần 1 mình đã trình bày lý thuyết về giao thức Modbus. Phần này mình sẽ hướng dẫn các bạn cách thêm thư viện FreeModbus và sử dụng trong chương trình STM32.

Công cụ phát triển

Các bạn cần cài đặt các công cụ này để có thể thực hiện được project:

  • STM32CubeMX – Công cụ sinh code tự động
  • KeilC V5 – Công cụ biên dịch, lập trình, nạp chương trình cho STM32 và debug
  • Modbus Poll – Công cụ test truyền thông Modbus

Cấu hình STM32CubeMX, sinh code sang KeilC

Các bạn có thể có rất nhiều cách lập trình cho STM32.

Ví dụ như sử dụng bộ thư viện chuẩn Std, cấu hình và tạo project trực tiếp trên KeilC mà không cần qua STM32CubeMX. Cách này sẽ phức tạp hơn và mất thời gian hơn, không trực quan bằng sinh code từ STM32CubeMX, nên dùng cho những ai đã có kinh nghiệm.

Hay dùng công cụ Arduino IDE. Cách này mình không khuyến khích các bạn học lập trình, vì sẽ không hiểu sâu được vấn đề. Chỉ phù hợp cho bạn nào mới tiếp cận về lập trình.

Do vậy, mình sẽ sử dụng công cụ STM32CubeMX để triển khai project cho STM32F1, giúp các bạn dễ tiếp cận, hiểu được vấn đề để có thể áp dụng trên các dòng chip khác của STM32.

Cấu hình clock

Sử dụng thạch anh ngoại 8Mhz (nếu sử dụng thạch anh nội, phần này không cần cấu hình)

Qua bộ nhân chia tần số, tần số clock hệ thống bây giờ là 72Mhz

Cấu hình UART

Baudrate: 19200

Enable Interrupt

TX: PA2

RX: PA3

DIR: PA4 (Đây là chân điều khiển truyền hay nhận dữ liệu, được cấu hình ở mode GPIO Output)

Bật ngắt UART:

Cấu hình Timer

Timer 4 sử dụng làm bộ hẹn giờ cho giao thức Modbus

Bật ngắt Timer 4:

Enable FreeRTOS

Ở đây mình sử dụng RTOS cho chương trình Modbus. Sau này việc thêm vào các task để xử lý tác vụ khác sẽ dễ dàng vì không làm ảnh hưởng đến task chạy Modbus

Chọn Serial wire

Chọn Timer 3 (hoặc 1 Timer nào khác chưa được sử dụng tùy theo bạn)

Chế độ của các GPIO

PA4: Chân (DIR) điều khiển IC truyền thông RS485 để xác định chế độ là truyền hay nhận

PA11: Chân điều khiển LED (chân demo)

PB7: Chân nhận nút nhấn (chân demo)

PC13: Chân điều khiển led(chân demo)

Sinh code sang KeilC

Đặt tên Project

Chọn đường dẫn lưu project

Chọn IDE phát triển, phiên bản IDE

Thêm các thư viện cần thiết

Sau khi chọn xong các bạn nhấn Generate Code và mở project vừa tạo

Thêm thư viện FreeModbus

Thư viện FreeModbus được mình thêm vào trong Middlewares\Third_Party của dự án:

Trong cây thư mục của dự án, các bạn tạo 1 group để chứa các file .c của thư viện Modbus và tạo thêm 1 file mbtask.c để chứa hàm xử lý dữ liệu Modbus

Thêm đường dẫn để KeilC biết nơi để thư viện để biên dịch

Rồi! Xong phần tạo project ban đầu. Tiếp theo sẽ đến phần chỉnh sửa thư viện FreeModbus, viết chương trình Demo chạy trêN STM32F103C8T6 và cách triển khai trên các dòng chíp khác. Tất cả có trong phần 3

5/5 - (1 bình chọn)
Admin Peter
Admin Peterhttps://capitlab.com/
Coder & Hardware Designer $ Embedded Linux

Nội dung hấp dẫn

Giao thức I2C – Ví dụ với STM32

I2C (Inter-Integrated Circuit) là một giao thức truyền thông nối tiếp sử dụng 2 dây là SCL (tín hiệu clock) và SDA (tín hiệu dữ liệu)

Modbus RTU STM32 (Phần 3)

Ở phần 1 và phần 2 mình đã giới...

Modbus RTU STM32 (Phần 1)

Trong các hệ thống điều khiển công nghiệp, Modbus...

STM32 HAL driver với cảm biến nhịp tim MAX30100 sử dụng STM32CUBE IDE

Cấu tạo và cách giao tiếp với cảm biến...

Thiết kế mạch cầu H tích hợp PID

Bài viết này mình sẽ chia sẻ cho...

Đặt mạch Trung Quốc, mua linh kiện hiếm

Bài viết nói về đặt mạch Trung Quốc và...

Nội dung liên quan

Giao thức I2C – Ví dụ với STM32

I2C (Inter-Integrated Circuit) là một giao thức truyền thông nối tiếp sử dụng 2 dây là SCL (tín hiệu clock) và SDA (tín hiệu dữ liệu)

Modbus RTU STM32 (Phần 3)

Ở phần 1 và phần 2 mình đã giới thiệu về giao thức Modbus và cấu hình STM32CubeMX cho project. Ở phần cuối này,...

Modbus RTU STM32 (Phần 1)

Trong các hệ thống điều khiển công nghiệp, Modbus RTU là một trong những giao thức truyền thông phổ biến và dễ triển khai...