- vừa được xem lúc

API của LL Library trong stm32

0 0 2

Người đăng: Nguyễn Đặng Triều

Theo Viblo Asia

LL EXTI Generic Driver

Trong vi điều khiển ARM Cortex-M, có một bộ điều khiển vector ngắt lồng nhau, thường được gọi là NVIC, được sử dụng để xử lí tất cả các ngắt và ngoại lệ mà Cortex-M hỗ trợ.

Tìm hiểu những tính năng quang trọng cần thiết để cấu hình ngắt ngoài trong vi điều khiển.

Interrupt Lines (EXTI0-EXTI15)

Vi điều khiển STM32 cung cấp số lượng nguồn ngắt ngoài và số đường truyền điều khiển ngắt ngoài khác nhau. Số lượng có thể tùy thuộc vào dòng STM32.

Các chân GPIO kết nối với bộ điều khiển ngắt vector lồng nhau thông qua các đường EXTI, hình bên dưới cho thấy cách các chân GPIO kết nối với 16 đường ngắt.

Một điều quan trọng cần lưu ý ở đây là nhiều chân đầu vào được kết nối với một đường điều khiển ngắt ngoài duy nhất. Do đó, chỉ khi nguồn ngắt hoặc đường đầu vào có thể được sử dụng với một đường EXTI cụ thể. Ví dụ: ngoài PA1, PB1, PC1, PD1, PE1, PF1 và PG1, bạn chỉ có thể sử dụng một chân duy nhất trong số tất cả các chân này với đường EXTI1. Điều này là do tất cả chúng đều được kết nối với cùng một đường EXTI1. Tuy nhiên, bạn có thể sử dụng PA1 và PA2 cùng lúc vì chúng được kết nối với các đường khác nhau.

Bây giờ mỗi dòng EXTI0-EXTI15 có thể được sử dụng để kích hoạt ngắt ở các chế độ khác nhau của tín hiệu: rising edge, falling edge hoặc rising_falling edge.

Interrupt Handler

Tính năng quang trọng tiếp theo là ISR hay còn gọi là trình xử lí ngắt (Interrupt Handler). Để có thể sử lí các ngắt, ta sử dụng ISR function.

Bảng dưới đây cho ta biết các Interrupt hander khác nhau cho các chân GPIO.

Chúng ta có tổng cộng 7 function handler để xử lí theo GPIO khi ta thiết lập ngắt ngoài. Điều này là do dòng 5 - 9 và dòng 10 - 15 có cùng trình xử lí ngắt.

LL GPIO Generic Driver

1 . LL_GPIO_InitTypeDef

LL_GPIO_InitTypeDef được định nghĩa trong stm32f4xx_ll_gpio.h

Data Fields

  • uint32_t Pin
  • uint32_t Mode
  • uint32_t Speed
  • uint32_t OutputType
  • uint32_t Pull
  • uint32_t Alternate

2. GPIO Firmware driver API description

void LL_GPIO_SetPinMode(GPIO_TypeDef * GPIOx, uint32_t Pin, uint32_t Mode)

Description: Cấu hình mode GPIO cho một pin trên port.

GPIOx: GPIOA, GPIOB, GPIOC, ...

Pin

  • LL_GPIO_PIN_0
  • ...
  • LL_GPIO_PIN_15

Mode:

  • LL_GPIO_MODE_INPUT
  • LL_GPIO_MODE_OUTPUT
  • LL_GPIO_MODE_ALTERNATE
  • LL_GPIO_MODE_ANALOG

✏️ Example:

// Cấu hình chân PA0 ở mode output
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_0, LL_GPIO_MODE_OUTPUT);

void LL_GPIO_SetPinPull (GPIO_TypeDef * GPIOx, uint32_t Pin, uint32_t Pull)

Description: Cấu hình GPIO pull-up or pull-down cho một pin trên port.

Pull:

  • LL_GPIO_PULL_NO
  • LL_GPIO_PULL_UP
  • LL_GPIO_PULL_DOWN

✏️ Example:

// Cấu hình PA5 làm input với pull-up
LL_GPIO_SetPinMode(GPIOA, LL_GPIO_PIN_5, LL_GPIO_MODE_OUTPUT);
LL_GPIO_SetPinPull(GPIOA, LL_GPIO_PIN_5, LL_GPIO_PULL_UP); // Cấu hình PB0 làm input không có pull (no-pull)
LL_GPIO_SetPinMode(GPIOB, LL_GPIO_PIN_0, LL_GPIO_MODE_INPUT);
LL_GPIO_SetPinPull(GPIOB, LL_GPIO_PIN_0, LL_GPIO_PULL_NO);

uint32_t LL_GPIO_IsInputPinSet (GPIO_TypeDef * GPIOx, uint32_t PinMask)

Description: Đọc mức điện áp tại một pin

GPIOx: GPIOA, GPIOB, ...

PinMask:

  • LL_GPIO_PIN_0
  • ...
  • LL_GPIO_PIN_15
  • LL_GPIO_PIN_ALL

void LL_GPIO_SetOutputPin (GPIO_TypeDef * GPIOx, uint32_t PinMask)

Description: output HIGH (1) ra một pin.

void LL_GPIO_ResetOutputPin (GPIO_TypeDef * GPIOx, uint32_t PinMask)

Description: output LOW (0) ra một pin.

void LL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint32_t PinMask)

Description: Đảo trạng thái của một pin.

ErrorStatus LL_GPIO_DeInit (GPIO_TypeDef * GPIOx)

Description: Reset tất cả các thanh ghi cấu hình các pin trong một port GPIO về trạng thái mặc định.

ErrorStatus LL_GPIO_Init(GPIO_TypeDef GPIOx, LL_GPIO_InitTypeDef GPIO_InitStruct)

Description: Cấu hình các thuộc tính cơ bản của pin.

✏️ Example:

// Cấu hình PA5 là output push-pull, không pull-up, tốc độ cao
LL_GPIO_InitTypeDef GPIO_InitStruct = {0}; // Enable clock GPIOA
LL_AHB2_GRP1_EnableClock(LL_AHB2_GRP1_PERIPH_GPIOA); // Cấu hình PA5
GPIO_InitStruct.Pin = LL_GPIO_PIN_5;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH; LL_GPIO_Init(GPIOA, &GPIO_InitStruct); 

Bình luận

Bài viết tương tự

- vừa được xem lúc

Ghi chú và ghi nhớ hiệu quả với RemNote

Bài viết này chia sẻ phương pháp và công cụ giúp mình ghi chú & nhớ nhanh, nhớ lâu và hiệu quả hơn. Trong học tập cũng như công việc, thói quen của mình thường ghi chú dạng outline - nhiều gạch đầu dò

0 0 22

- vừa được xem lúc

Một vài những vulnerable gần đây của Whatsup Gold

Đợt vừa rồi mình cùng @lengocanh cũng target vào Whatsup Gold, tuy kết quả chưa thật sự tốt nhưng cũng có để lại một vài bài học cho ae trong team. TL;DR.

0 0 16