Tải bản đầy đủ (.docx) (80 trang)

Nghiên cứu ứng dụng vi điều khển ARMSTM32 trong đo lường và điều khiển. Trường DHCN Hà Nôi.

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (3.44 MB, 80 trang )

MỤC LỤC
DANH MỤC HÌNH VẼ....................................................................................................2
DANH MỤC BẢNG BIỂU..............................................................................................3
DANH MỤC CÁC TỪ VIẾT TẮT...................................................................................4
MỞ ĐẦU..........................................................................................................................5
CHƯƠNG 1. CẤU TRÚC VI ĐIỀU KHIỂN ARM.......................................................6
1.1. Lịch sử hình thành và phát triển vi điều khiển ARM..............................................6
1.2. Cấu trúc của ARM..................................................................................................9
1.3. Phân loại...............................................................................................................14
1.4. Ứng dụng ARM....................................................................................................17
CHƯƠNG 2. NGOẠI VI CỦA VI ĐIỀU KHIỂN ARM STM32F411VE....................19
2.1. Giới thiệu về dòng vi điều khiển STM32..............................................................19
2.2. Tổ chức bộ nhớ.....................................................................................................23
2.3. Khối tạo dao dộng.................................................................................................25
2.4. Giới thiệu GPIO....................................................................................................27
2.5. Ngắt......................................................................................................................31
2.6. TIMER..................................................................................................................33
2.7. PWM..................................................................................................................... 35
2.8. ADC...................................................................................................................... 37
2.9. I2C........................................................................................................................ 40
2.10. USART..............................................................................................................43
CHƯƠNG 3. LẬP TRÌNH ỨNG DỤNG VỚI NGOẠI VI...........................................47
3.1. Giới thiệu kit STM32F411VE(Discovery)............................................................47
3.2. Cách tạo một project trong Keilc V5.....................................................................49
3.3. Lập trình với GPIO...............................................................................................50
3.4. Lập trình với Ngắt.................................................................................................54
3.5. Lập trình với TIMER............................................................................................56
3.6. Lập trình với PWM...............................................................................................60
3.7. Lập trình với ADC................................................................................................64
3.8. Lập trình với I2C..................................................................................................67
3.9. Lập trình với USART............................................................................................71


KẾT LUẬN..................................................................................................................... 75
TÀI LIỆU THAM KHẢO...............................................................................................77


Danh mục hình vẽ
Hình 1 Kiến trúc đường ống ba tầng...............................................................................13
Hình 2 Kiến trúc đường ống ba tầng trong tập lệnh có nhiều chu kỳ máy.......................14
Hình 3 Kiến trúc STM32 nhánh Performance và Access................................................19
Hình 4 Dưới đậy là sơ đồ khối ARM STM32F411VE...................................................22
Hình 5 Kiến trúc hệ thống...............................................................................................24
Hình 6 Khối Tạo Dao Động............................................................................................26
Hình 7 Chân xung kết nối nội ngoại...............................................................................27
Hình 9 Sơ đồ khối của ngắt ngoài...................................................................................32
Hình 10 Ngắt ngoài của chip STM32F411VE................................................................32
Hình 11 : Hình ảnh xung PWm.......................................................................................35
Hình 12 Sơ đồ khối của ADC..........................................................................................38
Hình 13 Sơ đồ khối của giao tiếp I2C.............................................................................40
Hình 14 Sơ đồ khối của bộ I2C.......................................................................................41
Hình 15 Sơ đồ khối USART...........................................................................................44
Hình 16 Sơ đồ khối kit STM32F411...............................................................................48
Hình 17 Màm hình làm việc Keilc v5.............................................................................49
Hình 18 Giao diện màn hình làm việc.............................................................................50
Hình 19 Chọn tạo một dự án mới....................................................................................50
Hình 20 Giao diện chọn chíp..........................................................................................51
Hình 21 Giao diện chíp và chân I/O................................................................................51
Hình 22 Sơ đồ xung của STM32F411.............................................................................52
Hình 23 Cấu hình Chân vào ra........................................................................................52
Hình 24 Giao diện cấu hình sự án...................................................................................53
Hình 25 Cấu hình chân cho Ngắt....................................................................................54
Hình 26 Cấu hình chọn ngắt ở line0................................................................................55

Hình 27 Cấu hình chân TIM...........................................................................................56
Hình 28 Điền thông số cho TIM.....................................................................................57
Hình 29 Cấu hình chân cho PWM..................................................................................60
Hình 30 Cài thông số cho chân LED...............................................................................61
Hình 31 Điền thông số cho xung PWm...........................................................................61
Hình 32 Cấu hình chân ADC..........................................................................................64
Hình 33 Cài thông số cho ADC.......................................................................................65
Hình 34 Cấu hình chân cho I2C......................................................................................67
Hình 35 Thông số cho I2C..............................................................................................68
Hình 36 Chọn ngắt cho i2C.............................................................................................68
Hình 37 Chọn DMA cho I2C..........................................................................................69
Hình 38 Cấu hình chân cho USART...............................................................................72
Hình 39 Cấu hình tham số cho USART 1.......................................................................72


Danh mục bảng Biểu
Bảng 1: Đặc tính của một vài máy CISC......................................................................12
Bảng 2: Đặc tính của ba mẫu đầu tiên máy RISC...........................................................14
Bảng 3 Bảng mức độ ưu tiên ngắt NVIC........................................................................36


Danh mục các từ viết tắt
ADC

Analog to Digital Converter

Bộ chuyển đổi tương tự sang số

CLK


Clock

Xung nhịp

CMSIS

The Cortex Microcontroller

Chuẩn giao tiếp phần mềm vi điều khiển

Software Interface Standard

Cortex

DMA

Direct Memory Access

Sự truy cập bộ nhớ trực tiếp

DSP

Digital Signal Processors

Bộ xử lý tín hiệu số

DRAM

Dynamic Random Access


Bộ nhớ truy cập ngẫu nhiên động

Memory
EEPROM

Electrically Erasable

Bộ nhớ chỉ đọc có thể xóa được bằng

Programmable Read-Only

điện

Memory
EPROM

GIPO

Erasable Programmable Read- Bộ nhớ chỉ để đọc có khả năng lập trình
Only Memory

lại được

General Purpose

Đầu vào hoặc ra đa mục đích

Input/Output
Communications
PWM


Pulse Width Modulation

Bộ điều chế độ rộng xung

RAM

Random Access Memory

Bộ nhớ truy nhập ngẫu nhiên

ROM

Read Only Memory

Bộ nhớ chỉ đọc

RTC

Real Time Clock

Đồng hồ thời gian thực

Rx

Receive

Nhận dữ liệu

SD Card


Secure Digital Card

Thẻ nhớ dữ liệu số

SPI

Serial Peripheral Interface

Giao tiếp ngoại vi nối tiếp

Tx

Transmit

Truyền dữ liệu

TIC

Test Interface Controller

Bộ giao tiếp kiểm thử

UART

Universal Asynchronous

Bộ thu/phát không đồng bộ đa năng

Receiver/Transmitter



MỞ ĐẦU
Lý do chọn đề tài
Các hệ thống nhúng đang được phát triển trên thế giới ngày càng đòi hỏi sử dụng
công nghệ cao, không chỉ đơn giản như các hệ thống điều khiển đèn giao thông, điều
khiển các biển quảng cáo hiển thị chữ trên LCD mà yêu cầu quá trình xử lý và điều
khiển ngày càng phức tạp hơn, như điều khiển các lò phản ứng, các robot di động,
truyền thông đa phương tiện, xử lý âm thanh hình ảnh trên các thiết bị di động cần tay.
Các hệ thống nhúng này cần sử dụng các loại vi điều khiển tiên tiến với dung lượng bộ
nhớ lớn hơn, với độ rộng bít xử lý từ 16 đến 32 bít nhằm giúp cho quá trình xử lý được
sinh động và mềm dẻo hơn các loại vi điều khiển thông dụng 8 bít trước đây. Ở nước
ta các thiết bị nhúng chủ yếu nhập khẩu từ nước ngoài, chúng ta chưa làm chủ và tự
sản xuất được những loại thiết bị này. Vì vậy với đề tài “Nghiên cứu ứng dụng vi điều
khển ARM-STM32 trong đo lường và điều khiển.” sẽ góp phần thúc đẩy việc nghiên
cứu và phát triển cho các hệ thống nhúng hiện đại trong tương lai.
ARM là vi xử lý sẽ thống trị thị trường thế giới trong một hai năm nữa. Sự tiến
bộ thần tốc này nhờ vào những tính năng ưu việt như : an toàn, bảo mật, đặc biệt ít tiêu
thụ điện năng nhưng vẫn cho hiệu năng tốt.
Dựa vào những nhu cầu tìm hiểu về tính năng và đặc điểm ưu việt của dòng chíp
ARM, ý tưởng nghiên cứu và ứng dụng vi điều khiển ARM STM32 cụ thể ở đây là
STM32 F411 có lõi xử lý là ARMv7E.
Nội dung của luận văn
Đề tài : Nghiên cứu ứng dụng vi điều khển ARM-STM32 trong đo lường và điều
khiển.
-

Giới thiệu về lịch sử phát triển và ứng dụng của ARM

-


Kiến trúc phần cứng của ARM

-

Giới thiệu về công cụ lập trình phát triển ARM

-

Lập trình với các tài nguyên của vi điều khiển ARM-STM32.


Chương 1. CẤU TRÚC VI ĐIỀU KHIỂN ARM
1.1.

Lịch sử hình thành và phát triển vi điều khiển ARM
Cuối năm 1978, Hermann Hauser và Chris Curry đã thành lập Công ty Acorn

Computers, Ltd. ở Cambridge - Anh quốc. hãng này nổi tiếng với họ vi xử lý kiến trúc
arm được dùng khá phổ biến trong các thiết bị nhúng và các ứng dụng cầm tay nhờ
vào đặc tính ưu việt là ít tiêu thụ điện năng. hầu hết máy điện thoại di động và
máy pda hiện nay đều có cpu theo kiến trúc arm.
Sau bước khởi đầu nghiên cứu và phát triển, Hauser và Curry đã chọn một bộ xử
lý công nghệ MOS 6502 cho dự án - một trong những bộ vi xử lý 8 bít giá rẻ nhất thị
trường tại thời điểm đó trong khi các tính năng như dễ lập trình, tốc độ xử lý, độ tin
cậy tương đương với các bộ vi xử lý khác. Ngoài ra, 6502 cũng nổi tiếng với khả năng
xử lý ngắt tốc độ chậm của nó, làm nó dễ dàng xử lý các sự kiện ngắt từ bên ngoài.
6502 có thiết kế đơn giản, chỉ có 3.510 transistor (so với 6.500 transistor trong vi xử lý
8085, 8.500 transistor trong Z80). 6502 xuất hiện trong nhiều thương hiệu máy tính
nổi tiếng trong lịch sử máy tính như Apple II, Atari 2600 và Commodore VIC-20...

Sau đó, Arcon tiếp tục thắng các hợp đồng và tiếp tục sử dụng 6502 cho các dự
án của mình. Với kinh nghiệm về vi xử lý 6502, Acorn đã phát triển nên Acorn System
1 - được thiết kế bởi Sophie Ilson dựa trên 6502.. Nó bao gồm hai bảng mạch: bảng
phía trên chứa các nút bấm hexa và một màn hình 7 thanh nhỏ, hiển thị dữ liệu, bảng
mạch dưới chứa bộ vi xử lý và các mạch điện hỗ trợ. Một bộ phần mềm giám sát đơn
giản trong ROM cho phép soạn thảo bộ nhớ và phần mềm được lưu trữ trong các băng
cassette.
Vào tháng 4 năm 1985 Nhóm thiết kế hoàn thành việc phát triển mẫu gọi
là ARM1, Chip ARM1 được xây dựng từ các khối chức năng, mỗi khối có một mục
đích khác nhau. Các thanh ghi lưu trữ dữ liệu, ALU (đơn vị logic số học) thực hiện số
học đơn giản, bộ giải mã lệnh xác định cách xử lý từng lệnh, v.v. So với hầu hết các bộ
xử lý, bố cục của chip rất đơn giản, với mỗi khối chức năng có thể nhìn thấy rõ ràng.
(So sánh, cách bố trí các chip như 6502 hoặc Z-80 được tối ưu hóa bằng tay để tránh
mọi không gian bị lãng phí. Trong các chip này, các khối chức năng được đặt cạnh
nhau, khiến việc lấy ra các mảnh khó hơn.)

6


Năm 1986, nhóm hoàn thành sản phẩm ‘’thực’’ gọi là ARM2. ARM2 có tuyến dữ
liệu 32-bit, không gian địa chỉ 26-bit tức cho phép quản lý đến 64 Mbyte địa chỉ và
16 thanh ghi 32-bit. Một trong những thanh ghi này đóng vai trò là bộ đếm chương
trình với 6 bit cao nhất và 2 bit thấp nhất lưu giữ các cờ trạng thái của bộ vi xử lý. Có
thể nói ARM2 là bộ vi xử lý 32-bit khả dụng đơn giản nhất trên thế giới, với chỉ gồm
30.000 transistor (so với bộ vi xử lý lâu hơn bốn năm của Motorola là 68000 với
khoảng 68.000 transistor).
Thế hệ sau, nâng cấp bộ xử lý IFEL ARM3 cho Acorn Archimedes
Bản nâng cấp bộ xử lý IFEL ARM3 thay thế CPU ARM2 được cắm trong dải
máy tính Archimedes chạy ở tốc độ 8 MHz. Một bảng con được gắn vào ổ cắm ARM2
của Archimedes có CPU ARM3 chạy ở tốc độ 25 MHz cung cấp thông lượng MIPS

tăng gần gấp ba lần. Việc tăng hiệu suất đạt được bằng cách sử dụng bộ đệm 4KB trên
bo mạch và khả năng của ARM3 để chạy ở tốc độ xung nhịp nhanh hơn.
Kết quả sự hợp tác này là ARM6. Mẫu đầu tiên được công bố vào năm 1991 và
Apple đã sử dụng bộ vi xử lý ARM 610 dựa trên ARM6 làm cơ sở cho PDA hiệu
Apple Newton. Vào năm 1994, Acorn dùng ARM 610 làm CPU trong các máy vi
tính Risc PC của họ.
Thế hệ thành công nhất có lẽ là ARM7TDMI với hàng trăm triệu lõi được sử
dụng trong các máy điện thoại di động, hệ thống video game cầm tay, và
Sega Dreamcast.
Hãng DEC cũng bán giấy phép về lõi cấu trúc ARM (đôi khi chúng ta có thể bị
nhầm lẫn vì họ cũng sản xuất ra DEC Alpha) và sản xuất ra thế hệ Strong ARM. Hoạt
động ở tần số 233 MHz mà CPU này chỉ tiêu tốn khoảng 1 watt công suất (những đời
sau còn tiêu tốn ít công suất hơn nữa). Sau những kiện tụng, Intel cũng được chấp
nhận sản xuất ARM và Intel đã nắm lấy cơ hội này để bổ sung vào thế hệ già
cỗi i960 của họ bằng Strong ARM. Từ đó, Intel đã phát triển cho chính họ một sản
phẩm chức năng cao gọi tên là Xscale.
1.1.1 Vi xử lý ARM.

7


Vi xử lý ARM đầu tiên ra đời năm 1985 với thiết kế RISC viết tắt của reduced
instruction set computer máy tính có tập lệnh rút gọn, các vi xử lý ARM được sử dụng
chủ yếu trong các điện thoại di động.
1.1.2 Vi điều khiển ARM.
Cấu trúc ARM (viết tắt từ tên gốc là Acorn RISC Machine) là một loại cấu trúc vi
xử lý 32-bit kiểu RISC được sử dụng rộng rãi trong các thiết kế nhúng. Được phát
triển lần đầu trong một dự án của công ty máy tính Acorn. Do có đặc điểm tiết kiệm
năng lượng, các bộ CPU ARM chiếm ưu thế trong các sản phẩm điện tử di động, mà
với các sản phẩm này việc tiêu tán công suất thấp là một mục tiêu thiết kế quan trọng

hàng đầu.
Ngày nay, hơn 75% CPU nhúng 32-bit là thuộc họ ARM, điều này khiến ARM
trở thành cấu trúc 32-bit được sản xuất nhiều nhất trên thế giới. Một nhánh nổi tiếng
của họ ARM là các vi xử lý Xscale của Intel. Giới thiệu về vi điều khiển LPC2148: Là
dòng vi điều khiển ARM được sản xuất bởi hãng Philips. Tính năng:
-

Vi điều khiển 16/32-bit ARM7TDMI-S

-

40k RAM tĩnh (8k +32k), 512k flash

-

Tích hợp USB 2.0

-

Hộ trợ hai bộ ADC 10 bit

-

Một bộ DAC 10 bit

-

2 bộ timer 32 bit, 6 ngõ điều chế độ rộng xung

-


Đồng hồ thời gian thực hỗ trợ tần số 32kHz

-

Khả năng thiết lập chế độ ưu tiên và định địa chỉ cho ngắt

-

45 chân GPIO vào ra đa dụng

-

9 chân ngắt ngoài (tích cực cạnh hoặc tích cực mức)

-

CPU clock đạt tối đa 60MHz thông qua bộ PLL lập trình được

8


-

Xung PLCK hoạt động độc lập.
On-chip Flash Memory: LPC 2148 có 512K bộ nhớ Flash có thể được dùng để

lưu trữ code và dữ liệu. Trong khi thực thi ứng dụng, vẫn có thể xóa hoặc lập trình
Flash thông qua IAP (In Application Programming). Khi đó trình loader trên chip được
sử dụng, bộ nhớ trống còn lại là 500K. Bộ nhớ Flash có thể ghi xóa được ít nhất

100000 lần, lưu trữ dữ liệu đến 20 năm. On-chip Static RAM: LPC 2148 có 32K RAM
tĩnh, có thể được truy xuất theo đơn vị byte, half word & word. Bộ điều khiển SRAM
sử dụng phương thức write-back buffer để ngăn chặn tình trạng treo CPU khi có thao
tác ghi. Bộ đệm luôn giữ dữ liệu cuối cùng từ chương trình gửi tới bộ nhớ. Dữ liệu chỉ
được ghi vào SRAM khi có 1 thao tác ghi khác từ chương trình. Lập trình cho ARM:
Ngôn ngữ lập trình chính cho ARM hiện nay là ngôn ngữ C. Các trình biên dịch cho
ARM thường được dùng:

1.2.

-

Keil ARM.

-

IAR.

-

HTPICC for ARM.

-

ImageCraft ICCV7 for ARM

Cấu trúc của ARM

1.2.1 Kiến trúc thiết kế RISC của ARM
ARM xây dựng bộ vi xử lý theo kiến trúc RISC những năm 1980 để sử dụng

trong các máy tính cá nhân của mình. Những kiến trúc RISC đầu tiên: của IBM (IBM
801) của Berkeley (RISC1 của Patterson) và của Stanford (MIPS của Hennessy)
CISC - Complex Instruction Set Computer
Bảng 1: Đặc tính của một vài máy CISC

9


kiến trúc với tập lệnh phức tạp CISC (Complex Instruction Set Computer) được
nghĩ ra từ những năm 1960. Vào thời kỳ này, người ta nhận thấy các chương trình dịch
khó dùng các thanh ghi, rằng các vi lệnh được thực hiện nhanh hơn các lệnh và cần
thiết phải làm giảm độ dài các chương trình. Các đặc tính nầy khiến người ta ưu tiên
chọn các kiểu ô nhớ - ô nhớ và ô nhớ - thanh ghi, với những lệnh phức tạp và dùng
nhiều kiểu định vị. Điều này dẫn tới việc các lệnh có chiều dài thay đổi và như thế thì
dùng bộ điều khiển vi chương trình là hiệu quả nhất. Bảng 1 cho các đặc tính của vài
máy CISC tiêu biểu. Ta nhận thấy cả ba máy đều có điểm chung là có nhiều lệnh, các
lệnh có chiều dài thay đổi. Nhiều cách thực hiện lệnh và nhiều vi chương trình được
dùng.
Ưu điểm:
- Chương trình ngắn hơn so với kiến trúc RISC.
- Số lệnh để thực hiện chương trình ít hơn.
- Khả năng thâm nhập bộ nhớ dễ dàng hơn.
- Các bộ xử lý CISC trợ giúp mạnh hơn các ngôn ngữ cao cấp nhờ có tập lệnh
phức tạp. Hãng Honeywell đã chế tạo một máy có một lệnh cho mỗi động từ của ngôn
ngữ COBOL.
Nhược điểm:
- Diện tích của bộ xử lý dùng cho bộ điều khiển lớn. Giảm khả năng tích hợp
thêm vào vi xử lý.
- Tốc độ tính toán còn chậm.


10


- Thời gian xây dựng xong bộ vi xử lý là lâu hơn do các câu lệnh phức tạp.Và
thời gian thực hiện lệnh lâu khả năng xảy ra rủi ro nhiều.
RISC - Reduced Instructions Set Computer
Tiến bộ trong lãnh vực mạch kết (IC) và kỹ thuật dịch chương trình làm cho các nhận
định trước đây phải được xem xét lại, nhất là khi đã có một khảo sát định lượng về
việc dùng tập lệnh các máy CISC. Ví dụ, chương trình dịch đã biết sử dụng các thanh
ghi và không có sự khác biệt đáng kể nào khi sử dụng ô nhớ cho các vi chương trình
hay ô nhớ cho các chương trình. Điều này dẫn tới việc đưa vào khái niệm về một máy
tính với tập lệnh rút gọn RISC vào đầu những năm 1980. Các máy RISC dựa chủ yếu
trên một tập lệnh cho phép thực hiện kỹ thuật ống dẫn một cách thích hợp nhất bằng
cách thiết kế các lệnh có chiều dài cố định, có dạng đơn giản, dễ giải mã. Máy RISC
dùng kiểu thực hiện lệnh thanh ghi - thanh ghi. Chỉ có các lệnh ghi hoặc đọc ô nhớ
mới cho phép thâm nhập vào ô nhớ. Bảng 2 diễn tả ba mẫu máy RISC đầu tiên: mẫu
máy của IBM (IBM 801) của Berkeley (RISC1 của Patterson) và của Stanford (MIPS
của Hennessy). Ta nhận thấy cả ba máy đó đều có bộ điều khiển bằng mạch điện
(không có ô nhớ vi chương trình), có chiều dài các lệnh cố định (32 bits), có một kiểu
thi hành lệnh (kiểu thanh ghi - thanh ghi) và chỉ có một số ít lệnh.
Bảng 2: Đặc tính của ba mẫu đầu tiên máy RISC

Tóm lại, ta có thể định nghĩa mạch xử lý RISC bởi các tính chất sau:
- Có một số ít lệnh (thông thường dưới 100 lệnh ).
- Có một số ít các kiểu định vị (thông thường hai kiểu: định vị tức thì và định vị
gián tiếp thông qua một thanh ghi).
- Có một số ít dạng lệnh (một hoặc hai)

11



- Các lệnh đều có cùng chiều dài.
- Chỉ có các lệnh ghi hoặc đọc ô nhớ mới thâm nhập vào bộ nhớ.
- Dùng bộ tạo tín hiệu điều khiển bằng mạch điện để tránh chu kỳ giải mã các vi
lệnh làm cho thời gian thực hiện lệnh kéo dài.
- Bộ xử lý RISC có nhiều thanh ghi để giảm bớt việc thâm nhập vào bộ nhớ trong.
- Ngoài ra các bộ xử lý RISC đầu tiên thực hiện tất cả các lệnh trong một chu kỳ
máy.
Bộ xử lý RISC có các ưu điểm sau :
-

Diện tích của bộ xử lý dùng cho bộ điều khiển giảm từ 60% (cho các bộ xử lý
CISC) xuống còn 10% (cho các bộ xử lý RISC). Như vậy có thể tích hợp thêm vào
bên trong bộ xử lý các thanh ghi, các cổng vào ra và bộ nhớ cache .....

-

Tốc độ tính toán cao nhờ vào việc giải mã lệnh đơn giản, nhờ có nhiều thanh ghi
(ít thâm nhập bộ nhớ), và nhờ thực hiện kỹ thuật ống dẫn liên tục và có hiệu quả
(các lệnh đều có thời gian thực hiện giống nhau và có cùng dạng).

-

Thời gian cần thiết để thiết kế bộ điều khiển là ít. Điều này góp phần làm giảm chi
phí thiết kế.

-

Bộ điều khiển trở nên đơn giản và gọn làm cho ít rủi ro mắc phải sai sót mà ta gặp
thường trong bộ điều khiển.


-

Trước những điều lợi không chối cãi được, kiến trúc RISC có một số bất lợi

-

Các chương trình dài ra so với chương trình viết cho bộ xử lý CISC. Điều này do
các nguyên nhân sau :

-

Cấm thâm nhập bộ nhớ đối với tất cả các lệnh ngoại trừ các lệnh đọc và ghi vào bộ
nhớ. Do đó ta buộc phải dùng nhiều lệnh để làm một công việc nhất định.

-

Cần thiết phải tính các địa chỉ hiệu dụng vì không có nhiều cách định vị.

-

Tập lệnh có ít lệnh nên các lệnh không có sẵn phải được thay thế bằng một chuỗi
lệnh của bộ xử lý RISC.

12


-

Các chương trình dịch gặp nhiều khó khăn vì có ít lệnh làm cho có ít lựa chọn để

diễn dịch các cấu trúc của chương trình gốc. Sự cứng nhắc của kỹ thuật ống dẫn
cũng gây khó khăn.

-

Có ít lệnh trợ giúp cho ngôn ngữ cấp cao.
Các bộ xử lý CISC trợ giúp mạnh hơn các ngôn ngữ cao cấp nhờ có tập lệnh

phức tạp. Hãng Honeywell đã chế tạo một máy có một lệnh cho mỗi động từ của ngôn
ngữ COBOL.
Các tiến bộ gần đây cho phép xếp đặt trong một vi mạch, một bộ xử lý RISC nền
và nhiều toán tử chuyên dùng.
1.2.2 Kiến trúc đường ống
Kiến trúc đường ống là kiến trúc cơ bản trong vi điều khiển ARM, hình 1.7 mô tả
kiến trúc đường ống ba tầng để minh họa các bước thực thi lệnh: fetch – decode –
excute (nhận lệnh – giải mã – thực thi).

Hình 1 Kiến trúc đường ống ba tầng.
Trong kiến trúc đường ống, khi một lệnh đang được thực thi thì lệnh thứ hai đang
được giải mã và lệnh thứ ba bắt đầu được nạp từ bộ nhớ. Với kỹ thuật này thì tốc độ
xử lý tăng lên rất nhiều trong một chu kỳ máy.
Trong hình 1.7 cho ta thấy được một chuỗi ba lệnh được nạp, giải mã, và thực thi
bởi bộ xử lý. Mỗi lệnh có một chu trình duy nhất để hoàn thành sau khi đường ống
được lấp đầy. Tập lệnh được đặt vào các đường ống liên tục. Trong chu kỳ đầu tiên lõi
xử lý nạp lệnh ADD (cộng) từ bộ nhớ. Trong chu kỳ thứ hai lõi tìm nạp các lệnh SUB
(trừ) và giải mã lệnh ADD. Trong chu kỳ thứ ba, cả hai lệnh SUB và ADD được di
chuyển dọc theo đường ống. Lệnh ADD được thực thi, lệnh SUB được giải mã, và

13



lệnh CMP (so sánh) được nạp. Quá trình này được gọi là lấp đầy đường ống. Kiến trúc
đường ống cho phép lõi xử lý thực hiện lệnh trong mỗi chu kỳ.
Khi tăng chiều dài đường ống, số lượng công việc thực hiện ở từng công đoạn
giảm, điều này cho phép bộ xử lý phải đạt được đến một tần số hoạt động cao hơn để
tăng hiệu suất thực thi. Thời gian trễ của hệ thống cũng sẽ tăng lên bởi vì có nhiều chu
kỳ hơn để lấp đầy đường ống trước khi lõi xử lý có thể thực thi một lệnh. Chiều dài
đường ống tăng lên cũng có nghĩa là dữ liệu cũng có thể sẽ phải phụ thuộc giữa các
công đoạn nhất định.
ARM giới thiệu và đưa ra kiến trúc đường ống có năm tác vụ, với vùng nhớ dữ
liệu và chương trình riêng biệt. Từ kiến trúc lệnh có ba tác vụ được chia nhỏ lại thành
năm tác vụ cũng làm cho mỗi chu kỳ xung nhịp sẽ thực hiện một công việc đơn giản
hơn ở mỗi công đoạn, cho phép có thể tăng chu kỳ xung nhịp của hệ thống.
Sự tách rời bộ nhớ chương trình và bộ nhớ dữ liệu cũng cho phép giảm đáng kể tài
nguyên chiếm của mỗi lệnh trong một chu kỳ máy.

Hình 2 Kiến trúc đường ống ba tầng trong tập lệnh có nhiều chu kỳ máy.

Thời gian để bộ xử lý thực thi một chương trình được tính bởi công thức:
Tpro =
Trong đó:
CPI là số xung nhịp trung bình cần cho mỗi lệnh;

14


Ninst là số lệnh thực thi một chương trình (cố định);
fclk là tần số xung nhịp.
Với công thức trên thì có hai cách để giảm thời gian thực thi một chương trình:
Tăng tần số xung nhịp: điều này đòi hỏi trạng thái của mỗi nhiệm vụ trong dòng

chảy lệnh đơn giản, và do đó số tác vụ sẽ tăng thêm.
Giảm CPI: điều này đòi hỏi mỗi lệnh cần nhiều dòng chảy lệnh hơn với tác vụ
không đổi, hoặc các tác vụ cần đơn giản hơn, hoặc kết hợp cả hai lại với nhau.

1.3.

Phân loại

Kiến trúc

Biến thể

CTy sản xuất

Kiến trúc vĩ mô (lõi)

ARMv1

Acorn

ARM1

ARMv2

Acorn

ARM2

Acorn


ARM3

ARM

ARM250

ARM

ARM6, ARM7

ARM

ARM8

DEC

StrongARM

ARM

ARM7TDMI, ARM9TDMI

ARM

ARM7EJ, ARM9E, ARM10E

Intel

XScale


ARM

ARM11

ARMv2a

ARMv3

ARMv4
ARMv4

ARMv4T

ARMv5

ARMv6

ARMv5TE

ARMv6

15


ARMv6-M

ARM

Cortex-M0, Cortex-M1


ARM

Cortex-A5, Cortex-A7, Cortex-A8, Cortex-A9,
Cortex-A12, Cortex-A15, Cortex-A17

Apple

Swift

Marvell

Sheeva PJ4

Qualcomm

Scorpion, Krait

ARMv7-R

ARM

Cortex-R4, Cortex-R5, Cortex-R7

ARMv7-M

ARM

Cortex-M3

ARMv7EM


ARM

Cortex-M4

ARM

Cortex-A35, Cortex-A53, Cortex-A57, Cortex-A72,
Cortex-A73

Apple

Cyclone, Typhoon, Twister, Hurricane, Zephyr

AMD

K12

ARMv7-A

ARMv7

AppliedMicro Storm, Shadowcat, Skylark
ARMv8

ARMv8-A
Nvidia

Denver


Phytium

Xiaomi

Samsung

M1, M2, M3

Qualcomm

Kryo, Falkor

16


ARMv8.1

ARMv8.1A

Cavium

Vulcan

Cortex-A55, Cortex-A75, Cortex-A76
ARM
Neoverse N1, Neoverse E1

ARMv8.2

ARMv8.3


1.4.

ARMv8.2A

ARMv8.3A

Ampere

Quicksilver

Nvidia

Carmel

Samsung

M4, M5

Qualcomm

Saphira

Ứng dụng ARM
Thẻ nhớ (Flash Cards & Keys):
Những sản phẩm thẻ nhớ (flash cards) đòi hỏi chi phí rất thấp, tiêu thụ điện

năng thấp và độ bảo mật cao. Đa số các lõi CPU của ARM có thích thước nhỏ, hiệu
quả sử dụng cao, mật độ mã (code) tối ưu, và cung cấp một một giải pháp hấp dẫn nhất
cho thị trường này. Khi kết hợp ARM với Discretix 'CryptoFlash ™ bảo mật IP các

nhà thiết kế đạt được một giải pháp nhỏ gọn, nhanh, mạnh mẽ và đã được chứng minh
cho nhu cầu bảo mật của họ.
Hệ thống mạng trong nhà (Home Networking):
Có nhiều chipset dùng cấu trúc ARM đang được sử dụng trong một loạt các thiết
bị thông dụng hiện có và các thiết bị SOHO, như routers, cable modems, DSL modems
and gateways. Ngoài ra, các ARM Partners còn cung cấp một số phần mềm ứng dụng
để tăng tốc độ phát triển các giải pháp đầu cuối.
Mạng lưu trữ (Storage Networking:)
Các thiết bị sử dụng ARM có thể được tìm thấy trong một loạt các thiết bị hạ
tầng cơ sở lưu trữ mạng, từ các thiết bị tiêu dung mới NAS đến các ứng dụng cao cấp

17


như Fibre Channel và iSCSI. Bộ vi xử lý ARM được trang bị cơ cấu nạp tắt của bộ mã
iSCSI và HBAs (Host Bus Adapter), trong khi sự dẩn đầu các giải pháp PHY truyền
nối tiếp tốc độ cao đang cung cấp các kết nối tốc độ cao. Ngày nay, các chip cần phải
truyền được dữ liệu trong các mạng tốc độ cực cao. Thị phần của HBA trang bị ARM
chiếm khoảng 50% thị trường kênh sợi HBA (fibre channel HBA).
VoIP
ARM hỗ trợ và xử lý VoIP đáp ứng được dải phổ rộng của các loại sản phẩm, từ
các line card trong các thiết bị hạ tầng cơ sở đến điện thoại để bàn. Các lõi vi xử lý đa
dạng của ARM thì lý tưởng để đáp ứng dược các nhu cầu nhiệm vụ rộng lớn của thị
trường này. Đối với các sản phẩm VoIP công nghệ cao, bao gồm các cổng cơ sở bằng
giọng nói, có nhiều loại chipset đang kết nối lõi ARM với các công cụ xử lý tín hiệu số
hoặc một bộ xử lý DSP để cho phép nhân số lượng kênh thoại lên nhiều lần.
Mạng không dây (Wireless Networking):
Không gian kết nối mạng không dây đòi hỏi chi phí cực thấp, thiết bị tiêu thụ
điện năng thấp để làm tăng khả năng đáp ứng. Trong khi các nhà sản xuất chip WLAN
liên tục đổi mới về tính năng và chất lượng, thì các nhà sản xuất chip WiMax và UWB

luôn tìm cách giảm giá nhanh chóng thông qua việc sử dụng hiệu quả kích thước
chip và đổi mới cấu trúc. ARM đang dẩn đầu với giải pháp đỉnh cao 802.11, và đang
cộng tác với UWB, WiMax và các nhà cung cấp giải pháp 802.11n để làm giảm mức
tiêu thụ điện năng và tiết kiệm chi phí cần thiết cho các giải pháp không dây trong
tương lai.

18


Chương 2. NGOẠI VI CỦA VI ĐIỀU KHIỂN ARM STM32F411VE
2.1.

Giới thiệu về dòng vi điều khiển STM32
STM32 là vi điều khiển do hãng ST Microelectronic dựa trên nền tảng lõi ARM

Cortex-M4 thế hệ mới do hãng ARM thiết kế. Lõi ARM Cortex-M4 là sự cải tiến từ lõi
ARMv7E-M truyền thống từng mang lại thành công vang dội cho công ty ARM.
ST đã đưa ra thị trường 4 dòng vi điều khiển dựa trên ARM7 và ARM9, nhưng
STM32 là một bước tiến quan trọng trên đường cong chi phí và hiệu suất
(price/performance), giá chỉ gần 1 Euro với số lượng lớn, STM32 là sự thách thức thật sự
với các vi điều khiển 8 và 16-bit truyền thống. STM32 đầu tiên gồm 14 biến thể khác
nhau, được phân thành hai dòng: dòng Performance có tần số hoạt động của CPU lên tới
100Mhz và dòng Access có tần số hoạt động lên tới 50Mhz. Các biến thể STM32 trong
hai nhóm này tương thích hoàn toàn về cách bố trí chân (pin) và phần mềm, đồng thời
kích thước bộ nhớ FLASH ROM có thể lên tới 512K và 128K SRAM.

Hình 3 Kiến trúc STM32 nhánh Performance và Access.
Sự tinh vi
Các ngoại vi của STM32 cũng giống như những vi điều khiển khác, như hai bộ
chuyển đổi ADC, timer, I2C, SPI, CAN, USB và RTC.

Bộ ADC 12-bit có tích hợp một cảm biến nhiệt độ để tự động hiệu chỉnh khi nhiệt
độ thay đổi và hỗ trợ nhiều chế độ chuyển đổi. Mỗi bộ định thời có 4 khối capture
19


compare (dùng để bắt sự kiện với tính năng input capture và tạo dạng sóng ở ngõ ra với
output compare), mỗi khối định thời có thể liên kết với các khối định thời khác để tạo ra
một mảng các định thời tinh vi hơn. Một bộ định thời cao cấp chuyên hỗ trợ điều khiển
động cơ, với 6 đầu ra PWM với dead time (khoảng thời gian được chèn vào giữa hai đầu
tín hiệu xuất PWM bù nhau trong điều khiển mạch cầu H) lập trình được và một đường
break input (khi phát hiện điều kiện dừng khẩn cấp) sẽ buộc tín hiệu PWM sang một trạng
thái an toàn đã được cài sẵn. Ngoại vi nối tiếp SPI có một khối kiểm tổng (CRC) bằng
phần cứng cho 8 và 16 word hỗ trợ tích cực cho giao tiếp thẻ nhớ SD hoặc MMC.
STM32 có hỗ trợ thêm tối đa 12 kênh DMA (Direct Memory Access). Mỗi kênh có
thể được dùng để truyền dữ liệu đến các thanh ghi ngoại vi hoặc từ các thanh ghi ngoại vi
đi với kích thước từ (word) dữ liệu truyền đi có thể là 8/16 hoặc 32-bit. Mỗi ngoại vi có
thể có một bộ điều khiển DMA (DMA controller) đi kèm dùng để gửi hoặc đòi hỏi dữ liệu
như yêu cầu. Một bộ phân xử bus nội (bus arbiter) và ma trận bus (bus matrix) tối thiểu
hoá sự tranh chấp bus giữa truy cập dữ liệu thông qua CPU (CPU data access) và các
kênh DMA. Điều đó cho phép các đơn vị DMA hoạt động linh hoạt, dễ dùng và tự động
điều khiển các luồng dữ liệu bên trong vi điều khiển.
STM32 là một vi điều khiển tiêu thụ năng lượng thấp và đạt hiệu suất cao. Nó có thể
hoạt động ở điện áp 2V, chạy ở tần số 50MHz và dòng tiêu thụ chỉ có 36mA với tất cả các
khối bên trong vi điều khiển đều được hoạt động. Kết hợp với các chế độ tiết kiệm năng
lượng của Cortex, STM32 chỉ tiêu thụ 2μA khi ở chế độ Standby.
Sự an toàn
Ngày nay các ứng dụng hiện đại thường phải hoạt động trong môi trường khắc khe,
đòi hỏi tính an toàn cao, cũng như đòi hỏi sức mạnh xử lý và càng nhiều thiết bị ngoại vi
tinh vi. Để đáp ứng các yêu cầu khắc khe đó, STM32 cung cấp một số tính năng phần
cứng hỗ trợ các ứng dụng một cách tốt nhất. Chúng bao gồm một bộ phát hiện điện áp

thấp, một hệ thống bảo vệ xung Clock và hai bộ Watchdogs. Bộ đầu tiên là một Watchdog
cửa sổ (windowed watchdog). Watchdog này phải được làm tươi trong một khung thời
gian xác định. Nếu nhấn nó quá sớm, hoặc quá muộn, thì Watchdog sẽ kích hoạt. Bộ thứ
hai là một Watchdog độc lập (independent watchdog), có bộ dao động bên ngoài tách biệt
20


với xung nhịp hệ thống chính. Hệ thống bảo vệ xung nhịp có thể phát hiện lỗi của bộ dao
động chính bên ngoài (thường là thạch anh) và tự động chuyển sang dùng bộ dao động
nội RC 8MHz.
Tính bảo mật
Bộ nhớ Flash của STM32 có thể được khóa để chống truy cập đọc Flash thông qua
cổng Debug. Khi tính năng bảo vệ đọc được kích hoạt, bộ nhớ Flash cũng được bảo vệ
chống ghi để ngăn chặn mã không tin cậy được chèn vào bảng vector ngắt. Hơn nữa bảo
vệ ghi có thể được cho phép trong phần còn lại của bộ nhớ Flash. STM32 cũng có một
đồng hồ thời gian thực và một khu vực nhỏ dữ liệu trên SRAM được nuôi nhờ nguồn pin.
Khu vực này có một đầu vào chống giả mạo (anti-tamper input), có thể kích hoạt một sự
kiện ngắt khi có sự thay đổi trạng thái ở đầu vào này. Ngoài ra một sự kiện chống giả mạo
sẽ tự động xóa dữ liệu được lưu trữ trên SRAM được nuôi bằng nguồn pin.
Phát triển phần mềm
Nếu bạn đã sử dụng một vi điều khiển dựa trên lõi ARM, thì các công cụ phát triển
cho ARM hiện có đã được hỗ trợ tập lệnh Thumb-2 và dòng Cortex. Ngoài ra ST cũng
cung cấp một thư viện điều khiển thiết bị ngoại vi, một bộ thư viện phát triển USB như là
một thư viện ANSI C và mã nguồn đó là tương thích với các thư viện trước đó được công
bố cho vi điều khiển STR7 và STR9. Dòng Cortex-M3 cũng đi kèm với một hệ thống gỡ
lỗi hoàn toàn mới gọi là CoreSight. Truy cập vào hệ thống CoreSight thông qua cổng truy
cập Debug (Debug Access Port), cổng này hỗ trợ kết nối chuẩn JTAG hoặc giao diện 2
dây (serial wire-2 Pin), cũng như cung cấp trình điều khiển chạy gỡ lỗi, hệ thống
CoreSight trên STM32 cung cấp hệ thống điểm truy cập(data watchpoint) và một công cụ
theo dõi (instrumentation trace).

Hình 4 Dưới đậy là sơ đồ khối ARM STM32F411VE

21


Sơ đồ chân
Sơ đồ chân dạng LQFP (100 chân ) bốn hàng chân dán vỏ mỏng.
22


Sơ đồ chân dạng UFBGA (100 chân ) bốn hàng chân dán dưới đế.

2.2.

Tổ chức bộ nhớ

Bộ nhớ của VĐK ARM STM32F411VE gồm 2 loại:
23


Bộ nhớ trương trình (program memory)
Bộ nhớ dữ liệu RAM ( data RAM)
Trong STM32F411, hệ thống chính bao gồm ma trận bus AHB đa lớp 32 bit kết nối
Ma trận xe buýt cung cấp quyền truy cập từ masters đến slaves, cho phép truy cập đồng
thời và hoạt động hiệu quả ngay cả khi một số thiết bị ngoại vi tốc độ cao hoạt động đồng
thời.

Hình 5 Kiến trúc hệ thống
I-bus
Bus này kết nối Bus Hướng dẫn của Cortex ® -M4 với lõi FPU với BusMatrix. Bus này

được sử dụng bởi lõi để lấy hướng dẫn. Mục tiêu của Bus này là một bộ nhớ chứa mã (bộ
nhớ Flash nội bộ / SRAM).
D-bus
Bus này kết nối cơ sở dữ liệu của Cortex ® -M4 với FPU với BusMatrix. Bus này là được
sử dụng bởi lõi để tải theo nghĩa đen và truy cập gỡ lỗi. Mục tiêu của chiếc xe buýt này là
một bộ nhớ chứa mã hoặc dữ liệu (bộ nhớ Flash bên trong / SRAM).
S-bus

24


Bus này kết nối bus hệ thống của Cortex ® -M4 với lõi FPU với BusMatrix. Điều này bus
được sử dụng để truy cập dữ liệu nằm trong thiết bị ngoại vi hoặc SRAM. Hướng dẫn
cũng có thể là tìm nạp trên bus này (kém hiệu quả hơn ICode). Mục tiêu của xe buýt này
là nội bộ SRAM1, các thiết bị ngoại vi AHB1 bao gồm các thiết bị ngoại vi APB và các
thiết bị ngoại vi AHB2.
bộ nhớ flash
Giao diện bộ nhớ Flash quản lý CPU AHB I-Code và D-Code truy cập vào bộ nhớ Flash.
Nó thực hiện các thao tác xóa và lập trình Flash và đọc và đọc viết cơ chế bảo vệ. Nó tăng
tốc thực thi mã với một hệ thống hướng dẫn dòng tải trước và bộ đệm. Bộ nhớ Flash được
sắp xếp như sau: Một khối bộ nhớ chính được chia thành các lĩnh vực. Bộ nhớ hệ thống
mà thiết bị khởi động ở chế độ khởi động Bộ nhớ hệ thống 512 byte OTP (lập trình một
lần) cho dữ liệu người dùng. Tùy chọn byte để cấu hình bảo vệ đọc và ghi, mức BOR,
watchdog phần mềm / phần cứng và đặt lại khi thiết bị ở chế độ Chờ hoặc Dừng.

2.3.

Khối tạo dao dộng

Ba nguồn xung khác nhau có thể được sử dụng để điều khiển xung hệ thống (SYSCLK):

-

xung dao động HSI

-

xung dao động HSE

-

xung chính PLL (PLL)

Các thiết bị có hai nguồn xung thứ cấp sau:
-

RC nội bộ tốc độ thấp 32 kHz (LSI RC) điều khiển cơ quan giám sát độc lập và,

tùy chọn, RTC được sử dụng để Tự động đánh thức từ chế độ Dừng / Chờ.
-

Tinh thể ngoài tốc độ thấp 32,768 kHz (tinh thể LSE) tùy chọn điều khiển RTC

xung (RTCCLK)
Mỗi nguồn xung có thể được bật hoặc tắt độc lập khi không sử dụng, để tối ưu hóa sự tiêu
thụ năng lượng.

25



×