Ở 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
Bật debug qua STlink, Chọn timer cho RTOS
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