- vừa được xem lúc

Lập trình GPIO nhấp nháy LED trên STM32F103C8T6

0 0 3

Người đăng: sinusoid

Theo Viblo Asia

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

image.png

À, 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

image.png

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

image.png

  • Thiết lập cấu hình trên CubeMX, cụ thể là chọn chế độ debug là serial wireset cho chân PC13 là chân output

image.png

  • 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

image.png

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.


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 😉

Bình luận

Bài viết tương tự

- vừa được xem lúc

Lập trình điều khiển hiển thị LED 7 thanh trên STM32F103C8T6

Cao cấp hơn LED đơn một tí, hôm nay mình sẽ lập trình để hiển thị từ 1 đến 10 trên LED 7 thanh. Linh kiện sử dụng: STM32F103C8T6, ST-Link V2, LED 7 thanh anode chung, bread board, 7 điện trở 220 ohm,

0 0 1

- vừa được xem lúc

Lập trình điều khiển hiển thị LED 7 thanh trên STM32F103C8T6

Cao cấp hơn LED đơn một tí, hôm nay mình sẽ lập trình để hiển thị từ 1 đến 10 trên LED 7 thanh. Linh kiện sử dụng: STM32F103C8T6, ST-Link V2, LED 7 thanh anode chung, bread board, 7 điện trở 220 ohm,

0 0 1