Lập trình GPIO nhấp nháy LED trên STM32F103C8T6
Bên IT khi bắt đầu với một ngôn ngữ mới có Hello World thì bên điện tử khi làm với một vi điều khiển mới cũng có nháy LED. Vậy ở bài mở bát cho series về STM32 mình sẽ làm sao để LED nhấp nháy 5 lần một giây (f = 5Hz)
I. Mình sử dụng
1. Linh kiện
- Kit phát triển Blue Pill STM32F103C8T6
- Mạch nạp ST-Link
À, cách nối 2 chúng nó lại với nhau là cứ nhìn tên 4 cái chân thò ra trên kit giống tên chân nào trên STLink thì mình cắm dây vào thôi 😁
⚠️ kiểm tra nối đúng tên 2 lần vào kẻo chip và mạch nạp rủ nhau cụ đi chân lạnh toát
2. Phần mềm
- STM32CubeIDE
II. Phân tích yêu cầu
Yêu cầu | Nghĩa là | Công cụ |
---|---|---|
Nhấp nháy LED | cho nó bật rồi lại cho nó tắt | HAL_GPIO_WritePin() |
Nhấp nháy 5 lần một giây | mỗi lần nhấp nháy kéo dài 0.2s ( = 200 ms) -> cho sáng 100ms, tắt 100 ms | HAL_Delay() |
LED ở đâu ra? -> trên kit Blue Pill STM32F103C8T6 đã nối sẵn một LED cho người dùng vào chân PC13
Nhìn hình ta có, một đầu LED đã được nối lên cực dương 3.3 V (mức cao), một đầu LED được nối với chân PC13, vậy khi ta thiết lập mức thấp cho chân PC13 thì LED sáng, còn khi thiết lập mức cao thì LED tắt.
III. Thực hành
Xem video cho trực quan.
- Mở app STM32CubeIDE
- Tạo project: File -> New -> STM32 Project
- Thiết lập cấu hình trên CubeMX, cụ thể là chọn chế độ debug là serial wire và set cho chân PC13 là chân output
- Ctr + S để lưu và tạo code sang CubeIDE
- Code vào trong phần while (1) của hàm main
Cách 1:
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 0); // thiết lập mức thấp trên chân PC13
HAL_Delay(100); // tạo trễ 100ms
HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13, 1);
HAL_Delay(100);
Cách 2:
HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_13); // đảo trạng thái trên chân PC13
HAL_Delay(100);
- Click chuột phải vào tên project, build code, không lỗi lầm gì thì cắm ST Link để nạp code
Ok, nhiệm vụ hoàn thành 😎
IV.Mình đã từng thắc mắc
Không dùng STM32CubeIDE được không?
- Được, ở trên trường mình dùng KeilC, anh mình dùng makefile,... nói chung ai thích/quen dùng gì thì dùng, nhưng STM32CubeIDE là phần mềm free của hãng, và sau khi dùng qua KeilC lẫn CubeIDE thì mình thích CubeIDE hơn, cảm giác là trông nó đẹp, với nó có cái outline ở bên cạnh, không phải lăn chuột tìm hàm main như bên KeilC.
- À nhưng mà nếu muốn tạo file hex để mô phỏng trên proteus thì bên CubeIDE lại hơi khù khoằm, để lúc nào mình phải mò thêm.
Tải STM32CubeIDE rồi thì còn cần tải STM32CubeMX nữa không?
- Không, STM32CubeIDE tích hợp cả STM32CubeMX rồi.
Chip fake
- Chip fake đểu thì không nạp được trên CubeIDE, còn chip fake xịn mà có chữ chính hãng thì nạp được =)) Mọi người có 2 phương án: mua chip fake chính hãng tầm 100k hoặc dùng KeilC or STlink Utility
Kit dùng dip rời và kit hàn sẵn
Mình từng mua loại dip rời, xong lập trình nháy LED bị gặp một lỗi là: nếu dùng LED sẵn trên chân PC13 thì được nhưng cắm LED ngoài vào chân khác thì không được, hoá ra là do không tiếp điện dù mình để 2 chân của LED cặp vào 2 cái lỗ tròn tròn để cắm dip ấy. Túm váy lại là nên mua kit hàn sẵn, hoặc mua loại rời thì về cũng phải tự hàn vào.
Thông tin chi tiết về các hàm
Để bài viết ngắn gọn, đáp ứng nhu cầu làm thấy ngay thì mình sẽ không đào sâu vào nguyên lý như: thư viện HAL là gì, tham số của các hàm đã dùng ra sao, các hàm đấy làm gì, tác động lên thanh ghi nào để điều khiển,... Nếu có thời gian thì mình sẽ bổ sung những thông tin này lên file .md và up trên github kèm code.
V.Các tài liệu nên có
Một kinh nghiệm quý giá mà mình học được từ thầy mình là cứ tài liệu của hãng mà quất, đảm bảo chính xác, không bị tam sao thất bản, vả lại sau này làm đến những ngóc ngách chưa ai lên bài, kiểu gì cũng phải đọc tài liệu thôi.
- Schematic của kit Blue Pill STM32F103C8T6
- Reference manual
- Datasheet của STM32F103C8T6
- Mô tả về thư viện HAL trên dòng F1
Chín bút:
- Mình viết bài với mục đích lưu trữ kiến thức là chính, và tiện thể nếu giúp được ai thì càng tốt.
- Do kiến thức có hạn nên không thể tránh khỏi những sai sót, mọi ý kiến mang tính xây dựng sẽ luôn được lắng nghe.
- Chúc mọi người học vui 😉
All rights reserved