Hôm nay mình giới thiệu lập trình STM32F4 với GPIO,
Mình dùng thư viện STD cho HAL
Vì dùng STD thư viện biên dịch nhẹ hơn HAL .
Đầu tiên Cấu hình GPIO
GPIO STM32 có các chế độ như Input,Output,ADC,DAC,SPI,I2C,UART
Khi cấu hình chức năng nào các bạn chú ý mode hoạt động STM32
cấu trúc typedef
{
uint32_t GPIO_Pin; / *! <Chỉ định các chân GPIO được định cấu hình.
Tham số này có thể là bất kỳ giá trị nào của @ref GPIO_pins_define * /
GPIOMode_TypeDef GPIO_Mode; / *! <Chỉ định chế độ hoạt động cho các chân được chọn.
Tham số này có thể là giá trị của @ref GPIOMode_TypeDef * /
GPIOSpeed_TypeDef GPIO_Speed; / *! <Chỉ định tốc độ cho các chân được chọn.
Tham số này có thể là giá trị của @ref GPIOSpeed_TypeDef * /
GPIOOType_TypeDef GPIO_OType; / *! <Chỉ định loại đầu ra hoạt động cho các chân được chọn.
Tham số này có thể là giá trị của @ref GPIOOType_TypeDef * /
GPIOPuPd_TypeDef GPIO_PuPd; / *! <Chỉ định Kéo / kéo xuống cho các chân được chọn.
Tham số này có thể là giá trị của @ref GPIOPuPd_TypeDef * /
} GPIO_InitTypeDef;
Vì vậy, chúng tôi sẽ chọn các tham số sau để cấu hình Ghim.
- Chế độ pin
Không, chúng ta cần phải cấu hình nó như pin đầu ra. Vì vậy, bằng cách sử dụng macro của cấu trúc, chúng ta sẽ gõ
GPIO_LED.GPIO_Mode = GPIO_Mode_OUT ;
Vì vậy, GPIO_Mode_OUT cũng được định nghĩa trong tệp Tiêu đề như sau
typedef enum
{
GPIO_Mode_IN = 0x00, / *! <Chế độ nhập GPIO * /
GPIO_Mode_OUT = 0x01, / *! <Chế độ đầu ra GPIO * /
GPIO_Mode_AF = 0x02, / *! <Chế độ chức năng thay thế GPIO * /
GPIO_Mode_AN = 0x03 / *! <Chế độ tương tự GPIO * /
}
GPIOMode_TypeDef;
- Tốc độ GPIO và cấu hình Push Pull
Bây giờ chúng ta sẽ cấu hình tốc độ của GPIO và thanh ghi kéo của pin. Chúng ta sẽ thực hiện như sau.
GPIO_LED.GPIO_Speed = GPIO_Speed_50MHz ;
GPIO_LED.GPIO_PuPd = GPIO_OType_PP ;
Đây là một lần nữa các macro như những người trước. Bạn có thể kiểm tra chúng trong tệp tiêu đề.
- Khởi tạo GPIO
Bây giờ chúng ta cần gọi hàm khởi tạo tất cả các tham số và làm cho pin sẵn sàng để sử dụng.
GPIO_Init (GPIOD, & GPIO_LED);
Ở đây bạn có thể là GPIOD là cổng chúng tôi đang sử dụng và & GPIO_LED là macro chúng tôi tạo cho cấu trúc. Sau khi gọi chức năng này, chúng ta có thể điều khiển pin.
- Khởi tạo GPIO
Bây giờ để bật mã PIN
GPIO_WriteBit (GPIOD, GPIO_Pin_12, Bit_SET );
GPIO_WriteBit (GPIOD, GPIO_Pin_13, Bit_SET );
GPIO_WriteBit (GPIOD, GPIO_Pin_14, Bit_SET );
GPIO_WriteBit (GPIOD, GPIO_Pin_15, Bit_SET );
Chức năng này làm cho pin Cao. Bit_SET có giá trị 1. Tương tự để tắt nó.
GPIO_WriteBit (GPIOD, GPIO_Pin_12, Bit_RESET );
GPIO_WriteBit (GPIOD, GPIO_Pin_13, Bit_RESET );
GPIO_WriteBit (GPIOD, GPIO_Pin_14, Bit_RESET );
GPIO_WriteBit (GPIOD, GPIO_Pin_15, Bit_RESET );
Nó sẽ tắt pin.
Bạn có thể lấy mã cho Pin CAO từ tải xuống. Làm một dự án. Sao chép mã. Và hãy xem cách chạy nó.
Xây dựng và chạy mã.
Nhấn nút builf ở trên cùng. Nó sẽ kiểm tra mã lỗi. Bây giờ hãy nhấn nút gỡ lỗi và nó sẽ tải mã và tạm dừng nó và chờ bạn nhấn nút bắt đầu. Nhấn nút. Và đèn LED sẽ phát sáng.
#include "stm32f4xx.h" GPIO_InitTypeDef GPIO_LED; void delay(__IO uint32_t ncount) { while(ncount--) { } } int main(void) { RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD,ENABLE); GPIO_LED.GPIO_Pin=GPIO_Pin_12 |GPIO_Pin_13 |GPIO_Pin_14|GPIO_Pin_15; GPIO_LED.GPIO_Mode=GPIO_Mode_OUT; GPIO_LED.GPIO_Speed=GPIO_Speed_50MHz; GPIO_LED.GPIO_PuPd=GPIO_OType_PP; GPIO_Init(GPIOD,&GPIO_LED); while (1) { GPIO_WriteBit(GPIOD,GPIO_Pin_12,Bit_SET); GPIO_WriteBit(GPIOD,GPIO_Pin_13,Bit_SET); GPIO_WriteBit(GPIOD,GPIO_Pin_14,Bit_SET); GPIO_WriteBit(GPIOD,GPIO_Pin_15,Bit_SET); delay(16800000); GPIO_WriteBit(GPIOD,GPIO_Pin_12,Bit_RESET); GPIO_WriteBit(GPIOD,GPIO_Pin_13,Bit_RESET); GPIO_WriteBit(GPIOD,GPIO_Pin_14,Bit_RESET); GPIO_WriteBit(GPIOD,GPIO_Pin_15,Bit_RESET); delay(16800000); } }