GPIO (General Purpose Input/Output) chính là các chân Đầu ra hoặc đầu vào dùng chung.
Tại sao lại là dùng chung?
Bởi vì mỗi chân GPIO ngoài các chức năng Input/Ouput chúng còn có thêm các chức năng khác ứng với các ngoại vi khác. Ví dụ: I2C, SPI, UART, ADC… Tất cả các chân này đều có thể sử dụng như 1 cổng I/O để đọc hoặc xuất dữ liệu theo Bit.
STM32 GPIO bao gồm nhiều Port, mỗi Port có tối đa 16 chân.
STM32 GPIO được cấu tạo như sau:
STM32 GPIO bao gồm 2 khối cơ bản:
Chức năng của STM32 GPIO bao gồm:
Input:
Output:
Sau khi đã chuẩn bị đầy đủ chúng ta bắt đầu với bài học đầu tiên khi làm quen với bất kì con chip nào đó là nháy led
Đầu tiên chúng ta mở phần mềm cubemx lên, Click vào Access to MCU selector , các bạn cũng có thể chọn Access to Board Selector nếu sử dụng các KIT của hãng.
Sau đó gõ STM32F103C8 vào ô tìm kiếm, chọn chip và nhấn Start project
Trong mục SYS các bạn chọn Serial debug, để chọn 2 chân PA13 và PA14 là chân nạp, nếu ko chọn mỗi khi cần nạp bạn phải giữ nút reset và nạp mới được.
Còn lại để mặc định
Trong RCC chọn HSE nếu chạy bằng thạch anh ngoài, ko chọn gì sẽ chạy bằng thạch anh nội
Chọn PC13 là output, mở tab GPIO sửa User Label là LED
Chọn PA0 là GPIO_Input, trong GPIO chọn Pullup, sửa label là Button
Phần Clock config, để mặc định đó là thạch anh nội 8Mhz, phần Project Manager Gõ tên project, nơi lưu trữ, chọn tool chain là MDK-ARM V5, sau đó nhấn Generate Code
Bài đầu chúng ta bắt đầu code cho Led nhấp nháy với chu kì là 500ms
Trong phần while(1) ta viết hàm
Hàm Toggle có nhiệm vụ đảo trạng thái của Pin LED, Hal_Delay(500) sẽ cho CPU chờ mỗi 500ms và lien tục lặp đi lặp lại trong while
Lưu ý: các bạn phải viết code trong khoảng USER CODE BEGIN và USER CODE END nhé. Vì nếu bạn thay đổi trong file Cube và Gen code lại, các code ngoài khoảng này đều bị xóa hết.
Sau đó các bạn click vào Flash -> Configure flash tools-> Debug. Trong Tab Debug chọn Setting -> Flash Download Tick và Reset and Run
Bước này sẽ giúp MCU tự động Reset và chạy chương trình sau khi nạp nhé.
Để nạp chương trình các bạn cắm mạch nạp vào đúng các dây 3.3V GND SWDIO SWCLK, sau đó cắm vào máy tính nhấn nút Load hoặc F8 là oke.
Lưu ý: các bạn phải nhấn F7 hoặc biểu tượng Build để IDE Complier file nếu ko có lỗi mới nạp dc nhé
Hiện như thế này là oke
Tạo một biến u8_Status lưu giá trị nút nhấn
Trong While chúng ta đọc giá trị nút nhấn bằng lênh Read và ghi lên Led bằng Lệnh Write
Build và nạp lên kit, kết nối PA0 với nút nhấn và nhấn thử