Professional Documents
Culture Documents
KỸ THUẬT VI XỬ LÝ
Chương 4
Vi điều khiển STM32- Lịch sử và giới thiệu chung
TS. Trương Cao Dũng
CHƯƠNG X
NỘI DUNG
I. Tổng quan về ARM
II. ARM STM32F1X
2
CHƯƠNG X
NỘI DUNG
I. Tổng quan về ARM
1. Sơ lược về tên gọi
2. Đôi nét về lịch sử hình thành và phát triển
3. Lý do nên sử dụng ARM
4. Kiến trúc của ARM
5. Phân loại
6. Giới thiệu về ARM Cortex
7. Giới thiệu về ARM Cortex-M3
3
CHƯƠNG X
1. SƠ LƯỢC VỀ TÊN GỌI
ARM lúc đầu được đặt tên theo công ty Acorn. ARM = Acorn RISC Machine
(dịch nôm na là chiếc máy tính sử dụng tập lệnh đơn giản của công ty Acorn)
Sau đó, do có nhiều them công ty cùng phát triển và một số lý do khác người
ta thống nhất gọi ARM = Advance RISH Machine.
ARM là một loại cấu trúc vi xử lý 32 bit kiểu RISC (thuộc kiến trúc
Hardvard, có tập lệnh rút gọn) được sử dụng rộng rãi trong các thiết kế nhúng.
Do đó đặ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 hang đầu.
4
CHƯƠNG X
Ngày nay, ARM được ứng dụng và rộng rãi trên mọi lĩnh vực của đời sống:
Robot, máy tính, điện thoại, xe hơi, máy giặt…
5
Hình 1.1 Một số ứng dụng của ARM
CHƯƠNG X
NỘI DUNG
I. Tổng quan về ARM
1. Sơ lược về tên gọi
2. Đôi nét về lịch sử hình thành và phát triển
3. Lý do nên sử dụng ARM
4. Kiến trúc của ARM
5. Phân loại
6. Giới thiệu về ARM Cortex
7. Giới thiệu về ARM Cortex-M3
6
CHƯƠNG X
2. ĐÔI NÉT VỀ LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN
Việc thiết kế ARM được bắt đầu từ năm 1983 trong một dự án phát triển của
công ty máy tính Acorn.
• ARM1 ra mắt vào năm 1985.
• ARM2 ra mắt vào năm 1986 với thiết kế đơn giản chỉ gồm 30.000
transistor. 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.
• ARM3 được tạo ra với 4KB cache và có chức năng được cải thiện tốt hơn
nữa.
7
CHƯƠNG X
Vào những năm cuối thập niên 80, hãng máy tính Apple Computer và hãng VLSI
Technology bắt đầu hợp tác với Acorn để phát triển các thế hệ lõi ARM mới. 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 1992 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
RiscPC của họ.
Trải qua nhiều thế hệ nhưng lõi ARM gần như không thay đổi kích thước. ARM2
có 30.000 transistors trong khi ARM6 chỉ tăng lên đến 35.000. Ý tưởng của nhà
sản xuất lõi ARM là sao cho người sử dụng có thể ghép lõi ARM với một số bộ
phận tùy chọn nào đó để tạo ra một CPU hoàn chỉnh, một loại CPU mà có thể tạo
ra trên những nhà máy sản xuất bán dẫn cũ và vẫn tiếp tục tạo ra được sản phẩm
với nhiều tính năng mà giá thành vẫn thấp.
8
CHƯƠNG X
10
CHƯƠNG X
3. LÝ DO NÊN SỬ DỤNG ARM
Được xây dựng theo kiểu cấu trúc mở: quy trình xử lý các thuật toán hiệu
quả hơn để bảo vệ CPU không bị quá tải, tiết kiệm bộ nhớ và năng lượng:
• Thumb ® -2 - Cải thiện đáng kể mật độ code
• DSP - Xử lý tín hiệu trực tiếp trong lõi RISC
• Jazelle ® - Java tăng tốc
• TrustZone ® - Môi trường phần cứng/phần mềm được bảo mật tối đa
Bộ xử lý: Thông qua những ứng dụng mạnh mẽ và đa năng, các vi xử lý chạy từ
1MHz đến 1 GHz có cải tiến về cấu trúc nên mang lại hiệu năng xử lý cao trong các
ứng dụng Multimedia và Java.
11
CHƯƠNG X
Công cụ lựa chọn (Tools of choice): Bộ vi xử lý ARM có phạm vi ứng dụng rộng rải
nhất vì luôn có sẵn các Tools hỗ trợ phần cứng và phần mềm cho bất kỳ cấu trúc 32-bit
nào.
Tiêu thụ điện năng thấp: Các giải pháp dùng vi xử lý ARM luôn tiêu thụ thấp nhất điện
năng trong ngành công nghiệp và MIPS mỗi Watt. Điều này cho phép pin chạy lâu hơn
với các tính năng rất tiên tiến.
Chi phí silicon thấp: Bộ xử lý ARM và các sản phẩm IP khác làm cho việc sử dụng
silicon và bộ nhớ hiệu quả hơn để tương thích với của các thiết bị không dây. Các đặc
tính của cấu trúc như công nghệ lõi Thumb và Thumb-2 làm giảm kích thước code, tối
thiểu footprint và chi phí của silicon.
Hỗ trợ rộng khắp: ARM là cấu trúc vi xử lý được luôn có được sự hỗ trợ tốt nhất. Vì có
một loạt các hệ điều hành OS, Middleware và Tools đáp ứng sự lựa chọn phong phú của
các giải pháp multimedia codec đã được tối ưu hóa cho bộ vi xử lý ARM, tất cả đều có
sẵn trong ARM Connected Community. 12
CHƯƠNG X
NỘI DUNG
I. Tổng quan về ARM
1. Sơ lược về tên gọi
2. Đôi nét về lịch sử hình thành và phát triển
3. Lý do nên sử dụng ARM
4. Kiến trúc của ARM
5. Phân loại
6. Giới thiệu về ARM Cortex
7. Giới thiệu về ARM Cortex-M3
13
CHƯƠNG X
4. KIẾN TRÚC CỦA ARM
Các con chip dùng kiến trúc ARM được tạo ra
dựa trên thiết kế RISC.
Lợi ích của việc sử dụng RISC đó là các con chip
được sản xuất với chi phí thấp hơn, lượng nhiệt
tỏa ra khi hoạt động thấp hơn, mức độ tiêu thụ
điện thấp hơn
Chính vì thế, những bộ xử lí ARM thường được
dùng trong các thiết bị di động đòi hỏi thời lượng
pin lâu và kiểu dáng nhỏ, nhẹ, điển hình là
smartphone và tablet ngày nay.
15
CHƯƠNG X
5. PHÂN LOẠI
ARM có hai thứ cơ bản là kiến trúc vi xử lý (microprocessor architecture) và bộ vi xử lý
(processor core).
2 kiến trúc vi xử lí của ARM đó là ARMv6 và ARMv7. Hầu hết các bộ vi xử lý ARM mới
trên các smartphone hiện nay sử dụng kiến trúc ARMv7. Kiến trúc ARMv6 được sử dụng
trên các vi xử lý ARM11 tích hợp bên trong các smartphone dùng SoC cũ như HTC Dream
và iPhone 3G.
Hiện nay, có hai loại vi xử lý ARM được dùng phổ biến là: ARM Cortex A8 và ARM
Cortex A9. Cả hai loại vi xử lý này đều sử dụng kiến trúc ARMv7. Trong đó, ARM Cortex-
A8 là vi xử lý lõi đơn, còn ARM Cortex-A9 là bộ vi xử lý nhiều lõi (lên tới bốn lõi). Ngoài
việc có nhiều lõi hơn, A9 có tốc độ xử lý nhanh hơn các vi xử lý A8 trên mỗi đơn vị MHz
(2.0 DMIPS/MHz và 2.5 DMIPS/MHz - DMIPS hiểu đơn giản là thước đo tốc độ xử lý).
16
CHƯƠNG X
NỘI DUNG
I. Tổng quan về ARM
1. Sơ lược về tên gọi
2. Đôi nét về lịch sử hình thành và phát triển
3. Lý do nên sử dụng ARM
4. Kiến trúc của ARM
5. Phân loại
6. Giới thiệu về ARM Cortex
7. Giới thiệu về ARM Cortex-M3
17
CHƯƠNG X
6. GIỚI THIỆU VỀ ARM CORTEX
Để phù hợp với nhu cầu sử dụng, ARM Cortex được chia làm 3 dòng:
1. Cortex-A: Bộ xử lý dành cho hệ điều hành và các ứng dụng phức tạp. Hỗ
trợ tập lệnh ARM, thumb, và thumb-2.
2. Cortex-R: Bộ xử lý dành cho hệ thống đòi hỏi khắc khe về đáp ứng thời
gian thực. Hỗ trợ tập lệnh ARM, thumb, và thumb-2.
3. Cortex-M: Bộ xử lý dành cho dòng vi điều khiển, được thiết kế để tối ưu
về giá thành. Hỗ trợ tập lệnh Thumb-2. (Dòng ARM STM32 có lõi Cortex-
M)
Giá trị số nằm cuối tên của 1 dòng ARM (ví dụ ARM Cortex-M3) cho biết về
mức độ hiệu suất tương đối của dòng đó. Theo đó dòng ARM mang số 0 sẽ có
hiệu suất thấp nhất. 18
CHƯƠNG X
NỘI DUNG
I. Tổng quan về ARM
1. Sơ lược về tên gọi
2. Đôi nét về lịch sử hình thành và phát triển
3. Lý do nên sử dụng ARM
4. Kiến trúc của ARM
5. Phân loại
6. Giới thiệu về ARM Cortex
7. Giới thiệu về ARM Cortex-M3
19
CHƯƠNG X
7. GIỚI THIỆU VỀ ARM CORTEX-M3
ARM Cortex- M3 có những đặc điểm sau:
• ARM Cortex - M3 được xây dựng dựa trên
kiến trúc ARMv7- M 32 bit.
• Kiến trúc Harvard tách biệt Bus dữ liệu và
lệnh.
• Đơn vị bảo vệ bộ nhớ (MPU- Memory
Protection Unit ): hỗ trợ bảo vệ bộ nhớ thông
qua việc phân quyền thực thi và truy xuất.
Hình 1.4 So sánh tốc độ và công suất tiêu thụ của các dòng ARM
23
NỘI DUNG
I. Tổng quan về ARM
II. ARM STM32F1X
24
NỘI DUNG
I. Tổng quan về ARM
II. ARM STM32F1X
1. Các dòng ARM của hãng ST
2. Giới thiệu dòng ARM STM32F1
3. Kiến trúc của ARM STM32F1
4. Tổ chức vùng nhớ của ARM STM32F1
5. Bit band của ARM STM32F1X
6. Cấu hình boot cho ARM STM32 F1
7. Cấp nguồn cho ARM STM32F1
8. Các chế độ tiết kiệm điện năng 25
1.CÁC DÒNG ARM CỦA HÃNG ST
Tính đến thời điểm 8/2015 thì hãng
ST đã cho ra đời những dòng ARM
chính sau: STM32L0, STM32L1,
STM32L4, STM32F0, STM32F1,
STM32F2, STM32F3, STM32F4,
STM32F7.
37
Địa chỉ của FLASH (địa chỉ nền 0x0800 0000)
Chú ý: Khi muốn sử dụng bộ nhớ Flash để lưu trữ dữ liệu như vai trò của một EPROM thì
ta nên dựa vào bảng 2.2 để biết được phạm vi của bộ nhớ Flash ứng với dòng ta đang sử
dụng để từ đó có thể chọn vùng địa chỉ cuối bộ nhớ làm nơi lưu trữ( vì nếu chọn vùng địa
chỉ đầu có thể dữ liệu sẽ đè lên chương trình).
38
Các lệnh thông dụng liên quan đến FLASH
40
Chương trình
void WriteFlash()
{ char i; FLASH_Unlock();
// Mở khóa Flash cho phép xóa dữ liệu
FLASH_ClearFlag(FLASH_FLAG_EOP
|FLASH_FLAG_PGERR
|FLASH_FLAG_WRPRTERR);
// Xóa các cờ báo trạng thái của Flash
FLASH_ErasePage(0x0807F800);
// Xóa page cần ghi for(i =0; i<100; i++)
FLASH_ProgramHalfWord(0x0807F800 + i*2,datasave[i]);
// Ghi 100 số 16 bit vào Flash FLASH_Lock();
// Khóa Flash để cấm xóa
}
void ReadFlash()
{
char i;
for(i=0; i<100; i++)
dataread[i] = *(unsigned int *)(0x0807F800 + i*2);
// Đọc 100 số 16 bit từ Flash về
}
41
NỘI DUNG
I. Tổng quan về ARM
II. ARM STM32F1X
1. Các dòng ARM của hãng ST
2. Giới thiệu dòng ARM STM32F1
3. Kiến trúc của ARM STM32F1
4. Tổ chức vùng nhớ của ARM STM32F1
5. Bit band của ARM STM32F1X
6. Cấu hình boot cho ARM STM32 F1
7. Cấp nguồn cho ARM STM32F1
8. Các chế độ tiết kiệm điện năng 42
5. BIT BAND CỦA ARM STM32F1X
Các phiên bản ARM trước chỉ có thể thực hiện thao tác bit trên vùng nhớ SRAM và vùng
nhớ ngoại vi bằng các lệnh AND và OR. Điều này đòi hỏi CPU phải tốn nhiều thời gian
cho việc đọc và sửa đổi à ghi lại dữ liệu vào bộ nhớ.
Kỹ thuật bit band cho phép bộ xử lý ARM STM32F1 thao tác bit trực tiếp mà không cần
dùng phép AND hay OR do đó giúp giảm thiểu thời gian thực hiện.
Bit band hoạt động bằng cách ánh xạ mỗi bit trong “bit band region” tới một địa chỉ
word trong vùng “bit band alias” và bằng cách đặt (set) hay xóa (clear) word này ta có
thể đặt hoặc xóa bit tương ứng trong “bit band region”.
43
Hình 2.4 Bit band của vùng nhớ SRAM và ngoại vi
44
Công thức tính địa chỉ của 1 bit thuộc “Bit band region” được ánh xạ trong “Bit band
alias” :
Địa chỉ trong Bit Band Alias = Bit Band Alias Base Address + Bit Word Offset
Bit Word Offset = Byte offset from Bit Band Region Base * 32 + bit number * 4
Yêu cầu: Sử dụng kỹ thuật Bit Band để điều khiển sáng hoặc tắt LED được kết nối với
chân B8. Biết thanh ghi ngõ ra của PORTB (GPIOB_ODR) có địa chỉ offset là 0x0C và
địa chỉ nền (Base Address) của PORTB là 0x40010C00.
( Các thông số trên có thể xem trong datasheet hoặc xem trong file “stm32f10x.h”)
45
a) Tính toán địa chỉ:
• Tìm “Bit Band Alias Base Address” : Do PORTB là ngoại vi nên
=> Bit Band Alias Base Address = 0x42000000
• Tìm “Bit Word Offset” :
Byte offset from Bit Band Region Base = 0x40010C0C - 0x40000000 = 0x10C0C Với :
0x40000000 là Peripheral Bit Band Region Base Address
0x40010C0C là địa chỉ vật lý của GPIOB_ODR = 0x40010C00 + 0x0C
=> Bit Word Offset = 0x10C0C *32 + 8*4 = 0x2181A0
• Vậy ta có:
• Địa chỉ trong vùng Bit Band Alias của Bit 8 GPIOB_ODR (GPIOB_ODR_Bit8)
55
8.1 CHẾ ĐỘ SLEEP
Cách đưa CPU vào chế độ Sleep:
Đưa CPU vào chế độ Sleep bằng cách thực thi các lệnh WFI( Wait For Interrup- Chờ xảy
ra ngắt) hoặc WFE( Wait For Event- Chờ xảy ra sự kiện)
Tùy thuộc vào trạng thái bit SLEEPONEXIT trong thanh ghi “Cortex-M3 System Control”
mà ta có các chế độ:
• Sleep now: Khi bit SLEEPONEXIT = 0, CPU sẽ rơi vào chế độ Sleep ngay sau khi
lệnh WFI hay WFE được thực hiện xong.
• Sleep on exit: Khi bit SLEEPONEXIT = 1, CPU sẽ rơi vào trạng thái Sleep ngay sau
khi thoát khỏi ngắt có độ ưu tiên thấp nhất.
Trong chế độ Sleep tất cả các chân I/O vẫn giữ giá trị cũ như khi ở chê độ Run.
56
8.1 CHẾ ĐỘ SLEEP
Cách đưa CPU thoát khỏi chế độ Sleep:
Nếu trước đó sử dụng lệnh WFI để đưa CPU vào chế độ Sleep thì để thoát khỏi chế độ này
cần phải xảy ra môt ngắt ngoại vi được cho phép bởi NVIC
Nếu trước đó sử dụng lệnh WFE để đưa CPU vào chế độ Sleep thì CPU sẽ thoát khỏi chế
độ này ngay khi xảy ra 1 sự kiện. Sự kiện này có thể được tạo ra bằng cách:
• Cho phép ngắt ở ngoại vi nhưng không cho phép ngắt ở NVIC và cho phép bit
SEVONPEND trong thanh ghi “Cortex-M3 System Control”. Khi CPU thoát khỏi chế
độ tiết kiệm năng lượng từ WFE thì cần phải xóa các bit báo ngắt ở ngoại vi và NVIC.
• Cấu hình kênh ngắt (EXTI line) ở chế độ sự kiện (event). Khi CPU thoát khỏi chế độ
tiết kiệm năng lượng từ WFE thì không cần phải xóa các cờ ngắt.
57
8.2 CHẾ ĐỘ STOP
Chế độ Stop là sự kết hợp giữa chế độ DeepSleep (ngủ sâu) của lõi Cortex-M3 với chế độ
kiểm soát nguồn xung clock ngoại vi. Bộ điều chỉnh nguồn có thể được cấu hình theo chế
độ bình thường hoặt chế độ tiết kiệm năng lượng.
Trong chế độ này tất cả các nguồn xung clock trong vùng 1.8V đều tắt, các bộ giao động
PLL, HSI, HSE cũng được tắt hết. Dữ liệu trong SRAM được bảo vệ và tất trạng thái tất
cả các I/O không thay đổi.
58
8.2 CHẾ ĐỘ STOP
Cách đưa CPU vào chế độ Stop:
Để vào chế độ Stop ta dùng lệnh chờ ngắt WFI hoặc chờ sự kiện WFE kèm theo:cần phải
xảy ra môt ngắt ngoại vi được cho phép bởi NVIC
• Đặt bit SLEEPDEEP của thanh ghi “Cortex™-M3 System Control” lên mức ‘1’.
• Xóa bit PDDS của thanh thi “Power Control register (PWR_CR)” về ‘0’ .
• Chọn chế độ hoạt động cho bộ điều chỉnh điện áp bằng cách cấu hình bit LPDS trong
thanh ghi “ Power control register (PWR_CR)”.
Chú ý: để có thể vào được chế độ Stop thì tất cả các bit cờ báo ngắt ngoài trong thanh ghi
EXTI_PR và cờ báo động của đồng hồ thời gian thực( RTC Alarm flag) phải được xóa
trước đó nếu không chế độ Stop sẽ bị bỏ qua và chương trình tiếp tục hoạt động bình
thường.
59
8.2 CHẾ ĐỘ STOP
Cách đưa CPU thoát khỏi chế độ Stop:
Nếu trước đó sử dụng lệnh WFI để đưa CPU vào chế độ Stop thì để thoát khỏi chế độ này
cần phải xảy ra môt ngắt ngoại vi được cho phép bởi NVIC.
Nếu trước đó sử dụng lệnh WFE để đưa CPU vào chế độ Stop thì CPU sẽ thoát khỏi chế
độ này ngay khi xảy ra 1 sự kiện.
60
8.3 CHẾ ĐỘ STANDBY
Chế độ Standby là chế độ tiết kiệm năng lượng nhất, Standby hoạt động dựa trên việc đưa
CPU vào chế độ ngủ sâu đồng thời tắt bộ điều chỉnh điện áp 1.8V. Các khối giao động
PLL, HSI, và HSE cũng bị tắt hết. Dữ liệu trong SRAM và các thanh ghi bị mất chỉ trừ
các thanh ghi của Backup domain và Standby circuitry là không mất.
Trong chế độ Standby trạng thái tất cả các I/O đều ở tổng trở cao ngoại trừ:
• Chân Reset vẫn còn tác động được.
• Chân TAMPER và chân WKUP nếu được cho phép trươc đó thì vẫn hoạt động được.
61
8.3 CHẾ ĐỘ STANDBY
Cách đưa CPU vào chế độ Standby:
Để vào chế độ Standby ta dùng lệnh chờ ngắt WFI hoặc chờ sự kiện WFE kèm theo:
• Đặt bit SLEEPDEEP của thanh ghi “Cortex™-M3 System Control” lên mức ‘1’.
• Đặt bit PDDS của thanh thi “Power Control register (PWR_CR)” lên mức ‘1’.
• Xóa bit WUF trong thanh ghi “Power Control/Status register (PWR_CSR)”.
62
8.3 CHẾ ĐỘ STANDBY
Cách đưa CPU thoát khỏi chế độ Standby:
CPU sẽ thoát khỏi chế độ Standby nếu một trong các điều kiện sau xảy ra:
• Có tín hiệu cạnh lên tác động vào chân WKUP
• Có tín hiệu báo động của đồng hồ thời gian thực( RTC alarm).
• Reset bằng chân NRST.
• IWDG Reset.
63
8.4 TỰ ĐỘNG THỨC DẬY TỪ CÁC CHẾ ĐỘ TIẾT KIỆM NĂNG LƯỢNG
Tự động thức dậy (Auto Wakeup-AWU) từ các chế độ tiết kiệm năng lượng.
• Đồng hồ thời gian thực có thể được sử dụng để đánh thức CPU khỏi chế độ tiết kiệm
năng lượng mà không cần phải chờ xảy ra ngắt ngoài. Người lập trình có thể cài đặt
một lượng thời gian nào đó vào RTC để khi hết thời gian này thì RTC sẽ tự động đánh
thức CPU khỏi chế độ Stop hoặc Standby.
• Để đánh thức CPU khỏi chế độ Stop bằng sự kiện RTC alarm thì cần phải: Cấu hình
kênh ngắt ngoài số 17 (EXTI Line 17) tích cực cạnh lên và cấu hình RTC để cho phép
tạo ra tín hiệu RTC alarm.
• Để đánh thức CPU khỏi chế độ Standby, thì không cần cấu hình kênh ngắt ngoài số
17.
64
8.5 CÁC LỆNH THÔNG DỤNG LIÊN QUAN ĐẾN CHẾ ĐỘ TIẾT KIỆM
NĂNG LƯỢNG
SỬ DỤNG THƯ VIỆN “stm32f10x_pwr”
Lệnh
Thông số hay dùng Giải thích
PWR_DeInit();
(Lệnh reset các thanh ghi liên quan đến chế độ tiết kiệm năng lượng vể mặc định)
PWR_WakeUpPinCmd(A);
(Lệnh cho phép hoặc cấm chân WakeUp đánh thức CPU)
A: A: Cho phép hoặc cấm
ENABLE Cho phép
DISABLE Cấm
PWR_EnterSTOPMode(A, B) ;
( Lệnh điều khiển CPU vào chế độ Stop )
A: A: Chọn chế độ hoạt động cho bộ điều
chỉnh điện áp khi CPU vào chế độ Stop
PWR_Regulator_ON Chế độ hoạt động bình thường
P W R _ R e g u la to r_ L o w P o w e r Chế độ tiết kiệm năng lượng
B: B: Chọn cách đưa CPU vào chế độ Stop
PWR_STOPEntry_WFI Chờ xảy ra ngắt
PWR_STOPEntry_WFE Chờ xảy ra sự kiện
PWR_EnterSTANDBYMode();
(Lệnh điều khiển CPU vào chế độ Standby )
Bảng 2.5 Các lệnh thông dụng liên quan đến chế độ tiết kiệm năng lượng 65