GPIO với STM32CubeMX trong STM32F303.
- Cấu hình trên STM32 cubeMx.
- New project . Cửa sổ mới được mở ra. Chọn loại MCU theo tên hoặc theo họ, loại package… Ở đây mình nhớ tên luôn nên gõ vào cho nhanh STM32F303CCT6.
- Chọn loại MCU, Double click vào tên MCU được tìm thấy hoặc bấm vào Start project để bắt đầu quá trình cài đặt. Cấu hình thạch anh, chuẩn nạp trước tiên như bài 01. Bài này sử dụng 1 button(mình sử dụng chân PB8, cấu hình input) và 1 led (sử dụng chân PB9, output). Click chuột trái để chọn chức năng cho ngoại vi.Click chuột phải để tạo nhãn cho chân ngoại vi cho dễ nhìn.
- Cấu hình clock ở tab clock configuration. Tùy thuộc vào thạch anh sử dụng và các ứng dụng khác nhau mà chỉnh tốc độ clock ở các mode khác nhau. Ở đây mình đã sử dụng thạch anh 8Mhz nên có thể điều chỉnh tốc độ tối đa của HCLK là 72Mhz. Những chỗ nào mà thay đổi giá trị được thì chỗ đó được phép thay đổi clock. Chúng ta có thể quan sát được đầu ra của tất cả các ngoại vi. Khá rõ ràng đúng không.
- Tab configuration . Chúng ta chỉ sử dụng GPIO mà không có ngắt nên chỉ quan tâm đến tab GPIO trong mục System. Các thông số như sau:
- LED –PB9 :
- GPIO output level : chỉ trạng thái mặc định khi chưa tác động đến nó(trạng thái khởi tạo chương trình).
- GPIO mode: có 2 mode lựa chọn là Push pull và open drain khi lựa chọn ngõ ra là output. 2 mode này mình đã giải thích trong phần STM8S.
- GPIO pull up/ pull down: lựa chọn việc nội trở bên trong MCU nối nguồn hay nối đất.
- Maximum output speed: chỉnh tốc độ tối đa của ngõ ra high, medium, low tương ứng với 50Mhz, 20Mhz, 10Mhz.
- Fast mode: mode này chỉ áp dụng với một số chân có chức năng I2C.
- BUTTON – PB8:
- GPIO mode: chỉ có 1 mode duy nhất là input.
- GPIO pull up/ pull down : lựa chọn việc có kéo trở nối nguồn hay nối đất.
- Cài đặt file xuất ra cho project : vào Project -> settings.
- Tab project :
- Projetc name : chứa tên gọi của project.
- Project location : chứa nơi lưa trữ project.
- Toolchain /IDE : chọn trình biên dịch mà mình mong muốn.
- Tab code generate :
- STM32Cube firmware library package : chọn Copy only the nesscessary library files… để chỉ add những file thư viện cần thiết.
- Các thư mục khác để mặc định chưa cần quan tâm đến.
- Tab Advanced Settings : để các thông số mặc định.
- Sinh ra code bằng cách nhấn vào biểu tượng hoặc vào Project -> generate code. Chờ quá trình thực hiện xong và mở code lên.
- Chỉnh sửa code trên keil C.
- Hàm HAL_GPIO_ReadPin : đọc trạng thái của chân GPIO trả về.
- HAL_GPIO_TogglePin : đảo trạng thái led bằng thuật toán xor.
- HAL_delay: hàm delay tuyệt đối của chương trình, dùng system tick timer. Hàm này tự động được sinh ra khi chọn timebase Source trong Tab Pinout – SYS là Systick.
- Vòng lặp while() : kiểm tra xem trạng thái nút nhấn đã được nhả ra hay chưa.
- Bài tập.
Vd : Cấu hình chân PB8 là nút nhấn(input), PB9 là chân LED(output). Khi mỗi lần có có tác động nút nhấn ở chân PB8 thì Led ở chân PB9 sẽ đảo trạng thái. Trạng thái mặc định ban đầu là tắt.
Các tab RCC và SYS để mặc định. Nhấn OK để đóng tab.
Để chạy được chương trình ở lần đầu tiên, cần chọn reset and run trong options of target.
Code được sửa như hình sau:
Lưu ý : nhớ thêm code vào giữa phần begin và end để không mất code khi generate code lần 2.
Thay đổi led và button với các chân ngoại vi khác, đặc biệt là các chân PC13,PC14, PC15. Quan sát hiện tượng xảy ra.
Kết luận :các chân PC13,PC14, PC15 bị hạn chế chức năng GPIO và nó được sử dụng cho các chức năng đặc biệt.
Link tải ví dụ demo
Hàm HAL_GPIO_Int(......) có chức năng gì ạ??
ReplyDeleteChào bạn, hàm này có chức năng cập nhật các giá trị setting trước đó vào các thanh ghi như mode, tốc độ, trở pullup/down.
Delete