Giỏ hàng
Danh mục sản phẩm

Lập trình GPIO STM32

Đăng bởi Buiprohd@gmail.com ngày bình luận

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.

  1. 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;

  1. 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 đề.

  1. 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.

  1. 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);
}
}
 

Cũ hơn