1. Trang chủ
  2. » Tất cả

vi điều khiển nâng cao 03

64 4 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Vi Điều Khiển Nâng Cao 03
Trường học Hà Nội Univesity of Industry
Chuyên ngành Electronics Engineering
Thể loại Tài liệu học tập
Thành phố Hà Nội
Định dạng
Số trang 64
Dung lượng 3,5 MB
File đính kèm Slide Vi dieu khien nang cao 03.rar (3 MB)

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Chương 3 của môn Vi điều khiển nâng cao sẽ giới thiệu những kiến thức cơ bản về vi điều khiển ARM như công cụ lập trình, thư viện phát triển ứng dụng, lập trình vào ra đa dụng GPIO, lập trình vào ra với ngắt ngoài GPIO, lập trình timer, lập trình PWM, lập trình ADC, lập trình UART.

Trang 1

CHƯƠNG 3 Ha Noi Univesity of Industry

Faculty of Electronics Engineering

3.1 Công cụ lập trình và thư viện phát triển ứng dụng.

3.2 Lập trình vào ra đa dụng GPIO.

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

3.3 Lập trình vào ra với ngắt ngoài GPIO.

3.4 Lập trình bộ đếm Timer.

3.5 Lập trình điều chế độ rộng xung PWM.

3.6 Lập trình biến đổi tương tự số ADC.

3.7 Lập trình truyền thông nối tiếp UART.

Trang 2

3.1 Công cụ lập trình và thư viện

phát triển ứng dụng Ha Noi Univesity of IndustryFaculty of Electronics Engineering3.1.1 Công cụ lập trình.

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Trang 3

3.1 Công cụ lập trình và thư viện

phát triển ứng dụng Ha Noi Univesity of IndustryFaculty of Electronics Engineering3.1.1 Công cụ lập trình.

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Trang 4

3.1 Công cụ lập trình và thư viện

phát triển ứng dụng Ha Noi Univesity of IndustryFaculty of Electronics Engineering3.1.1 Công cụ lập trình.

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Trang 5

3.1 Công cụ lập trình và thư viện

phát triển ứng dụng Ha Noi Univesity of IndustryFaculty of Electronics Engineering3.1.2 Thư viện phát triển ứng dụng.

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Trang 6

3.1 Công cụ lập trình và thư viện

phát triển ứng dụng Ha Noi Univesity of IndustryFaculty of Electronics Engineering3.1.2 Thư viện phát triển ứng dụng.

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Trang 7

3.1 Công cụ lập trình và thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng.

 STM32Cube HAL + LL APIs

Trang 8

3.1 Công cụ lập trình và thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng.

 STM32Cube HAL + LL APIs

HAL(Hardware Abstraction Layer) API:

 Dành cho người lập trình có kiến

thức nền tốt, muốn tìm cách nhanh

nhất để đánh giá và lựa chọn một

chip STM32.

LL(Low-Layer) API:

 Dành cho các developer có kiến thức

về lập trình vi điều khiển 8-bit.

Trang 9

3.1 Công cụ lập trình và thư viện phát triển ứng dụng.

3.1.2 Thư viện phát triển ứng dụng.

 STM32Cube HAL + LL APIs

HAL(Hardware Abstraction Layer) API:

Tính năng

 Dễ chuyển đổi từ dòng STM32 này sang dòng khác mà không phải thay đổi code nhiều.

 Hỗ trợ 100% ngoại vi.

 Tương thích với các middleware như USB/TCP-IP/Graphic/Touch Sense/ RTOS

 Có thể dùng STM32CubeMX để sinh code

Nhược điểm

 Phức tạp khi cần phải tối ưu bộ nhớ.

 Khả năng tương thích với nhiều dòng STM32 sẽ làm tăng thời gian thực thi code, do đó

sẽ làm giảm tốc độ biên dịch chương trình.

Trang 10

3.1 Công cụ lập trình và thư viện phát triển ứng dụng 3.1.2 Thư viện phát triển ứng dụng.

 STM32Cube HAL + LL APIs

LL(Low-Layer) API:

Tính năng:

 Tối ưu cao, tác động tới mức thanh ghi.

 Code sinh ra nhỏ, Debug mức thanh ghi.

 Có các API để cấu hình ngoại vi.

 Không phải thao tác trực tiếp tới thanh ghi.

 Dễ dàng debug.

Nhược điểm

 Vẫn phụ thuộc từng loại STM32 riêng biệt, không thể chuyển trực tiếp từ serie này sang serie khác.

 Vẫn còn phức tạp khi dùng các ngoại vi như USB.

 Developer vẫn cần phải hiểu hoạt động của ngoại vi ở mức thanh ghi.

 Chỉ hỗ trợ L4, L0 và F0.

Trang 11

 STM32Cube HAL + LL APIs

Trang 12

 STM32Cube HAL + LL APIs

Trang 13

Hỗ trợ của từng thư viện cho các dòng chip của ST

Trang 14

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Mỗi cổng GPIO của vi điều khiển STM32F103 có:

• 2 thanh ghi cấu hình 32-bit: GPIOx_CRL, GPIOx_CRH.

• 2 thanh ghi dữ liệu 32-bit: GPIOx_IDR, GPIOx_ODR.

• 1 thanh ghi 32-bit set/reset: GPIOx_BSRR.

• 1 thanh ghi 16-bit reset: GPIOx_BRR.

• 1 thanh ghi khóa 32-bit: GPIOx_LCKR.

 Các chân vào/ra của STM32 mang nhiều chức năng, nó có thể được

thiết lập là chân vào/ra dữ liệu hay là các chân chức năng đặc biệt của các bộ ngoại vi, sử dụng các thanh ghi điều khiển của ngoại vi để lựa

chọn chức năng cho các chân.

Trang 15

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Các chế độ làm việc của GPIO:

• Alternate function push-pull

• Alternate function open-drain

 Các chân GPIO có thể làm việc ở nhiều chế độ khác nhau, việc cấu hình

lựa chọn chế độ làm việc cho mỗi chân GPIO được thực hiện bằng chương

trình.

Trang 16

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 STM32F103C8T6 có 37 chân vào ra dữ liệu trên 4 PORT

• PORT A : PA0 ÷ PA15

• PORT B : PB0 ÷ PB15

• PORT C : PC13 ÷ PC15

• PORT D : PD0 ÷ PD1

Trang 17

3.2 Lập trình vào ra đa dụng GPIO.

- PORT A : PA0 ÷ PA15

- PORT B : PB0 ÷ PB15

- PORT C : PC13 ÷ PC15

- PORT D : PD0 ÷ PD1

Trang 18

Sơ đồ khối của chân GPIO

3.2 Lập trình vào ra đa dụng GPIO.

Trang 19

Sơ đồ khối của chân GPIO

3.2 Lập trình vào ra đa dụng GPIO.

Trang 20

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình các chế độ của GPIO:

Trang 21

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình các chế độ của GPIO:

Trang 22

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình chiều vào GPIO:

Trang 23

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình chiều vào GPIO:

Khi chân I/O được thiết lập là chiều vào:

• Bộ đệm đầu ra bị tắt.

• Đầu vào Schmitt Trigger được thiết lập.

• Điện trở Pull-up hoặc Pull-down tùy thuộc vào cấu hình đầu vào với 3 lựa

chọn (pull-up, pull-down hoặc floating):

• Dữ liệu trên chân GPIO được lấy mẫu vào thanh ghi APB2.

• Trạng thái trên chân GPIO sẽ được cho phép đọc bằng thanh ghi dữ liệu

Trang 24

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình chiều ra GPIO:

Trang 25

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình chiều vào GPIO:

Khi chân I/O được thiết lập là chiều ra:

• Bộ đệm đầu ra bật:

– Open Drain Mode: P-MOS không được kích hoạt.

Thanh ghi Output thiết lập mức “0” hoặc “1” trên N-MOS.

– Push-Pull Mode: N-MOS,P-MOS được kích hoạt

• Đầu vào Schmitt Trigger được thiết lập.

• Không thiết lập Điện trở pull-up and pull-down đầu vào

• Dữ liệu trên chân GPIO được lấy mẫu vào thanh ghi APB2.

Trang 26

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình Alternate GPIO: OSC, JTAG/SWD, Timer, UART, I2C, CAN, USB

Trang 27

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Cấu hình Analog GPIO:

Trang 28

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Các thanh ghi GPIO và AFIO:

Trang 29

3.2 Lập trình vào ra đa dụng GPIO Ha Noi Univesity of Industry

Faculty of Electronics Engineering

Ha Noi Univesity of Industry

Faculty of Electronics Engineering

 Các thanh ghi GPIO và AFIO:

Trang 31

3.2 Lập trình vào ra đa dụng

 Lập trình với ARM bằng thanh ghi phức tạp và mất nhiều thời gian Để người dùng tiếp cận nhanh hãng sản xuất cung cấp các hàm API để hỗ trợ lập trình.

 Lập trình đối với ARM STM32F103C8T6 sẽ sử dụng tài liệu chứa các hàm API trong file: 7 Description-of-stm32f1-hal- and-lowlayer-drivers-stmicroelectronics.pdf trong thư mục

“1 Tai lieu ARM STM 32 ”

Trang 33

KHUNG CHƯƠNG TRÌNH LẬP TRÌNH VỚI GPIO

#include "main.h"

void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void)

Trang 34

{ Error_Handler(); }

}

Trang 35

static void MX_GPIO_Init(void)

{

GPIO_InitTypeDef GPIO_InitStruct = {0};

HAL_RCC_GPIOA_CLK_ENABLE();

GPIO_InitStruct.Pin = LED1_Pin|LED2_Pin|LED3_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;

Trang 36

3.2.1 CÁC BƯỚC LẬP TRÌNH VỚI GPIO

1 Thiết lập xung nhịp cho hệ thống.

2 Cho phép xung nhịp GPIO APB2.

3 Cấu hình GPIO.

4 Đọc dữ liệu hoặc ghi dữ liệu.

Trang 37

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

Trang 38

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Cấu hình cho xung nhịp GPIO:

 SystemClock_Config();

• RCC_OscInitTypeDef RCC_OscInitStruct = {0};

• RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

Trang 39

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Cấu hình cho xung nhịp GPIO: Lựa chọn nguồn xung

Trang 40

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

• RCC_OscInitStruct.PLL.PLLState =

RCC_PLL_NONE;

Trang 41

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Cấu hình cho xung nhịp GPIO: Lựa chọn xung nhịp

Trang 42

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

Trang 43

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Cho phép xung nhịp GPIO

Trang 44

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

Trang 45

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Cấu hình các chân GPIO

 GPIO_InitTypeDef GPIO_InitStruct = {0};

• uint32_t Pin : Thiết lập chân GPIO

GPIO_PIN_0; GPIO_PIN_1; GPIO_PIN_2; GPIO_PIN_3;

GPIO_PIN_4; GPIO_PIN_5;GPIO_PIN_6; GPIO_PIN_7;

GPIO_PIN_8; GPIO_PIN_9; GPIO_PIN_10; GPIO_PIN_11

GPIO_PIN_12; GPIO_PIN_13; GPIO_PIN_14; GPIO_PIN_15; GPIO_PIN_All; GPIO_PIN_MASK

ví dụ: GPIO_InitStruct.Pin = GPIO_PIN_0;

Trang 46

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 GPIO_InitTypeDef GPIO_InitStruct = {0};

• uint32_t Mode : Thiết lập chế độ

Trang 47

GPIO_MODE_INPUT Input Floating Mode

GPIO_MODE_OUTPUT_PP Output Push Pull Mode

GPIO_MODE_OUTPUT_OD Output Open Drain Mode

GPIO_MODE_AF_PP Alternate Function Push Pull Mode

GPIO_MODE_AF_OD Alternate Function Open Drain Mode

GPIO_MODE_ANALOG Analog Mode

GPIO_MODE_IT_RISING External Interrupt Mode with Rising edge trigger

detectionGPIO_MODE_IT_FALLING External Interrupt Mode with Falling edge trigger

detectionGPIO_MODE_IT_RISING_FALLING External Interrupt Mode with Rising/Falling edge trigger

detectionGPIO_MODE_EVT_RISING External Event Mode with Rising edge trigger detectionGPIO_MODE_IT_RISING_FALLING External Interrupt Mode with Rising/Falling edge trigger detectionGPIO_MODE_EVT_RISING External Event Mode with Rising edge trigger detectionGPIO_MODE_EVT_FALLING External Event Mode with Falling edge trigger detectionGPIO_MODE_EVT_RISING_FALLING External Event Mode with Rising/Falling edge trigger

detection

Trang 48

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

• uint32_t Mode

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

Trang 49

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

• uint32_t Pull : Thiết lập trở treo

ví dụ: GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_NOPULL No Pull-up or Pull-down activation

GPIO_PULLUP Pull-up activation

GPIO_PULLDOWN Pull-down activation

Trang 50

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 GPIO_InitTypeDef GPIO_InitStruct = {0};

• uint32_t Speed

ví dụ: GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW ;

GPIO_SPEED_FREQ_LOW Low speed

GPIO_SPEED_FREQ_MEDIUM Medium speed

GPIO_SPEED_FREQ_HIGH High speed

Trang 51

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

trong hàm GPIO_Init

GPIO_InitTypeDef * GPIO_Init)

ví dụ: HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

Trang 52

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

Ví dụ:

GPIO_InitStruct.Pin = GPIO_Pin_0;

GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

Trang 53

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Xuất nhập dữ liệu

 Xuất dữ liệu : HAL_GPIO_WritePin();

 HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)

o GPIO_TypeDef * GPIOx : cổng GPIO

o uint16_t GPIO_Pin: chân GPIO

o GPIO_PinState PinState: thiết lập giá trị theo bit :

0 – GPIO_PIN_RESET: to clear the port pin

1 – GPIO_PIN_SET: to set the port pin

Ví dụ: Xuất dữ liệu mức 1 trên chân PA0.

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_SET);

Trang 54

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Xuất nhập dữ liệu

 Xuất dữ liệu : HAL_GPIO_TogglePin();

 HAL_GPIO_TogglePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

o GPIO_TypeDef * GPIOx : cổng GPIO

o uint16_t GPIO_Pin: chân GPIOo

Ví dụ: Đảo mức 1 trên chân PA0.

HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_0);

Trang 55

CÁC BƯỚC LẬP TRÌNH VỚI GPIO

 Xuất nhập dữ liệu

 Nhập dữ liệu : HAL_GPIO_ReadPin();

 HAL_GPIO_ReadPin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin)

o GPIO_TypeDef * GPIOx : cổng GPIO

o uint16_t GPIO_Pin: chân GPIO

Ví dụ: Nhập dữ liệu mức 1 trên chân PA1.

x = HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1);

Trang 56

 Giới thiệu KIT STM32F103C8T6 Blue Pill

3.2 Lập trình vào ra đa dụng

- Thiết kế ứng dụng vào/ra.

KIT STM32F103 BLUE PILL

Trang 57

Sơ đồ chân chức nằng KIT STM32F103 BLUE PILL

Trang 58

Sơ đồ nguyên lý KIT STM32F103C8T6

Nguồn: easyeda.com

Trang 59

A- Điều khiển Led đơn

Bài 1: Lập trình điều khiển LED (kết nối với chân PA0) sáng

Trang 60

A- Điều khiển Led đơn

Bài 2: Lập trình điều khiển LED (kết nối với chân PA0) nhấp nháy với chu kì 1s

Trang 61

A- Điều khiển Led đơn

Bài 3: Lập trình điều khiển khi nhấn nút Select (kết nối với chân PA11)

LED (kết nối với chân PA0) sáng

Trang 62

A- Điều khiển Led đơn

Bài 3: Lập trình điều khiển khi nhấn nút Select (kết nối với chân PA11)

LED (kết nối với chân PA0) sáng

HAL_GPIO_WritePin(GPIOA, GPIO_PIN_0, GPIO_PIN_RESET); }

}

Trang 63

Bài 4: Lập trình điều khiển đọc số lần

nhấn của nút Select (kết nối với chân

PA7), nếu số lần nhấn lẻ thì LED (kết nối

với chân PA0) sáng, ngược lại LED tắt.

BOOT0 44

NRST 7PA0-WKUP

10

OSCIN_PD0 5OSCOUT_PD1 6

PB8 45

PA2

1211 PA1PA3 13 PA4 14

PB9 46

PA5 15 PA6 16 PA7 17 PA8 29 PA9 30

PB10 21

PA10 31

PB0 18 PB1 19 PB2 20 PB3 39

PB11 22

PB4 40 PB5 41 PB6 42 PB7 43

PB12 25

PB13 26

PB14 27

PB15 28

PA11 32 PA12 33

PA13 34

PA14 37

PA15

38 PC13_RTC 2

PC14-OSC32_IN 3PC15-OSC32_OUT 4

Trang 64

B- Bài tập

Bài tập 1 Lập trình nhấn nút BT1 led Status sáng nhấp nháy 5 lần.

Bài tập 2 Lập trình nhấn nút BT1 - LED sáng, nhấn nút BT2 LED tắt.

Bài tập 3 Lập trình nhấn nút BT1 led vàng sáng, nhấn tiếp led tắt và lặp lại Bài tập 4 Lập trình điều khiển đèn giao thông bao gồm 3 LED xanh, vàng, đỏ.

Khi nhấn nút BT1 LED vàng nhấp nháy(tương ứng với chế độ ban đêm), ngược lại sáng chế độ ban ngày.

Ngày đăng: 03/01/2023, 17:53

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w