SlideShare a Scribd company logo
1 of 24
UNGDUNGMAYTINH.COM
MỤC LỤC
Chương 1 Giới thiệu........................................................................................................ 9
STM32F103C8T6 ....................................................................................................... 10
FreeRTOS ..................................................................................................................... 12
libopencm3.................................................................................................................. 13
Không Arduino ........................................................................................................... 13
Không IDE.................................................................................................................... 13
Framework Phát triển ............................................................................................. 14
Giả thiết........................................................................................................................ 14
Những thứ cần thiết ................................................................................................ 15
Thiết bị lập trình ST-Link V2................................................................................ 15
Breadboard................................................................................................................ 16
Dây điện DuPont (Jumper).................................................................................... 17
Tụ Bypass 0,1 μF ...................................................................................................... 18
Mạch chuyển đổi USB TTL Serial........................................................................ 18
Bộ nguồn ................................................................................................................... 19
Các linh kiện nhỏ..................................................................................................... 20
Tóm tắt ......................................................................................................................... 21
Chương 2 Thiết lập Phần mềm................................................................................... 23
Cách quy ước thư mục được sử dụng................................................................ 23
Phần mềm điều hành............................................................................................... 23
Phần mềm sách ......................................................................................................... 24
libopencm3................................................................................................................ 24
FreeRTOS.................................................................................................................. 24
~/stm32f103c8t6/rtos/Project.mk............................................................................ 25
Trình-biên-dịch chéo ARM..................................................................................... 25
Build phần mềm ........................................................................................................ 27
Công cụ ST-Link......................................................................................................... 28
Tóm tắt ......................................................................................................................... 29
Chương 3 Bật nguồn và Nhấp nháy.......................................................................... 31
Nguồn............................................................................................................................ 31
Bộ điều áp +3.3V .......................................................................................................32
Power USB/+5V.........................................................................................................33
Nguồn cấp +3.3V.......................................................................................................34
Quy tắc một-nguồn-cấp...........................................................................................35
Nối đất (Ground)........................................................................................................35
Nút Reset......................................................................................................................35
Kiểm thử........................................................................................................................36
ST-Link V2 ....................................................................................................................37
Tiện ích st-flash..........................................................................................................38
Đọc STM32.................................................................................................................38
Ghi ảnh.......................................................................................................................39
Xóa Flash ....................................................................................................................40
Tóm tắt ..........................................................................................................................40
Chương 4 GPIO................................................................................................................41
Build miniblink............................................................................................................41
Flash miniblink............................................................................................................42
Mã nguồn của miniblink.c.......................................................................................43
GPIO API.......................................................................................................................45
Cấu hình GPIO .........................................................................................................47
Các bước chuẩn bị thiết yếu ..................................................................................51
Input GPIO................................................................................................................52
Output Số (digital), Push/Pull................................................................................52
Output Số, Open-drain (cực máng hở).................................................................52
Đặc điểm GPIO............................................................................................................53
Ngưỡng điện áp đầu vào.........................................................................................55
Ngưỡng áp output ....................................................................................................55
Độ trễ Lập trình ..........................................................................................................55
Vấn đề với độ trễ lập trình......................................................................................56
Tóm tắt ..........................................................................................................................57
Chương 5 FreeRTOS......................................................................................................59
Tiện ích FreeRTOS .....................................................................................................59
UNGDUNGMAYTINH.COM
Thực hiện tác vụ....................................................................................................... 59
Hàng đợi tin nhắn.................................................................................................... 60
Semaphore và Mutex .............................................................................................. 61
Timer.......................................................................................................................... 61
Nhóm Event.............................................................................................................. 62
Chương trình blinky2............................................................................................... 62
Build và Thử nghiệm blinky2............................................................................... 65
Thực thi ..................................................................................................................... 66
FreeRTOSConfig.h..................................................................................................... 66
Quy ước đặt tên FreeRTOS.................................................................................... 68
Macro FreeRTOS ..................................................................................................... 69
Tóm tắt ......................................................................................................................... 70
Chương 6 USART........................................................................................................... 71
USART/UART Ngoại vi............................................................................................. 71
Dữ liệu không đồng bộ .......................................................................................... 71
Bộ chuyển đổi USB Serial....................................................................................... 72
Nối dây....................................................................................................................... 73
Dự án uart.................................................................................................................... 74
Dự án............................................................................................................................. 77
Dự án uart2................................................................................................................. 80
API USART................................................................................................................... 84
File include ............................................................................................................... 87
Xung (Clock)............................................................................................................. 87
Cấu hình.................................................................................................................... 87
DMA........................................................................................................................... 87
Ngắt ............................................................................................................................ 87
Input/Output/Status................................................................................................ 87
Các bước chuẩn bị..................................................................................................... 88
FreeRTOS ..................................................................................................................... 88
Tác vụ......................................................................................................................... 88
Hàng đợi.................................................................................................................... 89
Tóm tắt ..........................................................................................................................90
Chương 7 USB Serial.....................................................................................................91
Vấn đề Blue Pill USB .................................................................................................91
Giới thiệu về USB .......................................................................................................93
Ống nối (Pipe) và Điểm cuối (Endpoint) .............................................................93
Thiết bị USB Serial.....................................................................................................94
Thiết bị nối tiếp USB Linux....................................................................................95
Thiết bị USB Serial trong MacOS .........................................................................95
Thiết bị USB Serial trong Windows .....................................................................96
USB GPIO..................................................................................................................96
Mã nguồn demo..........................................................................................................97
cdcacm_set_config() .................................................................................................98
cdc_control_request()...............................................................................................99
cdcacm_data_rx_cb() ................................................................................................99
Tác vụ USB...............................................................................................................100
Nhận từ USB............................................................................................................101
Gửi đến USB............................................................................................................102
Demo USB Serial ......................................................................................................103
Tóm tắt ........................................................................................................................104
Chương 8 SPI Flash......................................................................................................107
Giới thiệu W25QXX..................................................................................................107
Bus giao tiếp ngoại vi serial.................................................................................107
Chip Select (Chọn Chip) .......................................................................................109
Nối dây và Điện áp.................................................................................................109
Mạch SPI.....................................................................................................................109
Điều khiển phần cứng /NSS ................................................................................109
Cấu hình SPM32 SPI...............................................................................................112
Tốc độ xung SPI......................................................................................................114
Chế độ Xung SPI.....................................................................................................115
Endian và Độ dài của Word..................................................................................117
SPI I/O ........................................................................................................................118
UNGDUNGMAYTINH.COM
Đọc SR1 ................................................................................................................... 118
Chờ sẵn sàng........................................................................................................... 119
Đọc ID nhà sản xuất.............................................................................................. 120
Ghi Flash ................................................................................................................. 120
Xóa flash.................................................................................................................. 122
Đọc Flash................................................................................................................. 125
Demo ........................................................................................................................... 125
Chạy bản Demo...................................................................................................... 127
ID nhà sản xuất ...................................................................................................... 130
Giảm Nguồn cấp.................................................................................................... 131
Tóm tắt ....................................................................................................................... 131
Chương 9 Code Overlays........................................................................................... 133
Thách thức Nối file ................................................................................................. 133
Phần MEMORY...................................................................................................... 134
Entry......................................................................................................................... 136
Sections.................................................................................................................... 136
PROVIDE................................................................................................................ 139
Tái định vị............................................................................................................... 139
Định nghĩa Overlays............................................................................................... 140
Code Overlays ........................................................................................................ 141
Overlay Stubs......................................................................................................... 142
Trình quản lý Overlays ........................................................................................ 143
VMA và Địa chỉ Nạp............................................................................................. 143
Biểu tượng Trình liên kết trong Code ............................................................... 145
Hàm Quản lý Overlays......................................................................................... 145
Stub Overlays......................................................................................................... 147
Thực hiện Demo ...................................................................................................... 147
Trích Overlays........................................................................................................ 148
Nạp Overlays lên W25Q32................................................................................... 149
Bản demo Overlays (tiếp tục).............................................................................. 152
Bẫy Thay đổi Code ................................................................................................ 154
Tóm tắt ........................................................................................................................154
Chương 10 Xung Thời gian Thực (RTC).................................................................155
Các dự án demo........................................................................................................155
RTC sử dụng một ngắt ...........................................................................................155
Cấu hình RTC..........................................................................................................156
Ngắt và Thiết lập ....................................................................................................157
Chương trình Ngắt Dịch vụ..................................................................................158
Thông báo Tác vụ ...................................................................................................160
Mutexes ....................................................................................................................162
Demo ............................................................................................................................162
Kết nối UART1........................................................................................................165
Chạy demo ...............................................................................................................166
rtc_alarm_isr() .........................................................................................................167
Bộ điều khiển EXTI................................................................................................168
Tóm tắt ........................................................................................................................169
UNGDUNGMAYTINH.COM
Chương 2
Thiết lập Phần mềm
Trước khi chúng ta thực hiện công việc liên quan đến dự án, bạn cần cài đặt một số
phần mềm. Có khá nhiều việc cần thực hiện. Mặc dù vậy, quá trình này vẫn diễn ra
suôn sẻ. Sau khi hoàn thành, bạn không cần phải quan tâm lại nữa.
Cách quy ước thư mục được sử dụng
Xuyên suốt cuốn sách này, tôi sẽ chỉ đến các thư mục con khác nhau của phần mềm
được cung cấp. Giả sử rằng thư mục cài đặt của bạn được đặt tên là
“~/stm32f103c8t6.” Vì vậy, khi tôi đề cập đến tên đường dẫn
“~/stm32f103c8t6/libopencm3/README.md,” tôi sẽ giả định rằng chúng ta đang bắt
đầu từ thư mục chính của bạn (~).
Phần mềm điều hành
Tôi cũng sẽ giả sử bạn có một môi trường POSIX (Linux/Unix) để thực thi (run) các
lệnh. Môi trường Linux hoặc Raspberry Pi dùng bash shell có lẽ là đương nhiên
nhất. Các môi trường khác gồm FreeBSD và MacOS cũng tốt. Từ FreeBSD, tôi giả
định rằng bạn đang sử dụng bash shell.
Nếu bạn đang dùng Windows, bạn nên cài đặt Cygwin (https://www.cygwin.com/),
hoặc sử dụng MSYS để thay thế. Sau khi cài đặt hệ thống Cygwin cơ bản, hãy chắc
rằng bạn cũng cài đặt make và git. Điều này sẽ cung cấp cho bạn một môi trường
dòng lệnh giống như Linux để từ đó build phần mềm.
Người dùng Mac cần phải cài đặt git ở mức tối thiểu. Bạn cũng cần GNU make, nhất
là khi bạn sử dụng FreeBSD (Free Berkeley Software Distribution). Đôi khi GNU
make được cài đặt là gmake trong một hệ thống BSD (Berkeley Software
Distribution – Phân phối Phần mềm Berkely). Nếu bạn đang sử dụng Mac
Homebrew (https://brew.sh/), bạn có thể cài đặt những thứ được kể dưới đây:
$ brew install make
$ brew install git
Nếu bạn là người dùng Mac Ports (https://www.macports.org/), bạn cần sử dụng
framework đó để cài đặt make và git.
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 23
Phần mềm sách
Cấu trúc thư mục để build phần mềm với libopencm3 và FreeRTOS có sẵn từ
github.com. Chọn một vị trí phù hợp từ đó để tạo thư mục con. Cuốn sách này sẽ
giả định thư mục chính:
$ cd ~
Sử dụng lệnh git để tải về và tạo thư mục con như sau:
$ git clone https://github.com/ve3wwg/stm32f103c8t6.git
Lệnh này sẽ tạo thư mục ~/stm32f103c8t6. Tuy nhiên, cứ tự nhiên đổi tên nó để dễ
gõ hơn, như ~/stm32.
libopencm3
Tiếp theo, chúng ta phải tải xuống phần mềm libopencm3 vào đúng vị trí. Đầu tiên,
chuyển sang thư mục con, và sau đó xuất lệnh git clone cho libopencm3:
$ cd ~/stm32f103f8t6
$ git clone https://github.com/libopencm3/libopencm3.git
Điều này sẽ điền vào thư mục ~/stm32f103c8t6/libopencm3 với các file và thư mục
con.
FreeRTOS
Phần mềm quan trọng tiếp theo là FreeRTOS. Có chút vấn đề ở đây, rằng bạn phải
tải nó về dưới dạng file nén (.zip), rồi giải nén ra.
1. Truy cập http://www.freertos.org/
2. Tìm “Download Source” ở bên trái.
3. Nhấp vào liên kết “2. Click to download the latest official release from
SourceForge.”
Tùy thuộc vào trình duyệt và hệ điều hành của bạn, một file zip sẽ được tự động tải
về. Trong tên tập tin, sẽ có một mã-phiên-bản (version number). Tại thời điểm tôi
viết quyển sách này, tên file tải về là FreeRTOSv10.0.1.zip. Chuyển sang thư mục
con ~/stm32f103c8t6/rtos trước khi giải nén. Trên máy Mac, thư mục tải xuống là
~/Downloads. Đổi địa chỉ thư mục chứa file tải về trong lệnh unzip theo đúng như
trong máy tính của bạn:
$ cd ~/stm32f103c8t6/rtos
$ unzip ~/Downloads/FreeRTOSv10.0.1.zip
Khi hoàn tất, sẽ có một số file và thư mục con trong
~/stm32f103c8t62/rtos/FreeRTOSv10.0.1.
TRUNG TÂM ADVANCECAD
24 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
~/stm32f103c8t6/rtos/Project.mk
Bởi vì mã-phiên-bản của FreeRTOS được gồm trong tên thư mục con, nên có thể còn
một điều chỉnh cần thực hiện. Sửa file Project.mk bằng trình chỉnh sửa (text editor)
của bạn và tìm đến dòng sau gần đầu file:
FREERTOS ?= FreeRTOSv10.0.1
Nếu bạn dùng phiên bản FreeRTOS mới hơn, như FreeRTOSv11.0.0 chẳng hạn, hãy
sửa lại để khớp với phiên bản của bạn và lưu file lại:
FREERTOS ?= FreeRTOSv11.0.0
Việc này sẽ cho phép file Project.mk làm việc chính xác khi bạn muốn tạo một dự
án RTOS mới.
Trình-biên-dịch chéo ARM
Nếu bạn chưa cài đặt trình-biên-dịch chéo ARM, hãy cài đặt nó. Nếu đang chạy
Linux hoặc Raspberry Pi, bạn chỉ cần sử dụng lệnh apt-get để cài đặt nó. Dù vậy, tôi
khuyên bạn nên tải về và cài đặt toolchain theo các bước tóm lược dưới đây, vì một
số công cụ biên dịch chéo không được tổ chức tốt và đôi khi không hoàn chỉnh.
Nếu bạn đang chạy Mac hoặc Windows (Cygwin), hãy sử dụng phương thức sau.
Phương thức này cũng được đề xuất cho Linux và Raspberry Pi nếu bạn gặp vấn đề
với các gói (chương trình) đã cài đặt:
1. Truy cập trang web https://developer.arm.com/
2. Nhấp vào liên kết “Linux/Open Source”.
3. Kéo xuống và nhấp vào “ARM GNU Embedded Toolchain.”
4. Kéo xuống và nhấp vào nút lớn để nhãn “Downloads”.
5. Kéo xuống cho đến khi bạn tìm thấy đúng nền tảng bạn cần tải về. Windows
32-bit, Linux 64-bit, Mac OS X 64-bit, v.v. Nhấp vào lựa chọn thích hợp với
nền tảng của bạn để tải về.
6. Tạo một thư mục hệ thống /opt (nếu bạn chưa có):
$ sudo -i
# mkdir /opt
7. Chuyển đến thư mục /opt (làm thư mục gốc):
# cd /opt
8. Từ đây, bạn cần giải nén trình-biên-dịch vừa tải về (ví dụ cho máy Mac). Hãy
sửa lại địa chỉ về thư mục chính của bạn:
# tar xjf ~myuserid/Downloads/gcc-arm-none-eabi-6-2017-q2-update-
mac.tar.bz2
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 25
Sử dụng tùy chọn tar là “j” nếu kết thúc file là .bz2. Nếu không, sử dụng “z” khi
kết thúc là .gz. Nếu bạn không có sẵn lệnh GNU tar cài đặt trên máy Mac, thì
bạn có thể cài đặt nó bằng macports (http://www.macports.org/) hoặc
Homebrew (https://brew.sh/).
9. Khi file tar đã được lưu, nó có thể tạo ra một tên thư mục lớn như gcc-arm-
none-eabi-6-2017-q2-update. Bây giờ chúng ta sẽ rút ngắn nó:
# mv gcc-arm-none-eabi-6-2017-q2-update gcc-arm
Cách này sẽ đổi tên thư mục /opt/gcc-arm-none-eabi-6-2017-q2-update thành
/opt/gcc-arm dễ quản lý hơn.
10. Bây giờ, thoát khỏi thư mục gốc (root) và trở về session developer của bạn.
Trong session đó, thêm thư mục bin của trình-biên-dịch vào PATH của bạn:
$ export PATH="/opt/gcc-arm/bin:$PATH"
11. Lúc này, bạn có thể kiểm tra trình-biên-dịch chéo của mình:
$ arm-none-eabi-gcc --version
arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors
6-2017-q2-update) 6.3.1 20170620 (release) [ARM/embedded-
6-branch
revision 249437]
Copyright (C) 2016 Free Software Foundation, Inc.
This is free software; see the source for copying
conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Nếu trình-biên-dịch không bắt đầu và hiện thông báo như sau:
$ arm-none-eabi-gcc –version
-bash: arm-none-eabi-gcc: command not found
thì khi đó biến PATH của bạn hoặc không được thiết lập hay xuất ra đúng cách,
hoặc các công cụ đã cài đang sử dụng một tiền-tố (prefix) khác. Thực hiện các bước
sau nếu cần (output đã được viết tắt chút đỉnh ở đây):
$ ls -l /opt/gcc-arm/bin
total 75128
-rwxr-xr-x@ 1 root wheel 1016776 21 Jun 16:11 arm-none-eabi-addr2line
-rwxr-xr-x@ 2 root wheel 1055248 21 Jun 16:11 arm-none-eabi-ar
-rwxr-xr-x@ 2 root wheel 1749280 21 Jun 16:11 arm-none-eabi-as
-rwxr-xr-x@ 2 root wheel 1206868 21 Jun 19:08 arm-none-eabi-c++
-rwxr-xr-x@ 1 root wheel 1016324 21 Jun 16:11 arm-none-eabi-c++filt
-rwxr-xr-x@ 1 root wheel 1206788 21 Jun 19:08 arm-none-eabi-cpp
-rwxr-xr-x@ 1 root wheel 42648 21 Jun 16:11 arm-none-eabi-elfedit
-rwxr-xr-x@ 2 root wheel 1206868 21 Jun 19:08 arm-none-eabi-g++
-rwxr-xr-x@ 2 root wheel 1202596 21 Jun 19:08 arm-none-eabi-gcc
TRUNG TÂM ADVANCECAD
26 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
...
-rwxr-xr-x@ 2 root wheel 1035160 21 Jun 16:11 arm-none-eabi-nm
-rwxr-xr-x@ 2 root wheel 1241716 21 Jun 16:11 arm-none-eabi-objcopy
...
Nếu bạn lấy trình-biên-dịch chéo về từ một nguồn khác với nguồn nêu trên, bạn có
thể không có tên tiền-tố. Nếu bạn thấy tên file gcc thay vì arm-none-eabi-gcc, bạn
chỉ cần dẫn ra nó là gcc thôi. Nhưng hãy cẩn thận trong trường hợp này, bởi vì trình-
biên-dịch chéo của bạn có thể bị lẫn lộn với trình-biên-dịch chính của bạn. Tiền-tố
arm-none-eabi- sẽ ngăn chặn điều này. Khi bạn sử dụng gcc đa-nền-tảng, hãy kiểm
tra xem có đúng trình-biên-dịch bạn cần đang được dùng với lệnh type hay không:
$ type gcc
arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/gcc)
Nếu bash shell của bạn đang định vị gcc từ một thư mục khác với thư mục bạn đã
cài đặt, thì PATH của bạn không được đặt chính xác.
Nếu bạn phải thay đổi tiền-tố của toolchain, thì cần chỉnh sửa file
~/stm32f103c8t6/Makefile.incl ở thư mục chính (top-level directory):
$ cd ~/stm32f103c8t6
$ nano Makefile.incl
Sửa lại dòng sau để phù hợp và lưu lại:
PREFIX?= arm-none-eabi
Trong một tình huống bình thường khi tiền-tố đa-nền-tảng đang được sử dụng, bạn
cũng có thể thực hiện xác nhận này:
$ type arm-none-eabi-gcc
arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/arm-none-eabi-gcc)
Điều này xác nhận rằng trình-biên-dịch đang được chạy từ thư mục cài đặt /opt/gcc-
arm.
Lưu ý Biến PATH cần được hiệu chỉnh cho mỗi phiên terminal mới để sử dụng
toolchain biên dịch chéo. Để thuận tiện, bạn có thể tạo một script, hiệu chỉnh file
~/.bashrc của bạn hoặc tạo lệnh bí danh shell (shell alias) để thực hiện việc này.
Build phần mềm
Bây giờ, bạn đã cài đặt phần mềm sách, libopencm3, FreeRTOS và toolchain biên
dịch chéo ARM. Với tập biến PATH (như vừa thấy), giờ bạn có thể chuyển đến thư
mục stm32f103c8t6 và gõ make (một số người dùng có thể cần sử dụng gmake):
$ cd ~/stm32f103c8t6
$ make
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 27
Điều này sẽ build ~/stm32f103c8t6/libopencm3 trước, sau đó là tất cả các thư mục
con khác.
Một phiên bản libopencm3 mới luôn có khả năng gặp vấn đề trong quá trình build.
Những vấn đề đó đều khó tiên liệu, nhưng dưới đây là một số khả năng và giải
pháp:
1. Trong libopencm3, một chỗ nào đó được gắn cờ (flag) là một lỗi của trình-
biên-dịch chéo, mà trước đây nó lại chấp nhận được. Bạn có thể:
a. Sửa hoặc khắc phục vấn đề trong nguồn libopencm3.
b. Thử một phiên bản sau (hoặc trước) của toolchain biên dịch chéo. Các
toolchains mới hơn thường sẽ tự khắc phục vấn đề. Để tham khảo,
toolchain được sử dụng cho cuốn sách này là “(GNU Tools for ARM
Embedded Processors 6-2017-q2-update) 6.3.1 20170620”.
c. Cài đặt một phiên bản libopencm3 cũ hơn. Tất cả các dự án được thử
nghiệm trong cuốn sách này đã sử dụng thư viện với git mới nhất
ngày 12 tháng 10 năm 2017.
2. Một cái gì đó trong phần mềm của cuốn sách bị lỗi. Kiểm tra kho git để biết
các bản cập nhật. Khi các vấn đề được phát hiện, các bản sửa lỗi sẽ được áp
dụng và phát hành ở đó. Đồng thời kiểm tra file README.md ở thư mục
chính.
Công cụ ST-Link
Đây là phần mềm cuối cần được cài đặt. Nếu bạn chưa có, thì giờ bạn cần cài đặt nó
bằng trình quản lý gói của hệ thống (system’s package manager). Ngay cả khi bạn
đã cài đặt rồi, nó vẫn có thể đã lỗi thời. Hãy kiểm tra nó:
$ st-flash
Tìm dòng sau trong màn hình trợ giúp:
./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] 
[--flash=<fsize>] {read|write} <path> <addr> <size>
Nếu bạn không thấy tùy chọn --flash = <fsize> được đề cập, thì bạn có thể tải xuống
phiên bản mới nhất từ github và build nó từ mã nguồn. Điều này chỉ cần thiết nếu
bạn muốn sử dụng hơn 64K bộ nhớ flash. Không có bản demo nào trong cuốn sách
này vượt quá mức đó.
Nhiều người đã báo lại rằng có nhiều bộ STM32F103C8T6 hỗ trợ 128K bộ nhớ flash,
mặc dù thiết bị báo rằng nó chỉ có 64K. Lệnh sau đây sẽ đo kiểm bộ mà tôi đang sử
dụng:
$ st-info --probe
Found 1 stlink programmers
TRUNG TÂM ADVANCECAD
28 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
serial: 493f6f06483f53564554133f
openocd: "x49x3fx6fx06x48x3fx53x56x45x54x13x3f"
flash: 65536 (pagesize: 1024)
sram: 20480
chipid: 0x0410
descr: F1 Medium-density device
Thông tin báo cáo cho biết thiết bị chỉ hỗ trợ 65536 byte (64K) bộ nhớ flash. Tuy
nhiên, tôi biết rằng tôi có thể đưa vào flash lên đến 128K và sử dụng nó (các bộ của
tôi đều hỗ trợ 128K). Có giả thuyết cho rằng cả hai họ thiết bị F103C8 và F103B8 sử
dụng cùng một khuôn silicon. Tôi sẽ trình bày cách sử dụng bộ lập trình ST-Link V2
trên thiết bị của bạn trong chương kế tiếp.
Nếu bạn chưa cài đặt các tiện ích này, hãy sử dụng apt-get, brew, yum hoặc bất kỳ
trình quản lý gói tin nào của bạn. Nếu có gói nào đó không cài đặt được, bạn có thể
tải xuống mã nguồn mới nhất từ github tại đây:
$ cd ~
$ git clone https://github.com/texane/stlink.git
$ cd ./stlink
$ make
$ cd build/Release
$ sudo make install
Nếu bạn gặp sự cố với điều này, hãy tìm hiểu các tài nguyên online sau:
• File README.md tại https://github.com/texane/stlink
• https://github.com/texane/stlink/blob/master/doc/compiling.md
• Đảm bảo rằng bạn đã cài đặt libusb.
• Một số phiên bản Linux có thể yêu cầu bạn phải thực hiện lệnh sudo ldconfig
sau khi cài đặt.
Tóm tắt
Khi đã hoàn tất việc cài đặt phần mềm, chúng ta sẽ chuyển sang tiếp cận phần cứng
và làm vài thứ với nó. Trong chương tiếp theo, chúng ta sẽ xem các lựa chọn nguồn
cấp của bạn, rồi áp dụng bộ lập trình ST-Link V2 để kiểm tra thiết bị của bạn.
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 29
TRUNG TÂM ADVANCECAD
30 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
Chương 3
Bật nguồn và Nhấp nháy
Thiết bị bạn đã mua thường là đã được lập trình sẵn để nhấp nháy khi bật lên (có lẽ
bạn đã kiểm tra rồi). Điều này giúp dễ dàng kiểm tra rằng nó là một thiết bị còn hoạt
động. Có một vài chi tiết quan trọng khác liên quan đến nguồn, nút reset và LED
cần được bàn đến trong chương này. Cuối cùng, sử dụng bộ lập trình ST-Link V2
và một cách đo kiểm thiết sẽ được đề cập đến.
Nguồn
PCB (board mạch in) STM32F103C8T6, còn được gọi là board "Blue Pill", có một số
chân nối, trong đó có vài chân nối với nguồn. Không nhất thiết phải sử dụng tất cả
các chân nối nguồn cùng một lúc. Thực tế, tốt nhất là chỉ sử dụng một bộ các chân
nối. Để làm rõ điểm này, hãy bắt đầu với việc xem xét các lựa chọn nguồn của bạn.
Hình 3-1 minh họa các chân nối quanh các cạnh của PCB, bao gồm cả nguồn.
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 31
Hình 3-1. Chân nối nguồn và GPIO với PCB STM32F103C8T6 “Blue Pill”.
Nguồn có thể được cấp vào các chân +5V, +3.3V hoặc cổng USB, với điện áp phù hợp.
Chân được đánh dấu là “5V” (không có dấu cộng) là các chân input chịu được áp 5V.
Chân được đánh dấu bằng dấu cộng là chân input nguồn.
Bốn chân ở đầu trên cùng của board (màu xanh đậm) được dùng để lập trình thiết
bị. Lưu ý rằng chân lập trình DIO cũng có khả năng là một chân GPIO PA13. Tương
tự như vậy, DCLK có khả năng trở thành một chân GPIO PA14. Xuyên suốt quyển
sách này, bạn sẽ học cách cấu hình cho chip STM32.
Ở chân lập trình, lưu ý rằng điện áp cấp vào là +3.3V. Về mặt điện, chân này tương
tự như các chân khác có nhãn “+3.3V”. Trong hình trên, chúng có màu cam nhạt.
Bộ điều áp +3.3V
Chip STM32F103C8T6 được thiết kế để hoạt động ở điện áp trong khoảng từ 2V đến
3.3V. PCB Blue Pill có một bộ điều áp +3.3V tí hon được đánh nhãn là “U1” ở mặt
dưới (xem Hình 3-2). Bộ của tôi đã sử dụng bộ điều áp kiểu SMD có mã 4A2D, thuộc
vào serie XC6204. Bộ của bạn có thể khác.
TRUNG TÂM ADVANCECAD
32 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
Hình 3-2. Bộ điều áp +3.3V ở mặt dưới của PCB.
Chân 1 của chip 4A2D (serie XC6204) được chỉ ra trong hình.
Sơ đồ nguyên lý chính thức cho board này chỉ ra rằng bộ điều áp là loại RT9193-33,
hỗ trợ 300 mA. Có thể board tôi dùng là loại nhái, dùng con chip điều áp rẻ tiền hơn.
Chip điều áp serie XC6204 của tôi có giới hạn ở 150 mA. Trừ khi bạn biết rõ thiết bị
của mình, nếu không thì an toàn nhất là hãy giả sử rằng dòng giới hạn ở mức 150
mA.
Hiệu suất sử dụng năng lượng của MCU sẽ được xem xét trong một chương sau. Ở
đây, để tham khảo, chương trình nhấp nháy nạp sẵn trong thiết bị tiêu thụ dòng
điện khoảng 30 mA (đo bằng chân cấp nguồn input +5V ở điện áp 4.97V). Con số đo
được này đã bao gồm dòng phụ nhỏ do chính bộ điều áp tiêu thụ.
Datasheet của STM32F103C8T6 ghi rằng chip tiêu thụ một dòng tối đa vào khoảng
50 mA. Số đo trong tài liệu đó thực hiện trong điều kiện xung ngoài và mọi thiết bị
ngoại vi đều kích hoạt, và hoạt động ở “chế độ làm việc” (run mode) ở xung nhịp
72 MHz. Trừ đi 50 từ mức 150 tối đa của bộ điều áp, cường độ dòng điện còn lại vào
khoảng 100 mA từ bộ điều áp +3.3V. Nắm được các giá trị giới hạn luôn có ích.
Power USB/+5V
Khi được cấp nguồn bằng cáp USB, nguồn sẽ đến bằng đầu nối Micro-USB B. Nguồn
cấp 5V này được điều chỉnh thành +3.3V mà MCU cần. Tương tự, ở phía trên bên
phải của Hình 3-1, có một chân có nhãn “+5V” (với dấu cộng), có thể được sử dụng
như một chân nguồn vào. Dòng này cũng đến cùng bộ điều áp như dòng được cấp
qua cổng USB.
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 33
Do MCU chỉ cần một dòng khá thấp, bạn cũng có thể cấp nguồn cho thiết bị từ
adapter TTL serial. Nhiều bộ adapter USB-serial có sẵn một dây +5V có thể cấp
nguồn cho MCU. Kiểm tra các thông số bộ adapter serial của bạn để đảm bảo.
Hãy cẩn thận không kết nối cáp USB và chân cấp nguồn 5V đồng thời. Làm như vậy
có thể gây hư hại máy tính của bạn qua đường cáp USB. Ví dụ, nếu nguồn +5V của
bạn có điện áp cao hơn một chút, sẽ có dòng chạy vào mạch USB của máy tính.
Nguồn cấp +3.3V
Nếu bạn có nguồn cấp +3.3V, bạn có thể để ngỏ các chân input +5V. Nối trực tiếp
nguồn cấp +3.3V của bạn với chân input +3.3V (đảm bảo rằng không cắm cáp USB).
Cách này dùng được vì bộ điều áp tự vô hiệu hóa khi không có gì cấp vào chân
input 5V.
Khi cấp nguồn cho vào chân input +3.3V, chính là bạn đang nối nguồn với đầu
VOUT của bộ điều áp như trong Hình 3-3. Trong trường hợp này, không có nguồn
5V nào chạy vào VIN của bộ điều áp. Chân CE cũng được nối với VIN, nhưng khi
VIN để hở, chân CE sẽ được nối đất qua một tụ điện. Mức áp thấp trên CE làm cho
bộ điều áp tắt các hệ thống con bên trong nó.
Hình 3-3. Sơ đồ khối của bộ điều áp 5V sang 3.3V
Tuy nhiên, có một dòng điện nhỏ đi vào bộ chiết áp của bộ điều áp. Dòng điện này
sẽ đi từ +3.3V của bạn xuống đất, thông qua các điện trở nội R1 và R2 của bộ điều
áp. Các điện trở này có trị số lớn, nên dòng qua đó là không đáng kể. Nhưng cần
lưu ý điều này khi đo dòng cho các ứng dụng nguồn-siêu-thấp dùng pin.
Thận trọng Không cấp đồng thời cả hai nguồn +5V và +3.3V. Điều này có thể
gây hư hại cho bộ điều áp hoặc máy tính của bạn khi có cáp USB cắm vào. Sử dụng
một nguồn điện mà thôi.
TRUNG TÂM ADVANCECAD
34 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
Quy tắc một-nguồn-cấp
Điều tôi đang đề cập là lời khuyên tổng quát rằng chỉ dùng một nguồn cấp mà thôi.
Tôi hết sức nhấn mạnh rằng cấp nguồn cho PCB với nhiều hơn một nguồn điện có
thể gây ra thiệt hại.
Điều này thường thấy rõ ràng với các chân input nguồn +3.3V và +5V. Tuy vậy, thứ
dễ thường bị quên nhất lại là cáp USB. Hãy cho rằng bạn có thể có nguồn điện cấp
từ bộ adapter USB-serial, từ bộ lập trình ST-Link V2, hoặc từ cáp USB. Hãy thực
hiện chậm lại khi bạn thay đổi nguồn điện, đặc biệt là khi chuyển từ chế độ lập trình
thiết bị sang cấu hình nguồn bình thường của bạn.
Một số ứng dụng nhất định có thể yêu cầu bạn sử dụng nguồn cấp bổ sung; ví dụ,
khi cấp nguồn cho động cơ hoặc rơ le. Trong những trường hợp đó, bạn sẽ phải cấp
các mạch ngoài nguồn mà chúng cần, chứ không phải cho PCB MCU. Chỉ có các dây
tín hiệu và đất là cần nối chung. Nếu vẫn chưa rõ ràng, thì cứ chấp nhận và áp dụng
quy tắc một-nguồn-cấp.
Nối đất (Ground)
Phần âm của mạch điện (công suất), được gọi là chân nối đất (ground). Nó được gắn
nhãn màu đen trong hình 3-1. Về mặt điện, tất cả các chân ground này được nối
chung lại với nhau. Các chân đó có thể được dùng hoán đổi cho nhau.
Nút Reset
PCB cũng có một nút gắn nhãn “RESET” và một chân nối ở một bên board với nhãn
“R.” Chân nối này cho phép một mạch ngoài reset MCU khi cần. Hình 3-4 minh họa
mạch nút nhấn, bao gồm cả kết nối tới MCU.
Hình 3-4. Mạch Reset STM32F103C8T6. Kết nối “R” được tìm thấy ở mép của PCB.
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 35
Kiểm thử
Có thể bạn đã kiểm thử thiết bị của mình, nhưng nếu chưa thì bây giờ bạn hãy thử
ngay. Cách an toàn nhất và dễ nhất để thực hiện là sử dụng cáp USB với đầu nối
Micro-USB B. Cắm cáp của bạn vào nguồn điện USB, không cần phải là từ máy tính.
Sau khi được cấp nguồn, thiết bị của bạn sẽ nhấp nháy. Nếu không, hãy thử nhấn
nút Reset. Hãy cũng chắc rằng dây nối boot-0 và boot-1 của bạn được nối như trong
Hình 3-1 (cả hai dây nên được đặt ở bên có nhãn “0”).
Có hai LED gắn sẵn. LED ở bên trái cho biết rằng nguồn đã được áp vào (của tôi có
màu vàng, của bạn có thể khác). LED ở bên phải được kích hoạt bởi cổng GPIO PC13
theo điều khiển chương trình (của tôi có màu đỏ như trong hình dưới).
Thận trọng Một số trường hợp được báo lại rằng ngõ nối USB của họ bị bật khỏi
PCB. Hãy lắp nhẹ nhàng đầu cáp Micro-USB B.
Nếu bạn hiện đang thiếu cáp USB phù hợp, bạn có thể thử thiết bị nếu bạn có thể
cấp nguồn +5V hoặc +3.3V cho chân nối thích hợp như đã thảo luận. Thậm chí là
một cặp pin khô mắc nối tiếp cho điện thế +3V cũng được (nhớ lại rằng MCU hoạt
động ở điện áp từ 2V đến 3.3V)
Hình 3-5 minh họa thiết bị đang được cấp nguồn từ chân nối +3.3V ở cạnh trên PCB,
nơi kết nối với bộ lập trình. Cẩn thận khi sử dụng kẹp cá sấu, đảm bảo chúng không
gây đoản mạch đến các chân khác. Dây DuPont có thể được sử dụng cho độ an toàn
cao hơn.
Hình 3-5. Board STM32F108C8T6 nhấp nháy và được cấp điện từ bộ nguồn HP 6284A
sử dụng chân hàng rào ở cạnh trên (+3.3V)
TRUNG TÂM ADVANCECAD
36 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
ST-Link V2
Mục tiếp theo cần kiểm tra trong danh sách của chúng ta ở chương này là kết nối và
chạy tiện ích st-info. Khi mua bộ lập trình, có thể bạn chỉ nhận được bốn dây DuPont
với đầu cái. Điều này không thực sự thuận tiện, nhưng vẫn dùng được nếu bạn nối
dây chính xác. Nếu bạn phải thường xuyên đổi các thiết bị sang chế độ lập trình,
bạn cần tạo một cáp riêng cho mục đích này. Sơ đồ nối chân bộ lập trình được thể
hiện trong hình 3-6. Nhiều người cho biết rằng các mẫu đang có bán khác của bộ lập
trình có các chân nối và đi dây khác.
Hình 3-6. Bộ lập trình ST-LINK V2 đấu vào bộ STM32F103C8T6.
Kiểm tra các chân nối trên bộ của bạn, vì một số bộ trình lập ST-Link không giống vậy.
Với bộ lập trình được đấu như Hình 3-6, hãy kiểm tra các dây nối boot-0 và boot-1
của bạn nằm bên cạnh nút Reset. Chúng sẽ xuất hiện như trong Hình 3-1 (với cả hai
dây gần với phía được đánh dấu “0”).
Cắm trình bộ lập trình ST-Link V2 của bạn vào cổng USB hoặc sử dụng cáp USB mở
rộng. Khi cắm xong, LED báo nguồn ngay lập tức sẽ sáng. Ngoài ra, LED PC13 cũng
sẽ nhấp nháy nếu trong thiết bị của bạn vẫn còn chương trình nhấp nháy. Hình 3-7
minh họa điều ta vừa bàn trên.
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 37
Hình 3-7. Bộ lập trình ST-Link V2 sử dụng cáp USB mở rộng, nối với STM32F103C8T6
bằng dây DuPont
Từ máy tính của bạn, hãy chạy lệnh st-info như sau:
$ st-info --probe
Found 1 stlink programmers
serial: 493f6f06483f53564554133f
openocd: "x49x3fx6fx06x48x3fx53x56x45x54x13x3f"
flash: 131072 (pagesize: 1024)
sram: 20480
chipid: 0x0410
descr: F1 Medium-density device
Lệnh st-info sẽ tìm bộ lập trình ST-Link V2 của bạn và STM32F103C8T6 gắn với nó.
Kết quả thành công sẽ giống với kết quả của tôi. Lưu ý rằng số xê-ri của CPU được
báo cáo cùng với SRAM (20K). Dung lượng bộ nhớ flash được báo ở đây là 128K,
nhưng bạn cũng có thể thấy chỉ 64K. Dù thế nào thì nó cũng có thể hỗ trợ đến 128K.
Tiện ích st-flash
Bây giờ hãy xem cách bạn có thể sử dụng tiện ích st-flash để đọc (lưu), ghi (chương
trình), hoặc xóa thiết bị STM32 của bạn.
Đọc STM32
Lưu nội dung bộ nhớ từ thiết bị của bạn vào một tập tin sẽ cho phép bạn khôi phục
lại chương trình gốc, nếu bạn cần nó sau này. Ví dụ sau đọc từ bộ nhớ flash của thiết
bị của bạn, bắt đầu từ địa chỉ 0x80000000, và lưu 0x1000 (4K) dữ liệu vào một file có
tên saved.img. Trừ khi có phát biểu khác, quy ước tiền-tố lập trình C 0x được dùng
để chỉ cho các số thập-lục-phân trong sách này:
TRUNG TÂM ADVANCECAD
38 cachdung.com - ungdungmaytinh.com
UNGDUNGMAYTINH.COM
$ st-flash read ./saved.img 0x8000000 0x1000
st-flash 1.3.1-9-gc04df7f-dirty
2017-07-29T09:54:02 INFO src/common.c: Loading device parameters....
2017-07-29T09:54:02 INFO src/common.c: Device connected is: 
F1 Medium-density device, id 0x20036410
2017-07-29T09:54:02 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB),

Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
Để kiểm tra nội dung của file hình ảnh (image) đã lưu, sử dụng tiện ích hexedit (bạn
có thể cần sử dụng trình quản lý gói để cài đặt nó vào máy tính của bạn):
$ hexedit saved.img
Để mở mục trợ giúp khi đang sử dụng tiện ích, nhấn F1. Bạn có thể dùng tổ hợp
phím Control-V để cuộn xuống một trang mỗi lần. Dùng Control-C để thoát trở về
khỏi dòng lệnh.
Kiểm tra file, bạn sẽ thấy nội dung hệ thập-lục-phân cho đến khoảng trống 0x4EC.
Từ đó trở đi, bạn có thể thấy các byte thập-lục-phân0xFF, đại diện cho vùng bộ nhớ
flash không được ghi (bị xóa). Nếu bạn không thấy gì ngoài số 0 hoặc byte 0xFF, thì
có lỗi sai. Hãy chắc rằng bạn có thêm tiền-tố 0x vào các đối số địa chỉ và kích thước
của lệnh.
Nếu bạn không thấy một loạt các byte 0xFF ở cuối file ảnh (image) đã lưu, có thể
bạn cần lưu một file ảnh có kích thước lớn hơn.
Ghi ảnh
Ghi bộ nhớ flash là ngược lại của đọc. Một ảnh bộ nhớ đã lưu có thể được “flash”
(đưa vào bộ nhớ flash) bằng cách sử dụng lệnh-con (subcommand) write với st-
flash. Lưu ý rằng chúng ta bỏ qua đối số kích thước cho lệnh này. Đối với ví dụ này,
chúng ta sẽ ghi nó trở lại cùng một địa chỉ:
$ st-flash write ./saved.img 0x8000000
st-flash 1.3.1-9-gc04df7f-dirty
2017-07-29T10:00:39 INFO src/common.c: Loading device parameters....
2017-07-29T10:00:39 INFO src/common.c: Device connected is: 
F1 Medium-density device, id 0x20036410
2017-07-29T10:00:39 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB),

Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
2017-07-29T10:00:39 INFO src/common.c: Ignoring 2868 bytes of 0xff 
at end of file
2017-07-29T10:00:39 INFO src/common.c: Attempting to write 1228 (0x4cc) 
bytes to stm32 address: 134217728 (0x8000000)
Flash page at addr: 0x08000400 erased
2017-07-29T10:00:39 INFO src/common.c: Finished erasing 2 pages of 1024 
(0x400) bytes
TRUNG TÂM ADVANCECAD
cachdung.com - ungdungmaytinh.com 39
2017-07-29T10:00:39 INFO src/common.c: Starting Flash write for 
VL/F0/F3 core id
2017-07-29T10:00:39 INFO src/flash_loader.c: Successfully loaded flash 
loader in sram
1/1 pages written
2017-07-29T10:00:39 INFO src/common.c: Starting verification of write 
complete
2017-07-29T10:00:39 INFO src/common.c: Flash written and verified! 
jolly good!
Thao tác này sẽ khôi phục file ảnh (chương trình) nhấp nháy đã lưu vào bộ nhớ flash
trong thiết bị của bạn. Nó có thể bắt đầu nhấp nháy ngay lập tức. Nếu không, nhấn
nút Reset để bắt đầu khởi động lại.
Xóa Flash
Có thể có những lúc bạn muốn thực hiện thao tác xóa bắt buộc toàn bộ thiết bị. Khi
bạn muốn tặng thiết bị của mình cho một người bạn và muốn xóa thí nghiệm cuối
cùng trong đó:
$ st-flash erase
st-flash 1.3.1-9-gc04df7f-dirty
2017-07-29T10:06:17 INFO src/common.c: Loading device parameters....
2017-07-29T10:06:17 INFO src/common.c: Device connected is: 
F1 Medium-density device, id 0x20036410
2017-07-29T10:06:17 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB),

Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes
Mass erasing
Sau khi thao tác này hoàn tất, thiết bị của bạn sẽ bị xóa hoàn toàn. Nó cũng sẽ ngừng
nhấp nháy. Để thử cho vui, giờ hãy khôi phục lại ảnh và nhấn reset.
Tóm tắt
Chương này cung cấp cho bạn thông tin quan trọng về các lựa chọn cấp nguồn. Điều
này hết sức quan trọng, vì nếu không thực hiện tốt phần này này, bạn có thể không
sử dụng được thiết bị. Bây giờ, bạn đã cắm thiết bị (với bộ lập trình) và thực kiểm
rằng nó hoạt động bằng chương trình nhấp nháy nạp sẵn. Sau đó, bạn xác nhận rằng
bộ lập trình và thiết bị để lập trình đều hoạt động bằng cách sử dụng lệnh st-link.
Cuối cùng, bạn đã học cách sử dụng tiện ích st-flash để đọc, ghi và xóa bộ nhớ flash
trên thiết bị.
TRUNG TÂM ADVANCECAD
40 cachdung.com - ungdungmaytinh.com

More Related Content

What's hot

Giao Trinh Lap Trinh Huong Doi Tuong
Giao Trinh Lap Trinh Huong Doi TuongGiao Trinh Lap Trinh Huong Doi Tuong
Giao Trinh Lap Trinh Huong Doi Tuong
trieulongnhi
 
Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316
minhpv32
 
Thiet ke lan_wan
Thiet ke lan_wanThiet ke lan_wan
Thiet ke lan_wan
Gió Lào
 

What's hot (19)

Bài giảng Assembly
Bài giảng AssemblyBài giảng Assembly
Bài giảng Assembly
 
Sách lập trình với scratch
Sách lập trình với scratchSách lập trình với scratch
Sách lập trình với scratch
 
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAYLuận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
Luận văn: Vận hành, quản lý, giám sát hệ thống BTS Viettel, HAY
 
Bai giang atbmtt
Bai giang atbmttBai giang atbmtt
Bai giang atbmtt
 
[Demo] Internet of Things with Arduino
[Demo] Internet of Things with Arduino[Demo] Internet of Things with Arduino
[Demo] Internet of Things with Arduino
 
Iot starter
Iot starterIot starter
Iot starter
 
Giao Trinh Lap Trinh Huong Doi Tuong
Giao Trinh Lap Trinh Huong Doi TuongGiao Trinh Lap Trinh Huong Doi Tuong
Giao Trinh Lap Trinh Huong Doi Tuong
 
Bài Giảng Lập Trình Logic (Chuyên Đề 1)
Bài Giảng Lập Trình Logic (Chuyên Đề 1)Bài Giảng Lập Trình Logic (Chuyên Đề 1)
Bài Giảng Lập Trình Logic (Chuyên Đề 1)
 
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
TÀI LIỆU KỸ THUẬT HỆ THỐNG GIÁM SÁT ĐIỀU KHIỂN CSHT TRẠM VIỄN THÔNG – SMU
 
Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316Sach s7 200_tap_1_1316
Sach s7 200_tap_1_1316
 
Giáo trình Lý thuyết mạch - Phạm Khánh Tùng
Giáo trình Lý thuyết mạch - Phạm Khánh Tùng Giáo trình Lý thuyết mạch - Phạm Khánh Tùng
Giáo trình Lý thuyết mạch - Phạm Khánh Tùng
 
Bài giảng: XỬ LÝ TÍN HIỆU SỐ
Bài giảng: XỬ LÝ TÍN HIỆU SỐ Bài giảng: XỬ LÝ TÍN HIỆU SỐ
Bài giảng: XỬ LÝ TÍN HIỆU SỐ
 
127918321 nghien-cuu-ma-turbo
127918321 nghien-cuu-ma-turbo127918321 nghien-cuu-ma-turbo
127918321 nghien-cuu-ma-turbo
 
Thiet ke lan_wan
Thiet ke lan_wanThiet ke lan_wan
Thiet ke lan_wan
 
Đề tài: Thiết kế trạm dẫn động cơ khí, HAY
Đề tài: Thiết kế trạm dẫn động cơ khí, HAYĐề tài: Thiết kế trạm dẫn động cơ khí, HAY
Đề tài: Thiết kế trạm dẫn động cơ khí, HAY
 
De5 gsm
De5 gsmDe5 gsm
De5 gsm
 
hdsd excel_2010
 hdsd excel_2010 hdsd excel_2010
hdsd excel_2010
 
Bat dau voi stm32 (demo)
Bat dau voi stm32 (demo)Bat dau voi stm32 (demo)
Bat dau voi stm32 (demo)
 
Laptrinhplc
LaptrinhplcLaptrinhplc
Laptrinhplc
 

Similar to [Demo] Begin STM32 vol-1

Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
bookbooming1
 
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
bookbooming1
 
Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]
bookbooming1
 
Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010
Cao Toa
 
ỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆP
ỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆPỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆP
ỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆP
Hoàng Mai
 
ứNg dụng thương mại điện tử trong doanh nghiệp
ứNg dụng thương mại điện tử trong doanh nghiệpứNg dụng thương mại điện tử trong doanh nghiệp
ứNg dụng thương mại điện tử trong doanh nghiệp
https://www.facebook.com/garmentspace
 
Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Bai giang-ktvxl-2012
Bai giang-ktvxl-2012
Hòn Đá To
 
Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1
quang
 
[123doc.vn] giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...
[123doc.vn]   giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...[123doc.vn]   giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...
[123doc.vn] giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...
Dương Ni
 
Bài giảng asp.net
Bài giảng asp.netBài giảng asp.net
Bài giảng asp.net
Dung Duong
 

Similar to [Demo] Begin STM32 vol-1 (20)

Luận văn thạc sĩ - Xử lý ảnh video theo thời gian thực trên kit STM32.doc
Luận văn thạc sĩ - Xử lý ảnh video theo thời gian thực trên kit STM32.docLuận văn thạc sĩ - Xử lý ảnh video theo thời gian thực trên kit STM32.doc
Luận văn thạc sĩ - Xử lý ảnh video theo thời gian thực trên kit STM32.doc
 
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
 
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]Giáo trình lập trình mạng   đh đà lạt[bookbooming.com]
Giáo trình lập trình mạng đh đà lạt[bookbooming.com]
 
Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]Giao trinhquantrimang[bookbooming.com]
Giao trinhquantrimang[bookbooming.com]
 
Bai giang he thong nhung 2010
Bai giang he thong nhung 2010Bai giang he thong nhung 2010
Bai giang he thong nhung 2010
 
ỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆP
ỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆPỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆP
ỨNG DỤNG THƯƠNG MẠI ĐIỆN TỬ TRONG DOANH NGHIỆP
 
ứNg dụng thương mại điện tử trong doanh nghiệp
ứNg dụng thương mại điện tử trong doanh nghiệpứNg dụng thương mại điện tử trong doanh nghiệp
ứNg dụng thương mại điện tử trong doanh nghiệp
 
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdfGIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
GIÁO-TRÌNH-PLC-S7-1200-Mô-tả_Full.pdf
 
Bai giang-ktvxl-2012
Bai giang-ktvxl-2012Bai giang-ktvxl-2012
Bai giang-ktvxl-2012
 
Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1Ceh lab book_tieng_viet_phan1
Ceh lab book_tieng_viet_phan1
 
Tìm hiểu về bộ điều khiển số TMS320F28335
Tìm hiểu về bộ điều khiển số TMS320F28335Tìm hiểu về bộ điều khiển số TMS320F28335
Tìm hiểu về bộ điều khiển số TMS320F28335
 
[123doc.vn] giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...
[123doc.vn]   giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...[123doc.vn]   giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...
[123doc.vn] giai-phap-quy-hoach-mang-vo-tuyen-umts-3g-va-ap-dung-trien-khai...
 
3.5 g va quy hoach
3.5 g va quy hoach3.5 g va quy hoach
3.5 g va quy hoach
 
TÌM HIỂU VÀ TRIỂN KHAI TRUNG TÂM GIÁM SÁT AN TOÀN MẠNG TRÊN NỀN TẢNG WAZUH.docx
TÌM HIỂU VÀ TRIỂN KHAI TRUNG TÂM GIÁM SÁT AN TOÀN MẠNG TRÊN NỀN TẢNG WAZUH.docxTÌM HIỂU VÀ TRIỂN KHAI TRUNG TÂM GIÁM SÁT AN TOÀN MẠNG TRÊN NỀN TẢNG WAZUH.docx
TÌM HIỂU VÀ TRIỂN KHAI TRUNG TÂM GIÁM SÁT AN TOÀN MẠNG TRÊN NỀN TẢNG WAZUH.docx
 
Bao cao do an
Bao cao do an Bao cao do an
Bao cao do an
 
Luận Văn Kiến Trúc Hệ Thống Của Arm Cortex.doc
Luận Văn Kiến Trúc Hệ Thống Của Arm Cortex.docLuận Văn Kiến Trúc Hệ Thống Của Arm Cortex.doc
Luận Văn Kiến Trúc Hệ Thống Của Arm Cortex.doc
 
Giao trinh
Giao trinhGiao trinh
Giao trinh
 
Bài giảng asp.net
Bài giảng asp.netBài giảng asp.net
Bài giảng asp.net
 
Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7 Thuyết minh kết cấu Chung cư cao tầng CT7
Thuyết minh kết cấu Chung cư cao tầng CT7
 
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải PhòngĐề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
Đề tài: Vận hành, quản lý, giám sát hệ thống BTS Viettel Hải Phòng
 

[Demo] Begin STM32 vol-1

  • 1. UNGDUNGMAYTINH.COM MỤC LỤC Chương 1 Giới thiệu........................................................................................................ 9 STM32F103C8T6 ....................................................................................................... 10 FreeRTOS ..................................................................................................................... 12 libopencm3.................................................................................................................. 13 Không Arduino ........................................................................................................... 13 Không IDE.................................................................................................................... 13 Framework Phát triển ............................................................................................. 14 Giả thiết........................................................................................................................ 14 Những thứ cần thiết ................................................................................................ 15 Thiết bị lập trình ST-Link V2................................................................................ 15 Breadboard................................................................................................................ 16 Dây điện DuPont (Jumper).................................................................................... 17 Tụ Bypass 0,1 μF ...................................................................................................... 18 Mạch chuyển đổi USB TTL Serial........................................................................ 18 Bộ nguồn ................................................................................................................... 19 Các linh kiện nhỏ..................................................................................................... 20 Tóm tắt ......................................................................................................................... 21 Chương 2 Thiết lập Phần mềm................................................................................... 23 Cách quy ước thư mục được sử dụng................................................................ 23 Phần mềm điều hành............................................................................................... 23 Phần mềm sách ......................................................................................................... 24 libopencm3................................................................................................................ 24 FreeRTOS.................................................................................................................. 24 ~/stm32f103c8t6/rtos/Project.mk............................................................................ 25 Trình-biên-dịch chéo ARM..................................................................................... 25 Build phần mềm ........................................................................................................ 27 Công cụ ST-Link......................................................................................................... 28 Tóm tắt ......................................................................................................................... 29 Chương 3 Bật nguồn và Nhấp nháy.......................................................................... 31 Nguồn............................................................................................................................ 31
  • 2. Bộ điều áp +3.3V .......................................................................................................32 Power USB/+5V.........................................................................................................33 Nguồn cấp +3.3V.......................................................................................................34 Quy tắc một-nguồn-cấp...........................................................................................35 Nối đất (Ground)........................................................................................................35 Nút Reset......................................................................................................................35 Kiểm thử........................................................................................................................36 ST-Link V2 ....................................................................................................................37 Tiện ích st-flash..........................................................................................................38 Đọc STM32.................................................................................................................38 Ghi ảnh.......................................................................................................................39 Xóa Flash ....................................................................................................................40 Tóm tắt ..........................................................................................................................40 Chương 4 GPIO................................................................................................................41 Build miniblink............................................................................................................41 Flash miniblink............................................................................................................42 Mã nguồn của miniblink.c.......................................................................................43 GPIO API.......................................................................................................................45 Cấu hình GPIO .........................................................................................................47 Các bước chuẩn bị thiết yếu ..................................................................................51 Input GPIO................................................................................................................52 Output Số (digital), Push/Pull................................................................................52 Output Số, Open-drain (cực máng hở).................................................................52 Đặc điểm GPIO............................................................................................................53 Ngưỡng điện áp đầu vào.........................................................................................55 Ngưỡng áp output ....................................................................................................55 Độ trễ Lập trình ..........................................................................................................55 Vấn đề với độ trễ lập trình......................................................................................56 Tóm tắt ..........................................................................................................................57 Chương 5 FreeRTOS......................................................................................................59 Tiện ích FreeRTOS .....................................................................................................59
  • 3. UNGDUNGMAYTINH.COM Thực hiện tác vụ....................................................................................................... 59 Hàng đợi tin nhắn.................................................................................................... 60 Semaphore và Mutex .............................................................................................. 61 Timer.......................................................................................................................... 61 Nhóm Event.............................................................................................................. 62 Chương trình blinky2............................................................................................... 62 Build và Thử nghiệm blinky2............................................................................... 65 Thực thi ..................................................................................................................... 66 FreeRTOSConfig.h..................................................................................................... 66 Quy ước đặt tên FreeRTOS.................................................................................... 68 Macro FreeRTOS ..................................................................................................... 69 Tóm tắt ......................................................................................................................... 70 Chương 6 USART........................................................................................................... 71 USART/UART Ngoại vi............................................................................................. 71 Dữ liệu không đồng bộ .......................................................................................... 71 Bộ chuyển đổi USB Serial....................................................................................... 72 Nối dây....................................................................................................................... 73 Dự án uart.................................................................................................................... 74 Dự án............................................................................................................................. 77 Dự án uart2................................................................................................................. 80 API USART................................................................................................................... 84 File include ............................................................................................................... 87 Xung (Clock)............................................................................................................. 87 Cấu hình.................................................................................................................... 87 DMA........................................................................................................................... 87 Ngắt ............................................................................................................................ 87 Input/Output/Status................................................................................................ 87 Các bước chuẩn bị..................................................................................................... 88 FreeRTOS ..................................................................................................................... 88 Tác vụ......................................................................................................................... 88 Hàng đợi.................................................................................................................... 89
  • 4. Tóm tắt ..........................................................................................................................90 Chương 7 USB Serial.....................................................................................................91 Vấn đề Blue Pill USB .................................................................................................91 Giới thiệu về USB .......................................................................................................93 Ống nối (Pipe) và Điểm cuối (Endpoint) .............................................................93 Thiết bị USB Serial.....................................................................................................94 Thiết bị nối tiếp USB Linux....................................................................................95 Thiết bị USB Serial trong MacOS .........................................................................95 Thiết bị USB Serial trong Windows .....................................................................96 USB GPIO..................................................................................................................96 Mã nguồn demo..........................................................................................................97 cdcacm_set_config() .................................................................................................98 cdc_control_request()...............................................................................................99 cdcacm_data_rx_cb() ................................................................................................99 Tác vụ USB...............................................................................................................100 Nhận từ USB............................................................................................................101 Gửi đến USB............................................................................................................102 Demo USB Serial ......................................................................................................103 Tóm tắt ........................................................................................................................104 Chương 8 SPI Flash......................................................................................................107 Giới thiệu W25QXX..................................................................................................107 Bus giao tiếp ngoại vi serial.................................................................................107 Chip Select (Chọn Chip) .......................................................................................109 Nối dây và Điện áp.................................................................................................109 Mạch SPI.....................................................................................................................109 Điều khiển phần cứng /NSS ................................................................................109 Cấu hình SPM32 SPI...............................................................................................112 Tốc độ xung SPI......................................................................................................114 Chế độ Xung SPI.....................................................................................................115 Endian và Độ dài của Word..................................................................................117 SPI I/O ........................................................................................................................118
  • 5. UNGDUNGMAYTINH.COM Đọc SR1 ................................................................................................................... 118 Chờ sẵn sàng........................................................................................................... 119 Đọc ID nhà sản xuất.............................................................................................. 120 Ghi Flash ................................................................................................................. 120 Xóa flash.................................................................................................................. 122 Đọc Flash................................................................................................................. 125 Demo ........................................................................................................................... 125 Chạy bản Demo...................................................................................................... 127 ID nhà sản xuất ...................................................................................................... 130 Giảm Nguồn cấp.................................................................................................... 131 Tóm tắt ....................................................................................................................... 131 Chương 9 Code Overlays........................................................................................... 133 Thách thức Nối file ................................................................................................. 133 Phần MEMORY...................................................................................................... 134 Entry......................................................................................................................... 136 Sections.................................................................................................................... 136 PROVIDE................................................................................................................ 139 Tái định vị............................................................................................................... 139 Định nghĩa Overlays............................................................................................... 140 Code Overlays ........................................................................................................ 141 Overlay Stubs......................................................................................................... 142 Trình quản lý Overlays ........................................................................................ 143 VMA và Địa chỉ Nạp............................................................................................. 143 Biểu tượng Trình liên kết trong Code ............................................................... 145 Hàm Quản lý Overlays......................................................................................... 145 Stub Overlays......................................................................................................... 147 Thực hiện Demo ...................................................................................................... 147 Trích Overlays........................................................................................................ 148 Nạp Overlays lên W25Q32................................................................................... 149 Bản demo Overlays (tiếp tục).............................................................................. 152 Bẫy Thay đổi Code ................................................................................................ 154
  • 6. Tóm tắt ........................................................................................................................154 Chương 10 Xung Thời gian Thực (RTC).................................................................155 Các dự án demo........................................................................................................155 RTC sử dụng một ngắt ...........................................................................................155 Cấu hình RTC..........................................................................................................156 Ngắt và Thiết lập ....................................................................................................157 Chương trình Ngắt Dịch vụ..................................................................................158 Thông báo Tác vụ ...................................................................................................160 Mutexes ....................................................................................................................162 Demo ............................................................................................................................162 Kết nối UART1........................................................................................................165 Chạy demo ...............................................................................................................166 rtc_alarm_isr() .........................................................................................................167 Bộ điều khiển EXTI................................................................................................168 Tóm tắt ........................................................................................................................169
  • 7. UNGDUNGMAYTINH.COM Chương 2 Thiết lập Phần mềm Trước khi chúng ta thực hiện công việc liên quan đến dự án, bạn cần cài đặt một số phần mềm. Có khá nhiều việc cần thực hiện. Mặc dù vậy, quá trình này vẫn diễn ra suôn sẻ. Sau khi hoàn thành, bạn không cần phải quan tâm lại nữa. Cách quy ước thư mục được sử dụng Xuyên suốt cuốn sách này, tôi sẽ chỉ đến các thư mục con khác nhau của phần mềm được cung cấp. Giả sử rằng thư mục cài đặt của bạn được đặt tên là “~/stm32f103c8t6.” Vì vậy, khi tôi đề cập đến tên đường dẫn “~/stm32f103c8t6/libopencm3/README.md,” tôi sẽ giả định rằng chúng ta đang bắt đầu từ thư mục chính của bạn (~). Phần mềm điều hành Tôi cũng sẽ giả sử bạn có một môi trường POSIX (Linux/Unix) để thực thi (run) các lệnh. Môi trường Linux hoặc Raspberry Pi dùng bash shell có lẽ là đương nhiên nhất. Các môi trường khác gồm FreeBSD và MacOS cũng tốt. Từ FreeBSD, tôi giả định rằng bạn đang sử dụng bash shell. Nếu bạn đang dùng Windows, bạn nên cài đặt Cygwin (https://www.cygwin.com/), hoặc sử dụng MSYS để thay thế. Sau khi cài đặt hệ thống Cygwin cơ bản, hãy chắc rằng bạn cũng cài đặt make và git. Điều này sẽ cung cấp cho bạn một môi trường dòng lệnh giống như Linux để từ đó build phần mềm. Người dùng Mac cần phải cài đặt git ở mức tối thiểu. Bạn cũng cần GNU make, nhất là khi bạn sử dụng FreeBSD (Free Berkeley Software Distribution). Đôi khi GNU make được cài đặt là gmake trong một hệ thống BSD (Berkeley Software Distribution – Phân phối Phần mềm Berkely). Nếu bạn đang sử dụng Mac Homebrew (https://brew.sh/), bạn có thể cài đặt những thứ được kể dưới đây: $ brew install make $ brew install git Nếu bạn là người dùng Mac Ports (https://www.macports.org/), bạn cần sử dụng framework đó để cài đặt make và git. TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 23
  • 8. Phần mềm sách Cấu trúc thư mục để build phần mềm với libopencm3 và FreeRTOS có sẵn từ github.com. Chọn một vị trí phù hợp từ đó để tạo thư mục con. Cuốn sách này sẽ giả định thư mục chính: $ cd ~ Sử dụng lệnh git để tải về và tạo thư mục con như sau: $ git clone https://github.com/ve3wwg/stm32f103c8t6.git Lệnh này sẽ tạo thư mục ~/stm32f103c8t6. Tuy nhiên, cứ tự nhiên đổi tên nó để dễ gõ hơn, như ~/stm32. libopencm3 Tiếp theo, chúng ta phải tải xuống phần mềm libopencm3 vào đúng vị trí. Đầu tiên, chuyển sang thư mục con, và sau đó xuất lệnh git clone cho libopencm3: $ cd ~/stm32f103f8t6 $ git clone https://github.com/libopencm3/libopencm3.git Điều này sẽ điền vào thư mục ~/stm32f103c8t6/libopencm3 với các file và thư mục con. FreeRTOS Phần mềm quan trọng tiếp theo là FreeRTOS. Có chút vấn đề ở đây, rằng bạn phải tải nó về dưới dạng file nén (.zip), rồi giải nén ra. 1. Truy cập http://www.freertos.org/ 2. Tìm “Download Source” ở bên trái. 3. Nhấp vào liên kết “2. Click to download the latest official release from SourceForge.” Tùy thuộc vào trình duyệt và hệ điều hành của bạn, một file zip sẽ được tự động tải về. Trong tên tập tin, sẽ có một mã-phiên-bản (version number). Tại thời điểm tôi viết quyển sách này, tên file tải về là FreeRTOSv10.0.1.zip. Chuyển sang thư mục con ~/stm32f103c8t6/rtos trước khi giải nén. Trên máy Mac, thư mục tải xuống là ~/Downloads. Đổi địa chỉ thư mục chứa file tải về trong lệnh unzip theo đúng như trong máy tính của bạn: $ cd ~/stm32f103c8t6/rtos $ unzip ~/Downloads/FreeRTOSv10.0.1.zip Khi hoàn tất, sẽ có một số file và thư mục con trong ~/stm32f103c8t62/rtos/FreeRTOSv10.0.1. TRUNG TÂM ADVANCECAD 24 cachdung.com - ungdungmaytinh.com
  • 9. UNGDUNGMAYTINH.COM ~/stm32f103c8t6/rtos/Project.mk Bởi vì mã-phiên-bản của FreeRTOS được gồm trong tên thư mục con, nên có thể còn một điều chỉnh cần thực hiện. Sửa file Project.mk bằng trình chỉnh sửa (text editor) của bạn và tìm đến dòng sau gần đầu file: FREERTOS ?= FreeRTOSv10.0.1 Nếu bạn dùng phiên bản FreeRTOS mới hơn, như FreeRTOSv11.0.0 chẳng hạn, hãy sửa lại để khớp với phiên bản của bạn và lưu file lại: FREERTOS ?= FreeRTOSv11.0.0 Việc này sẽ cho phép file Project.mk làm việc chính xác khi bạn muốn tạo một dự án RTOS mới. Trình-biên-dịch chéo ARM Nếu bạn chưa cài đặt trình-biên-dịch chéo ARM, hãy cài đặt nó. Nếu đang chạy Linux hoặc Raspberry Pi, bạn chỉ cần sử dụng lệnh apt-get để cài đặt nó. Dù vậy, tôi khuyên bạn nên tải về và cài đặt toolchain theo các bước tóm lược dưới đây, vì một số công cụ biên dịch chéo không được tổ chức tốt và đôi khi không hoàn chỉnh. Nếu bạn đang chạy Mac hoặc Windows (Cygwin), hãy sử dụng phương thức sau. Phương thức này cũng được đề xuất cho Linux và Raspberry Pi nếu bạn gặp vấn đề với các gói (chương trình) đã cài đặt: 1. Truy cập trang web https://developer.arm.com/ 2. Nhấp vào liên kết “Linux/Open Source”. 3. Kéo xuống và nhấp vào “ARM GNU Embedded Toolchain.” 4. Kéo xuống và nhấp vào nút lớn để nhãn “Downloads”. 5. Kéo xuống cho đến khi bạn tìm thấy đúng nền tảng bạn cần tải về. Windows 32-bit, Linux 64-bit, Mac OS X 64-bit, v.v. Nhấp vào lựa chọn thích hợp với nền tảng của bạn để tải về. 6. Tạo một thư mục hệ thống /opt (nếu bạn chưa có): $ sudo -i # mkdir /opt 7. Chuyển đến thư mục /opt (làm thư mục gốc): # cd /opt 8. Từ đây, bạn cần giải nén trình-biên-dịch vừa tải về (ví dụ cho máy Mac). Hãy sửa lại địa chỉ về thư mục chính của bạn: # tar xjf ~myuserid/Downloads/gcc-arm-none-eabi-6-2017-q2-update- mac.tar.bz2 TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 25
  • 10. Sử dụng tùy chọn tar là “j” nếu kết thúc file là .bz2. Nếu không, sử dụng “z” khi kết thúc là .gz. Nếu bạn không có sẵn lệnh GNU tar cài đặt trên máy Mac, thì bạn có thể cài đặt nó bằng macports (http://www.macports.org/) hoặc Homebrew (https://brew.sh/). 9. Khi file tar đã được lưu, nó có thể tạo ra một tên thư mục lớn như gcc-arm- none-eabi-6-2017-q2-update. Bây giờ chúng ta sẽ rút ngắn nó: # mv gcc-arm-none-eabi-6-2017-q2-update gcc-arm Cách này sẽ đổi tên thư mục /opt/gcc-arm-none-eabi-6-2017-q2-update thành /opt/gcc-arm dễ quản lý hơn. 10. Bây giờ, thoát khỏi thư mục gốc (root) và trở về session developer của bạn. Trong session đó, thêm thư mục bin của trình-biên-dịch vào PATH của bạn: $ export PATH="/opt/gcc-arm/bin:$PATH" 11. Lúc này, bạn có thể kiểm tra trình-biên-dịch chéo của mình: $ arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors 6-2017-q2-update) 6.3.1 20170620 (release) [ARM/embedded- 6-branch revision 249437] Copyright (C) 2016 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Nếu trình-biên-dịch không bắt đầu và hiện thông báo như sau: $ arm-none-eabi-gcc –version -bash: arm-none-eabi-gcc: command not found thì khi đó biến PATH của bạn hoặc không được thiết lập hay xuất ra đúng cách, hoặc các công cụ đã cài đang sử dụng một tiền-tố (prefix) khác. Thực hiện các bước sau nếu cần (output đã được viết tắt chút đỉnh ở đây): $ ls -l /opt/gcc-arm/bin total 75128 -rwxr-xr-x@ 1 root wheel 1016776 21 Jun 16:11 arm-none-eabi-addr2line -rwxr-xr-x@ 2 root wheel 1055248 21 Jun 16:11 arm-none-eabi-ar -rwxr-xr-x@ 2 root wheel 1749280 21 Jun 16:11 arm-none-eabi-as -rwxr-xr-x@ 2 root wheel 1206868 21 Jun 19:08 arm-none-eabi-c++ -rwxr-xr-x@ 1 root wheel 1016324 21 Jun 16:11 arm-none-eabi-c++filt -rwxr-xr-x@ 1 root wheel 1206788 21 Jun 19:08 arm-none-eabi-cpp -rwxr-xr-x@ 1 root wheel 42648 21 Jun 16:11 arm-none-eabi-elfedit -rwxr-xr-x@ 2 root wheel 1206868 21 Jun 19:08 arm-none-eabi-g++ -rwxr-xr-x@ 2 root wheel 1202596 21 Jun 19:08 arm-none-eabi-gcc TRUNG TÂM ADVANCECAD 26 cachdung.com - ungdungmaytinh.com
  • 11. UNGDUNGMAYTINH.COM ... -rwxr-xr-x@ 2 root wheel 1035160 21 Jun 16:11 arm-none-eabi-nm -rwxr-xr-x@ 2 root wheel 1241716 21 Jun 16:11 arm-none-eabi-objcopy ... Nếu bạn lấy trình-biên-dịch chéo về từ một nguồn khác với nguồn nêu trên, bạn có thể không có tên tiền-tố. Nếu bạn thấy tên file gcc thay vì arm-none-eabi-gcc, bạn chỉ cần dẫn ra nó là gcc thôi. Nhưng hãy cẩn thận trong trường hợp này, bởi vì trình- biên-dịch chéo của bạn có thể bị lẫn lộn với trình-biên-dịch chính của bạn. Tiền-tố arm-none-eabi- sẽ ngăn chặn điều này. Khi bạn sử dụng gcc đa-nền-tảng, hãy kiểm tra xem có đúng trình-biên-dịch bạn cần đang được dùng với lệnh type hay không: $ type gcc arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/gcc) Nếu bash shell của bạn đang định vị gcc từ một thư mục khác với thư mục bạn đã cài đặt, thì PATH của bạn không được đặt chính xác. Nếu bạn phải thay đổi tiền-tố của toolchain, thì cần chỉnh sửa file ~/stm32f103c8t6/Makefile.incl ở thư mục chính (top-level directory): $ cd ~/stm32f103c8t6 $ nano Makefile.incl Sửa lại dòng sau để phù hợp và lưu lại: PREFIX?= arm-none-eabi Trong một tình huống bình thường khi tiền-tố đa-nền-tảng đang được sử dụng, bạn cũng có thể thực hiện xác nhận này: $ type arm-none-eabi-gcc arm-none-eabi-gcc is hashed (/opt/gcc-arm/bin/arm-none-eabi-gcc) Điều này xác nhận rằng trình-biên-dịch đang được chạy từ thư mục cài đặt /opt/gcc- arm. Lưu ý Biến PATH cần được hiệu chỉnh cho mỗi phiên terminal mới để sử dụng toolchain biên dịch chéo. Để thuận tiện, bạn có thể tạo một script, hiệu chỉnh file ~/.bashrc của bạn hoặc tạo lệnh bí danh shell (shell alias) để thực hiện việc này. Build phần mềm Bây giờ, bạn đã cài đặt phần mềm sách, libopencm3, FreeRTOS và toolchain biên dịch chéo ARM. Với tập biến PATH (như vừa thấy), giờ bạn có thể chuyển đến thư mục stm32f103c8t6 và gõ make (một số người dùng có thể cần sử dụng gmake): $ cd ~/stm32f103c8t6 $ make TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 27
  • 12. Điều này sẽ build ~/stm32f103c8t6/libopencm3 trước, sau đó là tất cả các thư mục con khác. Một phiên bản libopencm3 mới luôn có khả năng gặp vấn đề trong quá trình build. Những vấn đề đó đều khó tiên liệu, nhưng dưới đây là một số khả năng và giải pháp: 1. Trong libopencm3, một chỗ nào đó được gắn cờ (flag) là một lỗi của trình- biên-dịch chéo, mà trước đây nó lại chấp nhận được. Bạn có thể: a. Sửa hoặc khắc phục vấn đề trong nguồn libopencm3. b. Thử một phiên bản sau (hoặc trước) của toolchain biên dịch chéo. Các toolchains mới hơn thường sẽ tự khắc phục vấn đề. Để tham khảo, toolchain được sử dụng cho cuốn sách này là “(GNU Tools for ARM Embedded Processors 6-2017-q2-update) 6.3.1 20170620”. c. Cài đặt một phiên bản libopencm3 cũ hơn. Tất cả các dự án được thử nghiệm trong cuốn sách này đã sử dụng thư viện với git mới nhất ngày 12 tháng 10 năm 2017. 2. Một cái gì đó trong phần mềm của cuốn sách bị lỗi. Kiểm tra kho git để biết các bản cập nhật. Khi các vấn đề được phát hiện, các bản sửa lỗi sẽ được áp dụng và phát hành ở đó. Đồng thời kiểm tra file README.md ở thư mục chính. Công cụ ST-Link Đây là phần mềm cuối cần được cài đặt. Nếu bạn chưa có, thì giờ bạn cần cài đặt nó bằng trình quản lý gói của hệ thống (system’s package manager). Ngay cả khi bạn đã cài đặt rồi, nó vẫn có thể đã lỗi thời. Hãy kiểm tra nó: $ st-flash Tìm dòng sau trong màn hình trợ giúp: ./st-flash [--debug] [--reset] [--serial <serial>] [--format <format>] [--flash=<fsize>] {read|write} <path> <addr> <size> Nếu bạn không thấy tùy chọn --flash = <fsize> được đề cập, thì bạn có thể tải xuống phiên bản mới nhất từ github và build nó từ mã nguồn. Điều này chỉ cần thiết nếu bạn muốn sử dụng hơn 64K bộ nhớ flash. Không có bản demo nào trong cuốn sách này vượt quá mức đó. Nhiều người đã báo lại rằng có nhiều bộ STM32F103C8T6 hỗ trợ 128K bộ nhớ flash, mặc dù thiết bị báo rằng nó chỉ có 64K. Lệnh sau đây sẽ đo kiểm bộ mà tôi đang sử dụng: $ st-info --probe Found 1 stlink programmers TRUNG TÂM ADVANCECAD 28 cachdung.com - ungdungmaytinh.com
  • 13. UNGDUNGMAYTINH.COM serial: 493f6f06483f53564554133f openocd: "x49x3fx6fx06x48x3fx53x56x45x54x13x3f" flash: 65536 (pagesize: 1024) sram: 20480 chipid: 0x0410 descr: F1 Medium-density device Thông tin báo cáo cho biết thiết bị chỉ hỗ trợ 65536 byte (64K) bộ nhớ flash. Tuy nhiên, tôi biết rằng tôi có thể đưa vào flash lên đến 128K và sử dụng nó (các bộ của tôi đều hỗ trợ 128K). Có giả thuyết cho rằng cả hai họ thiết bị F103C8 và F103B8 sử dụng cùng một khuôn silicon. Tôi sẽ trình bày cách sử dụng bộ lập trình ST-Link V2 trên thiết bị của bạn trong chương kế tiếp. Nếu bạn chưa cài đặt các tiện ích này, hãy sử dụng apt-get, brew, yum hoặc bất kỳ trình quản lý gói tin nào của bạn. Nếu có gói nào đó không cài đặt được, bạn có thể tải xuống mã nguồn mới nhất từ github tại đây: $ cd ~ $ git clone https://github.com/texane/stlink.git $ cd ./stlink $ make $ cd build/Release $ sudo make install Nếu bạn gặp sự cố với điều này, hãy tìm hiểu các tài nguyên online sau: • File README.md tại https://github.com/texane/stlink • https://github.com/texane/stlink/blob/master/doc/compiling.md • Đảm bảo rằng bạn đã cài đặt libusb. • Một số phiên bản Linux có thể yêu cầu bạn phải thực hiện lệnh sudo ldconfig sau khi cài đặt. Tóm tắt Khi đã hoàn tất việc cài đặt phần mềm, chúng ta sẽ chuyển sang tiếp cận phần cứng và làm vài thứ với nó. Trong chương tiếp theo, chúng ta sẽ xem các lựa chọn nguồn cấp của bạn, rồi áp dụng bộ lập trình ST-Link V2 để kiểm tra thiết bị của bạn. TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 29
  • 14. TRUNG TÂM ADVANCECAD 30 cachdung.com - ungdungmaytinh.com
  • 15. UNGDUNGMAYTINH.COM Chương 3 Bật nguồn và Nhấp nháy Thiết bị bạn đã mua thường là đã được lập trình sẵn để nhấp nháy khi bật lên (có lẽ bạn đã kiểm tra rồi). Điều này giúp dễ dàng kiểm tra rằng nó là một thiết bị còn hoạt động. Có một vài chi tiết quan trọng khác liên quan đến nguồn, nút reset và LED cần được bàn đến trong chương này. Cuối cùng, sử dụng bộ lập trình ST-Link V2 và một cách đo kiểm thiết sẽ được đề cập đến. Nguồn PCB (board mạch in) STM32F103C8T6, còn được gọi là board "Blue Pill", có một số chân nối, trong đó có vài chân nối với nguồn. Không nhất thiết phải sử dụng tất cả các chân nối nguồn cùng một lúc. Thực tế, tốt nhất là chỉ sử dụng một bộ các chân nối. Để làm rõ điểm này, hãy bắt đầu với việc xem xét các lựa chọn nguồn của bạn. Hình 3-1 minh họa các chân nối quanh các cạnh của PCB, bao gồm cả nguồn. TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 31
  • 16. Hình 3-1. Chân nối nguồn và GPIO với PCB STM32F103C8T6 “Blue Pill”. Nguồn có thể được cấp vào các chân +5V, +3.3V hoặc cổng USB, với điện áp phù hợp. Chân được đánh dấu là “5V” (không có dấu cộng) là các chân input chịu được áp 5V. Chân được đánh dấu bằng dấu cộng là chân input nguồn. Bốn chân ở đầu trên cùng của board (màu xanh đậm) được dùng để lập trình thiết bị. Lưu ý rằng chân lập trình DIO cũng có khả năng là một chân GPIO PA13. Tương tự như vậy, DCLK có khả năng trở thành một chân GPIO PA14. Xuyên suốt quyển sách này, bạn sẽ học cách cấu hình cho chip STM32. Ở chân lập trình, lưu ý rằng điện áp cấp vào là +3.3V. Về mặt điện, chân này tương tự như các chân khác có nhãn “+3.3V”. Trong hình trên, chúng có màu cam nhạt. Bộ điều áp +3.3V Chip STM32F103C8T6 được thiết kế để hoạt động ở điện áp trong khoảng từ 2V đến 3.3V. PCB Blue Pill có một bộ điều áp +3.3V tí hon được đánh nhãn là “U1” ở mặt dưới (xem Hình 3-2). Bộ của tôi đã sử dụng bộ điều áp kiểu SMD có mã 4A2D, thuộc vào serie XC6204. Bộ của bạn có thể khác. TRUNG TÂM ADVANCECAD 32 cachdung.com - ungdungmaytinh.com
  • 17. UNGDUNGMAYTINH.COM Hình 3-2. Bộ điều áp +3.3V ở mặt dưới của PCB. Chân 1 của chip 4A2D (serie XC6204) được chỉ ra trong hình. Sơ đồ nguyên lý chính thức cho board này chỉ ra rằng bộ điều áp là loại RT9193-33, hỗ trợ 300 mA. Có thể board tôi dùng là loại nhái, dùng con chip điều áp rẻ tiền hơn. Chip điều áp serie XC6204 của tôi có giới hạn ở 150 mA. Trừ khi bạn biết rõ thiết bị của mình, nếu không thì an toàn nhất là hãy giả sử rằng dòng giới hạn ở mức 150 mA. Hiệu suất sử dụng năng lượng của MCU sẽ được xem xét trong một chương sau. Ở đây, để tham khảo, chương trình nhấp nháy nạp sẵn trong thiết bị tiêu thụ dòng điện khoảng 30 mA (đo bằng chân cấp nguồn input +5V ở điện áp 4.97V). Con số đo được này đã bao gồm dòng phụ nhỏ do chính bộ điều áp tiêu thụ. Datasheet của STM32F103C8T6 ghi rằng chip tiêu thụ một dòng tối đa vào khoảng 50 mA. Số đo trong tài liệu đó thực hiện trong điều kiện xung ngoài và mọi thiết bị ngoại vi đều kích hoạt, và hoạt động ở “chế độ làm việc” (run mode) ở xung nhịp 72 MHz. Trừ đi 50 từ mức 150 tối đa của bộ điều áp, cường độ dòng điện còn lại vào khoảng 100 mA từ bộ điều áp +3.3V. Nắm được các giá trị giới hạn luôn có ích. Power USB/+5V Khi được cấp nguồn bằng cáp USB, nguồn sẽ đến bằng đầu nối Micro-USB B. Nguồn cấp 5V này được điều chỉnh thành +3.3V mà MCU cần. Tương tự, ở phía trên bên phải của Hình 3-1, có một chân có nhãn “+5V” (với dấu cộng), có thể được sử dụng như một chân nguồn vào. Dòng này cũng đến cùng bộ điều áp như dòng được cấp qua cổng USB. TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 33
  • 18. Do MCU chỉ cần một dòng khá thấp, bạn cũng có thể cấp nguồn cho thiết bị từ adapter TTL serial. Nhiều bộ adapter USB-serial có sẵn một dây +5V có thể cấp nguồn cho MCU. Kiểm tra các thông số bộ adapter serial của bạn để đảm bảo. Hãy cẩn thận không kết nối cáp USB và chân cấp nguồn 5V đồng thời. Làm như vậy có thể gây hư hại máy tính của bạn qua đường cáp USB. Ví dụ, nếu nguồn +5V của bạn có điện áp cao hơn một chút, sẽ có dòng chạy vào mạch USB của máy tính. Nguồn cấp +3.3V Nếu bạn có nguồn cấp +3.3V, bạn có thể để ngỏ các chân input +5V. Nối trực tiếp nguồn cấp +3.3V của bạn với chân input +3.3V (đảm bảo rằng không cắm cáp USB). Cách này dùng được vì bộ điều áp tự vô hiệu hóa khi không có gì cấp vào chân input 5V. Khi cấp nguồn cho vào chân input +3.3V, chính là bạn đang nối nguồn với đầu VOUT của bộ điều áp như trong Hình 3-3. Trong trường hợp này, không có nguồn 5V nào chạy vào VIN của bộ điều áp. Chân CE cũng được nối với VIN, nhưng khi VIN để hở, chân CE sẽ được nối đất qua một tụ điện. Mức áp thấp trên CE làm cho bộ điều áp tắt các hệ thống con bên trong nó. Hình 3-3. Sơ đồ khối của bộ điều áp 5V sang 3.3V Tuy nhiên, có một dòng điện nhỏ đi vào bộ chiết áp của bộ điều áp. Dòng điện này sẽ đi từ +3.3V của bạn xuống đất, thông qua các điện trở nội R1 và R2 của bộ điều áp. Các điện trở này có trị số lớn, nên dòng qua đó là không đáng kể. Nhưng cần lưu ý điều này khi đo dòng cho các ứng dụng nguồn-siêu-thấp dùng pin. Thận trọng Không cấp đồng thời cả hai nguồn +5V và +3.3V. Điều này có thể gây hư hại cho bộ điều áp hoặc máy tính của bạn khi có cáp USB cắm vào. Sử dụng một nguồn điện mà thôi. TRUNG TÂM ADVANCECAD 34 cachdung.com - ungdungmaytinh.com
  • 19. UNGDUNGMAYTINH.COM Quy tắc một-nguồn-cấp Điều tôi đang đề cập là lời khuyên tổng quát rằng chỉ dùng một nguồn cấp mà thôi. Tôi hết sức nhấn mạnh rằng cấp nguồn cho PCB với nhiều hơn một nguồn điện có thể gây ra thiệt hại. Điều này thường thấy rõ ràng với các chân input nguồn +3.3V và +5V. Tuy vậy, thứ dễ thường bị quên nhất lại là cáp USB. Hãy cho rằng bạn có thể có nguồn điện cấp từ bộ adapter USB-serial, từ bộ lập trình ST-Link V2, hoặc từ cáp USB. Hãy thực hiện chậm lại khi bạn thay đổi nguồn điện, đặc biệt là khi chuyển từ chế độ lập trình thiết bị sang cấu hình nguồn bình thường của bạn. Một số ứng dụng nhất định có thể yêu cầu bạn sử dụng nguồn cấp bổ sung; ví dụ, khi cấp nguồn cho động cơ hoặc rơ le. Trong những trường hợp đó, bạn sẽ phải cấp các mạch ngoài nguồn mà chúng cần, chứ không phải cho PCB MCU. Chỉ có các dây tín hiệu và đất là cần nối chung. Nếu vẫn chưa rõ ràng, thì cứ chấp nhận và áp dụng quy tắc một-nguồn-cấp. Nối đất (Ground) Phần âm của mạch điện (công suất), được gọi là chân nối đất (ground). Nó được gắn nhãn màu đen trong hình 3-1. Về mặt điện, tất cả các chân ground này được nối chung lại với nhau. Các chân đó có thể được dùng hoán đổi cho nhau. Nút Reset PCB cũng có một nút gắn nhãn “RESET” và một chân nối ở một bên board với nhãn “R.” Chân nối này cho phép một mạch ngoài reset MCU khi cần. Hình 3-4 minh họa mạch nút nhấn, bao gồm cả kết nối tới MCU. Hình 3-4. Mạch Reset STM32F103C8T6. Kết nối “R” được tìm thấy ở mép của PCB. TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 35
  • 20. Kiểm thử Có thể bạn đã kiểm thử thiết bị của mình, nhưng nếu chưa thì bây giờ bạn hãy thử ngay. Cách an toàn nhất và dễ nhất để thực hiện là sử dụng cáp USB với đầu nối Micro-USB B. Cắm cáp của bạn vào nguồn điện USB, không cần phải là từ máy tính. Sau khi được cấp nguồn, thiết bị của bạn sẽ nhấp nháy. Nếu không, hãy thử nhấn nút Reset. Hãy cũng chắc rằng dây nối boot-0 và boot-1 của bạn được nối như trong Hình 3-1 (cả hai dây nên được đặt ở bên có nhãn “0”). Có hai LED gắn sẵn. LED ở bên trái cho biết rằng nguồn đã được áp vào (của tôi có màu vàng, của bạn có thể khác). LED ở bên phải được kích hoạt bởi cổng GPIO PC13 theo điều khiển chương trình (của tôi có màu đỏ như trong hình dưới). Thận trọng Một số trường hợp được báo lại rằng ngõ nối USB của họ bị bật khỏi PCB. Hãy lắp nhẹ nhàng đầu cáp Micro-USB B. Nếu bạn hiện đang thiếu cáp USB phù hợp, bạn có thể thử thiết bị nếu bạn có thể cấp nguồn +5V hoặc +3.3V cho chân nối thích hợp như đã thảo luận. Thậm chí là một cặp pin khô mắc nối tiếp cho điện thế +3V cũng được (nhớ lại rằng MCU hoạt động ở điện áp từ 2V đến 3.3V) Hình 3-5 minh họa thiết bị đang được cấp nguồn từ chân nối +3.3V ở cạnh trên PCB, nơi kết nối với bộ lập trình. Cẩn thận khi sử dụng kẹp cá sấu, đảm bảo chúng không gây đoản mạch đến các chân khác. Dây DuPont có thể được sử dụng cho độ an toàn cao hơn. Hình 3-5. Board STM32F108C8T6 nhấp nháy và được cấp điện từ bộ nguồn HP 6284A sử dụng chân hàng rào ở cạnh trên (+3.3V) TRUNG TÂM ADVANCECAD 36 cachdung.com - ungdungmaytinh.com
  • 21. UNGDUNGMAYTINH.COM ST-Link V2 Mục tiếp theo cần kiểm tra trong danh sách của chúng ta ở chương này là kết nối và chạy tiện ích st-info. Khi mua bộ lập trình, có thể bạn chỉ nhận được bốn dây DuPont với đầu cái. Điều này không thực sự thuận tiện, nhưng vẫn dùng được nếu bạn nối dây chính xác. Nếu bạn phải thường xuyên đổi các thiết bị sang chế độ lập trình, bạn cần tạo một cáp riêng cho mục đích này. Sơ đồ nối chân bộ lập trình được thể hiện trong hình 3-6. Nhiều người cho biết rằng các mẫu đang có bán khác của bộ lập trình có các chân nối và đi dây khác. Hình 3-6. Bộ lập trình ST-LINK V2 đấu vào bộ STM32F103C8T6. Kiểm tra các chân nối trên bộ của bạn, vì một số bộ trình lập ST-Link không giống vậy. Với bộ lập trình được đấu như Hình 3-6, hãy kiểm tra các dây nối boot-0 và boot-1 của bạn nằm bên cạnh nút Reset. Chúng sẽ xuất hiện như trong Hình 3-1 (với cả hai dây gần với phía được đánh dấu “0”). Cắm trình bộ lập trình ST-Link V2 của bạn vào cổng USB hoặc sử dụng cáp USB mở rộng. Khi cắm xong, LED báo nguồn ngay lập tức sẽ sáng. Ngoài ra, LED PC13 cũng sẽ nhấp nháy nếu trong thiết bị của bạn vẫn còn chương trình nhấp nháy. Hình 3-7 minh họa điều ta vừa bàn trên. TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 37
  • 22. Hình 3-7. Bộ lập trình ST-Link V2 sử dụng cáp USB mở rộng, nối với STM32F103C8T6 bằng dây DuPont Từ máy tính của bạn, hãy chạy lệnh st-info như sau: $ st-info --probe Found 1 stlink programmers serial: 493f6f06483f53564554133f openocd: "x49x3fx6fx06x48x3fx53x56x45x54x13x3f" flash: 131072 (pagesize: 1024) sram: 20480 chipid: 0x0410 descr: F1 Medium-density device Lệnh st-info sẽ tìm bộ lập trình ST-Link V2 của bạn và STM32F103C8T6 gắn với nó. Kết quả thành công sẽ giống với kết quả của tôi. Lưu ý rằng số xê-ri của CPU được báo cáo cùng với SRAM (20K). Dung lượng bộ nhớ flash được báo ở đây là 128K, nhưng bạn cũng có thể thấy chỉ 64K. Dù thế nào thì nó cũng có thể hỗ trợ đến 128K. Tiện ích st-flash Bây giờ hãy xem cách bạn có thể sử dụng tiện ích st-flash để đọc (lưu), ghi (chương trình), hoặc xóa thiết bị STM32 của bạn. Đọc STM32 Lưu nội dung bộ nhớ từ thiết bị của bạn vào một tập tin sẽ cho phép bạn khôi phục lại chương trình gốc, nếu bạn cần nó sau này. Ví dụ sau đọc từ bộ nhớ flash của thiết bị của bạn, bắt đầu từ địa chỉ 0x80000000, và lưu 0x1000 (4K) dữ liệu vào một file có tên saved.img. Trừ khi có phát biểu khác, quy ước tiền-tố lập trình C 0x được dùng để chỉ cho các số thập-lục-phân trong sách này: TRUNG TÂM ADVANCECAD 38 cachdung.com - ungdungmaytinh.com
  • 23. UNGDUNGMAYTINH.COM $ st-flash read ./saved.img 0x8000000 0x1000 st-flash 1.3.1-9-gc04df7f-dirty 2017-07-29T09:54:02 INFO src/common.c: Loading device parameters.... 2017-07-29T09:54:02 INFO src/common.c: Device connected is: F1 Medium-density device, id 0x20036410 2017-07-29T09:54:02 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes Để kiểm tra nội dung của file hình ảnh (image) đã lưu, sử dụng tiện ích hexedit (bạn có thể cần sử dụng trình quản lý gói để cài đặt nó vào máy tính của bạn): $ hexedit saved.img Để mở mục trợ giúp khi đang sử dụng tiện ích, nhấn F1. Bạn có thể dùng tổ hợp phím Control-V để cuộn xuống một trang mỗi lần. Dùng Control-C để thoát trở về khỏi dòng lệnh. Kiểm tra file, bạn sẽ thấy nội dung hệ thập-lục-phân cho đến khoảng trống 0x4EC. Từ đó trở đi, bạn có thể thấy các byte thập-lục-phân0xFF, đại diện cho vùng bộ nhớ flash không được ghi (bị xóa). Nếu bạn không thấy gì ngoài số 0 hoặc byte 0xFF, thì có lỗi sai. Hãy chắc rằng bạn có thêm tiền-tố 0x vào các đối số địa chỉ và kích thước của lệnh. Nếu bạn không thấy một loạt các byte 0xFF ở cuối file ảnh (image) đã lưu, có thể bạn cần lưu một file ảnh có kích thước lớn hơn. Ghi ảnh Ghi bộ nhớ flash là ngược lại của đọc. Một ảnh bộ nhớ đã lưu có thể được “flash” (đưa vào bộ nhớ flash) bằng cách sử dụng lệnh-con (subcommand) write với st- flash. Lưu ý rằng chúng ta bỏ qua đối số kích thước cho lệnh này. Đối với ví dụ này, chúng ta sẽ ghi nó trở lại cùng một địa chỉ: $ st-flash write ./saved.img 0x8000000 st-flash 1.3.1-9-gc04df7f-dirty 2017-07-29T10:00:39 INFO src/common.c: Loading device parameters.... 2017-07-29T10:00:39 INFO src/common.c: Device connected is: F1 Medium-density device, id 0x20036410 2017-07-29T10:00:39 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes 2017-07-29T10:00:39 INFO src/common.c: Ignoring 2868 bytes of 0xff at end of file 2017-07-29T10:00:39 INFO src/common.c: Attempting to write 1228 (0x4cc) bytes to stm32 address: 134217728 (0x8000000) Flash page at addr: 0x08000400 erased 2017-07-29T10:00:39 INFO src/common.c: Finished erasing 2 pages of 1024 (0x400) bytes TRUNG TÂM ADVANCECAD cachdung.com - ungdungmaytinh.com 39
  • 24. 2017-07-29T10:00:39 INFO src/common.c: Starting Flash write for VL/F0/F3 core id 2017-07-29T10:00:39 INFO src/flash_loader.c: Successfully loaded flash loader in sram 1/1 pages written 2017-07-29T10:00:39 INFO src/common.c: Starting verification of write complete 2017-07-29T10:00:39 INFO src/common.c: Flash written and verified! jolly good! Thao tác này sẽ khôi phục file ảnh (chương trình) nhấp nháy đã lưu vào bộ nhớ flash trong thiết bị của bạn. Nó có thể bắt đầu nhấp nháy ngay lập tức. Nếu không, nhấn nút Reset để bắt đầu khởi động lại. Xóa Flash Có thể có những lúc bạn muốn thực hiện thao tác xóa bắt buộc toàn bộ thiết bị. Khi bạn muốn tặng thiết bị của mình cho một người bạn và muốn xóa thí nghiệm cuối cùng trong đó: $ st-flash erase st-flash 1.3.1-9-gc04df7f-dirty 2017-07-29T10:06:17 INFO src/common.c: Loading device parameters.... 2017-07-29T10:06:17 INFO src/common.c: Device connected is: F1 Medium-density device, id 0x20036410 2017-07-29T10:06:17 INFO src/common.c: SRAM size: 0x5000 bytes (20 KiB), Flash: 0x20000 bytes (128 KiB) in pages of 1024 bytes Mass erasing Sau khi thao tác này hoàn tất, thiết bị của bạn sẽ bị xóa hoàn toàn. Nó cũng sẽ ngừng nhấp nháy. Để thử cho vui, giờ hãy khôi phục lại ảnh và nhấn reset. Tóm tắt Chương này cung cấp cho bạn thông tin quan trọng về các lựa chọn cấp nguồn. Điều này hết sức quan trọng, vì nếu không thực hiện tốt phần này này, bạn có thể không sử dụng được thiết bị. Bây giờ, bạn đã cắm thiết bị (với bộ lập trình) và thực kiểm rằng nó hoạt động bằng chương trình nhấp nháy nạp sẵn. Sau đó, bạn xác nhận rằng bộ lập trình và thiết bị để lập trình đều hoạt động bằng cách sử dụng lệnh st-link. Cuối cùng, bạn đã học cách sử dụng tiện ích st-flash để đọc, ghi và xóa bộ nhớ flash trên thiết bị. TRUNG TÂM ADVANCECAD 40 cachdung.com - ungdungmaytinh.com