BÀI 02: LẬP TRÌNH GPIO STM32 ĐIỀU KHIỂN NHÁY LED

posted in: Vi điều khiển | 0

1. Lý thuyết về GPIO

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 thì các chân GPIO chia ra làm nhiều Port vd: PortA, PortB….. Số lượng Port phụ thuộc vào số lượng chân(pin) và cách gọi phụ thuộc vào nhà sản xuất(ví dụ VĐK X có PortA mà lại không có PortD). Mỗi Port thường có 16 chân đánh số từ 0 -> 15 tương ứng với mỗi chân là 1bit. Mỗi chân có 1 chức năng khác nhau như analog input, external interrupt.. كيف تلعب روليت hay đơn thuần chỉ là xuất tín hiệu on/off ở mức 0,1.

Cấu tạo GPIO STM32F1

Các mode GPIO của STM32:

Input:

  • Input pull up: Đầu vào có trở kéo lên (điện áp mặc định trên chân là Vcc)
  • Input pull down: Đầu vào có trở kéo xuống (điện áp mặc định trên chân là 0V)
  • Input floating: Đầu vào thả nổi, điện áp không cố định dao động từ 0V tới Vcc
  • Analog: Đầu vào tương tự, dùng để đo ADC

Output:

  • Ouput Push Pull: Đầu ra dạng đẩy kéo, tín hiệu sẽ chỉ có Vcc hoặc 0V tương ứng với Bit 1 và 0 ghi vào chân đó
  • Ouput Opendrain: Đầu ra dạng cực máng hở. Chỉ có thể kéo về 0V bằng cách ghi bit 0, khi ghi bit 1, chân IO sẽ có điện áp tương ứng với nguồn nối vào IO đó
  • Alternate function Push Pull: Đầu ra kểu đẩy kéo sử dụng trong các ngoại vi
  • Alternate function Open Drain: Đầu ra dạng cực máng hở, sử dụng trong các ngoại vi (thường gặp trong I2C)




2. Lập trình với thư viện chuẩn của ST

  • Chương trình cấu hình led
void Led_Init()
{
	GPIO_InitTypeDef  GPIO_InitStructure; 		
	// cap xung clock cho GPIOC
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);	    	
	// Cau hinh chan LED PC13
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;			    //LED0-->PC13
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 	 
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	 
  GPIO_Init(GPIOC, &GPIO_InitStructure);			    	
}

Đoạn chương trình trên thực hiện việc cấp xung cho Port GPIOC, đồng thời cấu hình chế độ Output push-pull cho chân PC13.

  • Chương trình delay tương đối
void Delay_ms(uint32_t ms)
{
	for(uint32_t i = 0;i<ms; i++)
		for(volatile uint32_t j = 0; j<525; j++);
}
  • Chương trình trong hàm main
int main(void)
 {	
	 Led_Init();
  
 
  while(1)
	{
	    GPIO_SetBits(GPIOC,GPIO_Pin_13);
		  Delay_ms(1000);
			GPIO_ResetBits(GPIOC,GPIO_Pin_13);
		  Delay_ms(1000);
	}
 }

Sử dụng hàm GPIO_SetBits(GPIOC,GPIO_Pin_13) để set chân PC13 lên mức 1, hàm GPIO_ResetBits(GPIOC,GPIO_Pin_13) để reset chân PC13 xuống mức 0. Đoạn chương trình tạo hiệu ứng nhấp nháy led trên chân PC13 với chu kỳ 2ms.

Link code mẫu

Trả lời

Email của bạn sẽ không được hiển thị công khai.