You are on page 1of 30

Mục lục

Chương 1: Giới thiệu 1


STM32F103C8T6 2
FreeRTOS 5
libopencm3 5
Không có Arduino 6
Không có IDE 6
Mô hình phát triển 7
Giả thiết 7
Những thứ cần thiết 8
Thiết bị lập trình ST-Link V2 8
Breadboard 9
Dây điện (DuPont) 10
Tụ Bypass 0.1uF 11
Bộ chuyển tiếp USB TTL 12
Bộ nguồn 14
Linh kiện nhỏ 15
Tóm tắt 16
Chương 2: Cài đặt phần mềm 17
Quy ước thư mục được sử dụng 17
Phần mềm điều hành 17
Phần mềm sách 18
libopencm3 18
FreeRTOS 19
~ / stm32f103c8t6 / rtos / Projectmk 19
Trình biên dịch ARM 20
Xây dựng phần mềm 23
Công cụ ST-Link 24
Tóm tắt 25
Chương 3: Power Up và Blink 27
Nguồn 27
Điều chình +3.3V 29
Nguồn USB /+5V 30
Cung cấp +3.3V 30
Quy tắc nguồn điện 31
Ground 32
Reset 32
Showtime 32 ST-Link V2 34
Tiện ích st-flash 36
Đọc STM32 36
Viết ảnh 37
Xóa Flash 38
Tóm tắt 38
Thư mục 38
Chương 4: GPIO 39
Xây dựng miniblink 39
Flashing miniblink 40
Mã nguồn miniblinkc 41
GPIO API 44
Cấu hình GPIO 46
Một dãy ống 51
Đầu vào GPIO 51
Đầu ra kỹ thuật số, Đẩy / Kéo 52
Đầu ra kỹ thuật số, mở cống 53
Đặc điểm GPIO 53
Ngưỡng điện áp đầu vào 55
Ngưỡng điện áp đầu ra 55
Lập trình delay 56
Vấn đề trong lập trình delay 57
Tóm tắt 58
Chương 5: FreeRTOS 59
Cơ sở FreeRTOS 59
Tasking 60
Hàng đợi tin nhắn 60
Semaphores và Mutexes 61
Timers 61
Nhóm sự kiện 62
Chương trình blinky2 62
Xây dựng và kiểm tra blinky2 66
Thi công 66
FreeRTOSConfigh 67
Cách đặt tên FreeRTOS 69
FreeRTOS Macro 70
Tóm tắt 71
Chương 6: USART 73
USART / UART Ngoại vi 73
Dữ liệu không đồng bộ 74
Bộ điều hợp nối tiếp USB 74
Hookup 76
Dự án uart 77
Project 81
Dự án uart2 85
USART API 90
Chứa các tệp 92
Xung 92
Cấu hình 92
DMA 93
Ngắt 93
Đầu vào / đầu ra / trạng thái 93
Ducks-in-a-Row 93
FreeRTOS 94
Nhiệm vụ 94
Hàng đợi 95
Tóm tắt 96
Chương 7: USB nối tiếp 97
Blue Pill USB Số phát hành 97
Giới thiệu về USB 99
Ống và điểm cuối 99
Thiết bị nối tiếp USB 101
Thiết bị nối tiếp USB Linux 101
Thiết bị nối tiếp USB MacOS 102
Thiết bị nối tiếp USB Windows 103
USB GPIO 103
Mã nguồn trình diễn 104
cdcacm_set_config () 105
cdc_control_request () 106
cdcacm_data_rx_cb () 107
USB Task 108
USB nhận 110
Gửi USB 110
Bộ chuyển tiếp USB 111
Tóm tắt 113
Thư mục 114
Chương 8: SPI Flash 115
Giới thiệu W25QXX 115
Giao diện ngoại vi nối tiếp Bus 115
Chip Chọn 117
Hệ thống dây điện và điện áp 117
Mạch SPI 118
Phần cứng / Kiểm soát NSS 118
Cấu hình SPM32 SPI 120
Tốc độ xung SPI 124
Chế độ xung SPI 125
Endianess và chiều dài byte 127
SPI I / O 128
Đọc SR1 128
Đang chờ sẵn sàng 129
Đọc ID nhà sản xuất 130
Viết flash 131
Xóa flash 133
Đọc Flash 136
Trình bày 137
Chạy bản trình diễn 139
ID nhà sản xuất 144
Power Down 144
Tóm tắt 145
Tài liệu tham khảo 145
Chương 9: Code Overlays 147
Kích thích liên kết 147
BỘ NHỚ 149
Ghi chép 151
Section 151
CUNG CẤP 154
Tái sử dụng 154
Xác định Overlay 155
Code Overlay 157
Sơ đồ 159
Quản lý Overlay 159
VMA và tải địa chỉ 160
Biểu tượng liên kết trong code 161
Hàm quản lý Overlay 162
Sơ đồ Overlay 164
Trình bày 165
Trích dẫn Overlay 166
Tải Overlay lên W25Q32 167
Bản trình bày Overlay tiếp theo 171
Thay đổi code Trap 173
Tóm tắt 173
Thư mục 174
Chương 10: Đồng hồ thời gian thực (RTC) 175
Trình bày các dự án 175
Sử dụng cấu hình RTC 175
RTC gián đoạn 176
Ngắt và thiết lập 178
Quy trình dịch vụ ngắt 179
Thông báo tác vụ 181
Mutexes 183
Trình bày 184
Kết nối UART1 187
Chạy Demo 188
rtc_alarm_isr () 190
Bộ điều khiển EXTI 190
Tóm tắt 192
Chương 11: I2C 195
Kênh I2C 195
Master và Slave 196
Bắt đầu và Dừng 196
Dữ liệu bit 197
Địa chỉ I2C 198
Giao dịch I2C 199
PCF8574 GPIO Extender 200
I2C Circuit 202
Dòng PCF8574 INT 203
Cấu hình PCF8574 203
Truyền động PCF8574 GPIO 205
Dạng sóng 206
Demo Mạch 206
Ngắt EXTI 207
Phần mềm I2C 209
Kiểm tra I2C 210
Bắt đầu I2C 211
I2C Viết 213
I2C Đọc 213
I2C Khởi động lại 214
Chương trình demo 215
Phiên bản demo 218
Tóm tắt 220
Chương 12: OLED 223
Màn hình OLED 223
Cấu hình 224
Hiển thị kết nối 226
Tính năng hiển thị 226
Sơ đồ Demo 227
AFIO 228
Đồ họa 230
Pixmap 232
Pixmap Viết 233
Phần mềm đo lường 234
Mô-đun chính 236
Trình bày 238
Tóm tắt 240
Chương 13: OLED Sử dụng DMA 241
Kích thích 241
Mạch 242
Hoạt động DMA 242
Thi hành DMA 242
Trình bày 247
Khởi tạo DMA 249
Khởi chạy DMA 250
Nhiệm vụ quản lý SPI / DMA OLED 251DMA 251
Thủ tục DMA ISR 254
Khởi động lại DMA 255
Thi hành Demo 256
Những thách thức khác 258
Tóm tắt 259
Chương 14: Chuyển đổi tương tự sang số 261
Tài nguyên STM32F103C8T6 261
Demo 262
Đầu vào tương tự PA0 và PA1 263
Cấu hình ngoại vi ADC 263
Chạy Demo 266
Đọc ADC 267
Điện áp tương tự 270
Tóm tắt 271
Thư mục 272
Chương 15: Cây đồng hồ 273
Trong phần đầu 273
RC Oscillators 274
Crystal Oscillators 275
Dao động điện 276
Đồng hồ thời gian thực 276
Đồng hồ giám sát 276
Đồng hồ hệ thống (SYSCLK) 277
SYSCLK và USB 279
AHB Bus 280
rcc_clock_setup_in_hse_8mhz_out_72mhz () 281
APB1 Thiết bị ngoại vi 285
Thiết bị ngoại vi APB2 285
Bộ hẹn giờ 285
rcc_set_mco () 286
HSI Demo 286
HSE demo 288
Bản demo PLL ÷ 2 289
Tóm tắt 290
Thư mục 290
Chương 16: PWM với Timer 2 293
Tín hiệu PWM 293
Timer 2 294
PWM Loop 298
Tính thời gian hẹn giờ 298
Chu kỳ 30Hz 299
Servo Hookup 300
Chạy Demo 301
PWM trên PB3 301
Thời gian khác 302
Kênh PWM khác 303
Tóm tắt 304
Thư mục 304
Chương 17: Đầu vào PWM với bộ đếm thời gian 4 305
Tín hiệu Servo 305
Tín hiệu điện áp 306
Demo Dự án 306
Cấu hình GPIO 306
Cấu hình hẹn giờ 4 306
Vòng Task1 308
Quy tắc ISR 309
Chạy demo 310
Kết quả đầu ra 312
Đầu vào bộ hẹn giờ 313
Tóm tắt 315
Chương 18: CAN Bus 317
CAN Bus 317
Tín hiệu khác nhau 319
Chủ yếu / Ngắt 320
Phân biệt bus 321
Đồng bộ hóa 322
Định dạng tin nhắn 323
Giới hạn STM32 324
Demo 325
Xây dựng Phần mềm 325
Giao diện UART 326
MCU nhấp nháy 326
Demo Bus 327
Phiên chạy 328
Tin nhắn CAN 330
Đồng bộ 331
Tóm tắt 331
Thư mục 331
Chương 19: Phần mềm CAN Bus 333
Khởi tạo 333
can_init () 336
CAN Nhận Bộ lọc 338
CAN Nhận Ngắt 339
Ứng dụng Nhận 343
Gửi tin nhắn CAN 345
Tóm tắt 346
Chương 20: Dự án mới 347
Tạo dự án 347
Makefile 348
Bao gồm Makefiles 351
Phụ thuộc tiêu đề 351
Tùy chọn biên dịch 351
Flash 128k 352
FreeRTOS 353
rtos / opencm3c 353
rtos / heap_4c 354
Mô-đun bắt buộc 354
FreeRTOSConfigh 355
Thư viện người dùng 357
Những sai sót trong Rookie 358
Tóm tắt 358
Thư mục 358
Chương 21: Xử lý sự cố 361
Gnu GDB 361
GDB Server 361
GDB từ xa 363
Giao diện người dùng văn bản GDB 366
Ngoại vi GPIO Trouble 367
Hàm thay thế lỗi 368
Lỗi ngoại vi 369
ISR FreeRTOS Crash 369
Ngăn xếp Overflow 370
Ước tính kích thước ngăn xếp 371
Khi một trình gỡ lỗi không hoạt động 371
Đẩy / kéo hoặc mở cống 372
Thiết bị 372
libopencm3 373
Ưu tiên nhiệm vụ FreeRTOS 375
Lập kế hoạch Trong libopencm3 376
Tóm tắt 377
Phụ lục A: Các câu trả lời cho các bài tập 379
Chương 4 379
Chương 5 381
Chương 6 382
Chương 7 383
Chương 8 384
Chương 9 385
Chương 10 386
Chương 11 386
Chương 12 387
Chương 13 388
Chương 14 389
Chương 15 390
Chương 16 390
Chương 17 391
Chương 19 391
Chương 20 392
Chương 1: GIỚI THIỆU
Các thiết bị ARM Cortex được quan tâm nhiều hiện nay bởi vì các thiết bị ARM
được tìm thấy ở mọi nơi. Các sản phẩm chứa các thiết bị ARM có thiết kế từ các hệ
thống nhúng vi điều khiển nhỏ đến điện thoại di động và các máy chủ lớn hơn chạy
Linux. ARM cũng có mặt ở những thiết bị cao hơn trong trung tâm dữ liệu. Đây là
tất cả những lý do nên làm quen với công nghệ ARM.
Với những công nghệ khác nhau, từ vi điều khiển đến máy chủ, câu hỏi phát sinh:
"Tại sao cần phải nghiên cứu lập trình thiết bị nhúng? Tại sao không tập trung vào
các hệ thống người dùng chạy Linux, giống như Raspberry Pi?”
Câu trả lời đơn giản là các hệ thống nhúng hoạt động tốt trong các tình huống khó
xử lý cho các hệ thống lớn hơn. Chúng thường được sử dụng trong thế giới thực.
Ví dụ, chúng giao tiếp giữa thế giới thực và hệ thống máy tính để bàn. Bàn phím sử
dụng MCU chuyên dụng (bộ vi điều khiển) để quét các công tắc chính của bàn
phím và báo cáo công việc nhấn phím vào hệ thống máy tính để bàn. Điều này
không chỉ làm giảm số lượng dây cần thiết mà còn giải phóng CPU chính khỏi việc
tính toán hiệu suất cao của nó với nhiệm vụ đơn giản để thông báo việc nhấn phím.
Các ứng dụng khác bao gồm các hệ thống nhúng trong các nhà máy để theo dõi
nhiệt độ, bảo mật và phát hiện cháy. Các hệ thống nhúng độc lập tiết kiệm tiền và
khởi động ngay lập tức. Cuối cùng, kích thước nhỏ của MCU làm cho nó trở thành
sự lựa chọn tốt nhất trong các máy bay không người lái, nơi khối lượng là yếu tố
quan trọng.
Sự phát triển của các hệ thống nhúng theo truyền thống yêu cầu nguồn lực từ hai
ngành:
• Kỹ sư phần cứng
• Người phát triển phần mềm
Thông thường, một người được giao nhiệm vụ hoàn thảnh sản phẩm cuối cùng. Kỹ
sư phần cứng chuyên thiết kế các mạch điện tử liên quan, nhưng bước cuối cùng
sản phẩm yêu cầu phần mềm. Điều này có thể là một thách thức bởi vì người viết
phần mềm thường thiếu hiểu biết về điện tử trong khi các kỹ sư thường thiếu
chuyên môn về phần mềm. Để tiết kiệm chi phí và thời gian, kỹ sư điện tử thường
kim luôn kỹ sư phần mềm.
Không có gì bất lợi khi một người thực hiện cả hai chuyên ngành miễn là có các kỹ
năng cần thiết. Đó là nội dung cuốn sách này muốn thực hiện.
STM32F103C8T6
Thiết bị được sử dụng trong cuốn sách này là STMicroelectronics
STM32F103C8T6. Thiết bị này gồm nhiều phần, vì vậy cần chia nhỏ nó:
• STM32 (nền tảng STMicroelectronics)
• F1 (gia đình thiết bị)
• 03 (phân khu của họ thiết bị)
• C8T6 (hiển thị ảnh hưởng đến số lượng SRAM, bộ nhớ flash, …)
Các thiết bị này sử dụng đường dẫn 32-bit và mạnh hơn đáng kể so với các thiết bị
8-bit.
F103 là một nhánh (F1 + 03) của thiết bị STM32. Phần này quyết định CPU và khả
năng ngoại vi của thiết bị.
Cuối cùng, C8T6 xác định thêm khả năng của thiết bị, như dung lượng bộ nhớ và
tốc độ xung.
Thiết bị STM32F103C8T6 đã được chọn sử dụng trong cuốn sách này vì những
yếu tố sau:
• Chi phí thấp (~2 USD trên eBay)
• Tính thông dụng (eBay, Amazon, AliExpress, …)
• Khả năng nâng cao
• Thiết kế
STM32F103C8T6 có chi phí thấp cho sinh viên và người yêu thích nó để khám
phá thiết bị ARM Cortex-M3. Thiết bị này có sẵn và cực kỳ tiềm năng. Cuối cùng,
thiết kế của PCB nhỏ cho phép hàn chân vào các cạnh và cắm vào breadboard.
Breadboard là board thuận tiện nhất để thực hiện các thí nghiệm.
MCU trên PCB (Hình 1-1) được gọi là "Blue Pill", lấy cảm hứng từ bộ phim The
Matrix. Có một số PCB cũ hơn có màu đỏ và được gọi là "Red Pill". Vẫn còn
những loại khác, màu đen được gọi là "Black Pill". Trong cuốn sách này, sử dụng
Blue Pill.
Hình 1-1. STM32F103C8T6 PCB với các chân đề hàn, thường được gọi là "Blue
Pill"
Chi phí thấp có một lợi thế khác - nó cho phép sở hữu một số thiết bị cho các dự án
liên quan đến truyền thông CAN, ví dụ cuốn sách này khám phá truyền thông CAN
bằng cách sử dụng ba thiết bị được kết nối bằng một bus thông thường.
Sự hỗ trợ của thiết bị ngoại vi của STM32F103 bao gồm:
• Cổng GPIO 4 x 16 bit (hầu hết là dung sai 5 volt)
• 3 x USART (Bộ thu / phát đồng bộ / không đồng bộ chung)
• 2 x bộ điều khiển I2C
• 2 x bộ điều khiển SPI
• 2 x ADC (Bộ chuyển đổi số tương tự)
• 2 x DMA (bộ điều khiển địa chỉ bộ nhớ trực tiếp)
• 4 x đồng hồ
• xem giờ cặp
• 1 x bộ điều khiển USB
• 1x bộ điều khiển CAN
• 1 x máy phát điện CRC
• RAM tĩnh 20K
• Thẻ nhớ FLASH 64K (hoặc 128K)
• CPU ARM Cortex M3, xung tối đa 72 MHz
Tuy nhiên, có một số hạn chế. Ví dụ, bộ điều khiển USB và CAN không thể hoạt
động cùng một lúc. Các thiết bị ngoại vi khác có thể khác với các chân I / O được
sử dụng. Hầu hết sự khác nhau giũa các chân được quản lý thông qua cấu hình
AFIO (Đầu ra chức năng thay thế), cho phép các chân khác nhau được sử dụng cho
chức năng của thiết bị ngoại vi.
Trong cấu hình ngoại vi, một số xung riêng biệt có thể được bật riêng để điều
chỉnh mức sử dụng năng lượng. Khả năng tiên tiến của MCU làm cho nó phù hợp
để nghiên cứu.
Thẻ nhớ flash được sử dụng ở 64K byte, nhưng có thể thấy rằng nó hỗ trợ 128K.
Điều này được đề cập trong Chương 2 và cho phép các ứng dụng tốt được tận dụng
vào thiết bị.
FreeRTOS
Không giống như dòng chip AVR phổ biến (hiện thuộc sở hữu của Microchip), gia
đình STM32F103 có đủ SRAM (RAM tĩnh) để chạy thoải mái FreeRTOS
(freertos.org). Có quyền truy cập vào một RTOS (hệ điều hành thời gian thực)
cung cấp một số lợi thế, bao gồm
• Đa nhiệm ưu tiên;
• Hàng đợi;
• Mutexes và semaphores; và
• phần mềm hẹn giờ.
Lợi thế đặc biệt là khả năng đa nhiệm. Nó giúp giảm bớt đáng kể gánh nặng của
thiết kế phần mềm. Nhiều dự án Arduino tiên tiến được nạp liệu bởi việc sử dụng
các máy chủ với một mô hình vòng lặp sự kiện. Mỗi lần thông qua vòng lặp, phần
mềm phải thăm dò ý kiến cho dù một sự kiện đã xảy ra và xác định thời gian cho
một số hành động. Điều này làm cho quản lý các biến trạng thái trở nên phức tạp
và dẫn đến lỗi lập trình. Ngược lại, đa nhiệm ưu tiên cung cấp các nhiệm vụ điều
khiển riêng biệt, thực hiện rõ ràng chức năng độc lập của chúng. Đây là một dạng
trừu tượng của phần mềm đã được chứng minh.
FreeRTOS cung cấp đa nhiệm ưu tiên, tự động chia sẻ thời gian CPU giữa các tác
vụ được định cấu hình. Tuy nhiên, các nhiệm vụ độc lập làm thêm một số nhiệm
vụ cho việc tương tác một cách an toàn giữa chúng. Đây là lý do tại sao FreeRTOS
cũng cung cấp hàng đợi tin nhắn, semaphores, mutexes và nhiều thứ khác để quản
lý an toàn.
libopencm3
Phát triển code cho các ứng dụng MCU có thể được yêu cầu. Một phần của yêu
cầu này đang phát triển với “bare metal” của thiết bị này. Điều này bao gồm tất cả
các thanh ghi ngoại vi chuyên dụng và địa chỉ của chúng. Ngoài ra, nhiều thiết bị
ngoại vi yêu cầu một "điệu nhảy" nhất định để khiến chúng sẵn sàng để sử dụng.
Đây là trang chủ của libopencm3 (libopencm3.org). Nó không chỉ xác định địa chỉ
bộ nhớ cho các địa chỉ đăng ký ngoại vi, mà nó còn định nghĩa các macro cho các
hằng số đặc biệt cần thiết. Cuối cùng, thư viện bao gồm các hàm C đã được kiểm
tra để tương tác với các thiết bị phần cứng ngoại vi.
Không có Arduino
Không có code Arduino nào được trình bày trong cuốn sách này. Arduino phục vụ
mục đích của nó khá tốt, cho phép học sinh nghiên cứu thế giới MCU mà không
cần biết trước. Cuốn sách này nhắm đến mục tiêu xa hơn môi trường Arduino bằng
cách sử dụng một chế độ chuyên nghiệp phát triển độc lập với các công cụ
Arduino.
Nếu không có Arduino, không có "cổng kỹ thuật số 10." Thay vào đó, làm việc
trực tiếp với một cổng MCU và tùy chọn một chân. Ví dụ, thiết bị Blue Pill được
sử dụng trong cuốn sách này có đèn LED tích hợp trên cổng C, là chân 13. Hoạt
động trực tiếp với các cổng cho phép hoạt động I / O với tất cả 16 chân cùng một
lúc khi cần.
Không có IDE
Có một số môi trường IDE dựa trên hệ điều đành Windows có sẵn nhưng IDE thay
đổi các thư viện liên quan của chúng theo thời gian. Lợi thế của IDE đã cho thường
bị loại bỏ khi IDE và hệ điều hành nó chạy khi thay đổi.
Cuốn sách này phát triển các dự án dựa trên các công cụ và thư viện nguồn mở sau:
• gcc / g ++ (bộ sưu tập trình biên dịch GNU: nguồn mở)
• tạo (GNU binutils: open sourced)
• libopencm3 (thư viện: nguồn mở)
• FreeRTOS (thư viện: mã nguồn mở và miễn phí cho mục đích thương mại)
Với thiết bị này, các dự án trong cuốn sách này sẽ vẫn có thể sử dụng được lâu sau
khi mua cuốn sách này. Hơn nữa, nó cho phép người dùng Linux, FreeBSD và
MacOS — ngoài những người sử dụng nền tảng Windows — để sử dụng cuốn
sách này. Nếu sử dụng Windows, có thể tải xuống và cài đặt môi trường Cygwin
(www.cygwin.com) vì môi trường giống như Linux được giả thiết cho dự án xây
dựng bản demo.
Tất cả các dự án được trình bày sử dụng GNU (GNU không phải là Unix) đều tạo
ra tiện ích, cung cấp một số hàm được xây dựng với thời gian tối thiểu. Nếu các
bản được cung cấp trong cuốn sách này có lỗi, thì hãy đảm bảo sử dụng lệnh tạo
GNU, đặc biệt là trên FreeBSD. Một số hệ thống cài đặt GNU làm gmake.
Framework Phát triển
Mặc dù gcc, libopencm3 và FreeRTOS có thể hoạt động cùng nhau, nhưng nó đòi
hỏi sự cân sức của cấu tạo và chế độ làm việc.
Thay vì làm công việc tẻ nhạt này, có một framework phát triển có sẵn miễn phí từ
github.com để tải xuống. Framework này tích hợp libopencm3 với FreeRTOS.
Cũng được cung cấp để tạo các tệp cần thiết để xây dựng toàn bộ chuỗi dự án cùng
một lúc hoặc từng dự án riêng lẻ. Cuối cùng, có một số thư viện nguồn mở có thể
rút ngắn thời gian phát triển của các ứng dụng mới. Framework này có thể tải
xuống tại github.com hoặc tải xuống code riêng của cuốn sách.
Giả định
Cuốn sách này dành cho những ai muốn vượt ra ngoài kinh nghiệm Arduino. Nó
dành cho những ai yêu thích, nhà sản xuất và kỹ sư. Các phần mềm được phát triển
trong cuốn sách này sử dụng ngôn ngữ lập trình C, vì vậy nếu đã biết cách lập trình
C thì sẽ tốt hơn. Tương tự như vậy, một số kiến thức điện tử kỹ thuật số cơ bản
được giả định là liên quan đến các giao diện ngoại vi do thiết bị cung cấp.
Thiết bị STM32 có thể là một thách thức để cấu hình và vận hành chính xác. Phần
lớn thách thức này là kết quả của cấu hình tệ của các thiết bị ngoại vi. Mỗi thiết bị
phụ thuộc vào một xung, phải được kích hoạt và ước lượng được cấu hình. Một số
thiết bị bị ảnh hưởng bởi cấu hình xung ngược. Cuối cùng, mỗi thiết bị ngoại vi
phải được kích hoạt và được cấu hình để sử dụng.
Những người yêu thích và nhà sản xuất không cần phải tìm các cuốn sách khó để
đọc. Ngay cả khi bị thách thức, nó vẫn có thể xây dựng và chạy từng thí nghiệm
của dự án. Khi kiến thức và sự tự tin được xây dựng, mỗi người đọc có thể phát
triển các chủ đề được đề cập. Lời khuyên là tất cả độc giả nên sáng tạo các dự án
được trình bày và chạy thử nghiệm thêm. Framework được cung cấp cũng sẽ cho
phép tạo các dự án mới với nỗ lực tối thiểu.
Những thứ cần thiết
Có một số thiết bị cần sử dụng trong các dự án của cuốn sách. Số một trong danh
sách là thiết bị Blue Pill (xem Hình 1-1). Nên mua loại có các chân đề hàn vào
PCB để dễ dàng sử dụng thiết bị trên breadboard.
Chương 18–19 sử dụng ba thiết bị Blue Pill giao tiếp với nhau qua một bus CAN.
Nếu muốn thực hiện các thí nghiệm đó, hãy đảm bảo có được ít nhất ba thiết bị.
Thiết bị lập trình ST-Link V2
Thiết bị thiết yếu tiếp theo là bộ điều hợp lập trình, cần mua loại “V2”.
Hầu hết các loại linh liện sẽ bao gồm bốn dây có thể tháo rời để kết nối thiết bị với
thiết bị STM32. Hình 1-2 minh họa lập trình USB, có thể sử dụng được từ
Windows, Raspberry Pi, Linux, MacOS và FreeBSD.
Hình 1-2. Bộ lập trình và cáp ST-Link V2
Thiết bị STM32F103C8T6 có thể được lập trình theo nhiều cách, nhưng cuốn sách
này sẽ chỉ sử dụng trình lập trình USB ST-Link V2. Nó giúp đơn giản hóa mọi thứ
khi thực hiện phát triển dự án và cho phép gỡ lỗi từ xa.
Breadboard
Một breadboard là cần thiết để làm thí nghiệm. Nhiều dự án trong cuốn sách này
nhỏ cần không gian cho một thiết bị Blue Pill và một số đèn LED hoặc chip. Tuy
nhiên, các thí nghiệm khác, như thí nghiệm trong Chương 18–19, sử dụng ba thiết
bị giao tiếp với nhau qua một bus CAN.
Cần có một breadboard đủ chỗ cắm bốn thiết bị. Ngoài ra, có thể mua bốn
breadboard nhỏ, mặc dù điều này ít thuận tiện hơn.
Hình 1-3 minh họa breadboard sử dụng trong cuốn sách này. Nó không phải đủ
lớn, nhưng có các đường nối điện ở đầu và cuối mỗi dải. Các đường này được
khuyến khích, vì nó giúp giảm bớt hệ thống dây điện.

Hình 1-3. Một breadboard với các đường nối được cung cấp
Dây điện DuPont
Nhiều người dùng không để ý nhiều về hệ thống dây điện của breadboard, nhưng
dây DuPont có thể tạo ra một sự khác biệt rất lớn. Có thể tự cắt và tuốt dây nhưng
nó bất tiện và mất thời gian. Sẽ thuận tiện hơn khi có sẵn một hộp dây điện. Hình
1-4 minh họa một số dây dẫn DuPont.
Hình 1-4. Dây điện DuPont
Tụ Bypass 0,1 uF
Có một số dự án trong cuốn sách cần sử dụng tụ điện. Hình 1-5 chứa tụ Bypass
0,1uF là linh kiện có màu vàng trong hình.
Hình 1-5. Breadboard với STM32F103C8T6 và tụ Bypass 0,1uF được cắm trên các
đường nối.
Bộ chuyển đổi USB TTL
Thiết bị này rất cần thiết cho một số dự án trong cuốn sách này. Hình 1-6 minh họa
một loại của thiết bị này. Bộ chuyển đổi này được sử dụng để truyền dữ liệu đến
máy tính để bàn / máy tính xách tay. Nếu không có màn hình hiển thị, nó cho phép
giao tiếp thông qua một liên kết nối tiếp ảo (qua USB) đến một chương trình điểm
mút.
Hình 1-6. Cáp chuyển đổi USB (TTL)
Đây là thiết bị 5V thông thường và tương thích TTL. Tuy nhiên, lưu ý rằng một
trong những tính năng của dòng thiết bị STM32F103 là nhiều chân GPIO có dung
sai 5 volt, mặc dù MCU hoạt động với nguồn + 3,3 volt. Điều này cho phép sử
dụng các bộ chuyển tiếp TTL này mà không gây hại. Các thiết bị cần thiết khác có
thể hoạt động với nguồn 3,3-volt hoặc có thể chuyển đổi giữa 5 và 3,3 volt.
Bộ nguồn
Hầu hết các dự án được trình bày chỉ hoạt động tốt với đầu ra nguồn của bộ chuyển
đổi USB hoặc TTL. Nhưng có một số dự án có thể cần một bộ đổi nguồn. Hình 1-7
minh họa một bộ biến đổi tốt để cung cấp điện cho breadboard.
Hình 1-7. Một nguồn cung cấp điện breadboard và bộ chuyển đổi 7.5 VDC
MB102 khá thuận tiện vì nó có thể chuyển đổi để cung cấp điện 3,3 volt hoặc 5
volt. Ngoài ra, nó bao gồm nút bật / tắt nguồn.
Bộ chuyển đổi thường để cung cấp nguồn điện đầu vào. Trong khi MB102 cấp
nguồn lên đến 12 volt đầu vào, hầu hết 9 bộ chuyển đổi VDC có điện áp mạch mở
gần 13 vôn hoặc nhiều hơn.
Bộ sạc điện thoại Ericsson cũ sử dụng 7,5 VDC ở 600 mA. Nó đo một điện áp
không tải ở 7.940 volt. Nó gần với các đầu ra 5 và 3,3 volt hơn MB102 sẽ điều
chỉnh.
Các linh kiện nhỏ
Các linh kiện nhỏ cần phải có là đèn LED và điện trở để sử dụng cho các dự án.
Hình 1-8 cho thấy các đèn LED và một điện trở SIP-9.
Hình 1-8. Bộ đèn LED 5 mm và một điện trở SIP-9 ở phía dưới
Thông thường một đèn LED sử dụng dòng điện khoảng 10 mA cho độ sáng bình
thường. Đèn LED nhỏ hơn chỉ cần dòng điện từ 2 đến 5 mA. Với điện áp cung cấp
gần 3,3 volt, vì vậy cần có điện trở khoảng 220 Ω để giới hạn dòng điện (220 ohms
giới hạn dòng điện đến mức tối đa khoảng 7 mA).
Một loại điện trở khác đó là điện trở SIP-9. Hình 1-9 minh họa sơ đồ bên trong cho
điện trở này. Ví dụ, nếu làm sáng tám đèn LED, cần có tám điện trở đơn cho mỗi
LED, cần được nối dây và chiếm nhiều không gian breadboard. Nhưng nếu sử
dụng điện trở SIP-9 có kết nối chung cả tám điện trở thì sẽ tiện hơn, tiết kiệm dây
điện và giảm sai sót trong quá trình nối dây.
Hình 1-9. Sơ đồ bên trong của điện trở SIP-9

Tóm lược
Chương này đã giới thiệu các thiết bị chính sẽ xuất hiện trong cuốn sách này.
Chương 2: sẽ hướng dẫn các bước cài đặt phần mềm cần thiết. Khi đã thực hiện
qua các bước đơn giản, nhàm chán nhưng cần thiết thì làm các dự án sẽ de74 dàng
hơn.
Chương 3: Chương này cung cấp thông tin quan trọng về các tùy chọn cấp nguồn.
Hướng dẫn các tùy chọn quyền truy cập và sau đó áp dụng trình lập trình ST-Link
V2 để thăm dò thiết bị.
Chương 4: Thực hiện tiện ích st-flash và lập trình thiết bị bằng chương trình liên
kết nhỏ, một chương trình Flash khác với chương trình được cung cấp cùng với
thiết bị. Thú vị hơn, API GPOP libopencm3 sẽ được thảo luận và chương trình liên
kết nhỏ sẽ được kiểm tra chi tiết. Điều này giải thích cấu hình GPIO và hoạt động
của nó.
Chương 5: Chương trình Flash sẽ chạy dưới FreeRTOS như một nhiệm vụ. Cách
cấu hình tốc độ xung nhịp CPU sao cho không cần cấp một xung RC mặc định.
Một chức năng móc tùy chọn để giải quyết sự kiện tràn ngăn xếp được minh họa.
Cấu hình và quy ước của FreeRTOS đã được đề cập đến.
Chương 6: Chương này sẽ trình bày công thức chung cho việc cấu hình và kích
hoạt USART ở chế độ không đồng bộ. Điều này cho phép Blue Pill gửi dữ liệu đến
máy tính để bàn để gỡ lỗi hoặc bất kỳ báo cáo nào khác.
Đồng thời thể hiện các nhiệm vụ FreeRTOS và hàng đợi tin nhắn được cung cấp.
Cách tiếp cận này chia các bên gửi và nhận của ứng dụng thành nhiệm vụ riêng của
chúng.
Chương 7: Chương này hướng dẫn cách một giao diện USB được xây dựng giữa
STM32 và máy tính xách tay / PC. Bản demo nhấn mạnh một số cơ sở FreeRTOS,
như nhiệm vụ và hàng đợi tin nhắn. Có các nhiệm vụ thực thi riêng và truyền thông
liên công việc an toàn giúp đơn giản hóa việc phát triển ứng dụng.
Chương 8: Giao thức SPI và cách áp dụng nó trên STM32 trong FreeRTOS bằng
cách sử dụng libopencm3.
Chương 9: Chương này giới thiệu tính năng tải lên Intel Hex để code chương trình.
Chương 10: Chương này khám phá cấu hình và sử dụng đồng hồ thời gian thực.
Cách thiết lập EXTI17 cho phép thiết lập thay đổi tín hiệu GPIO ngắt.
Chương 11: Chương này giúp chuẩn bị tốt cho làm việc I2C.
Chương 12: Trong chương này, SPI được áp dụng cho vấn đề thực tế của việc điều
khiển một màn hình OLED. Khái niệm về AFIO cho gia đình STM32 cũng được
áp dụng trong chương này chứng minh làm thế nào SPI1 có thể có chân I / O của
nó chuyển đến chân khác nhau.
Chương 13: Chương này được xây dựng dựa trên phần mềm được phát triển trong
Chương 12, thêm bộ điều khiển DMA để quản lý việc truyền dữ liệu đến thiết bị
OLED.
Chương 14: Chương này cung cấp môi trường đơn giản để bắt đầu sử dụng ADC.
Chương 15: Trong chương này, tổng quan về hệ thống cây đồng hồ đã được trình
bày, bắt đầu bằng nguồn đồng hồ chính: HSI và HSE cho đồng hồ hệ thống và
HSE, LSE và LSI cho thời gian thực đồng hồ. Đồng hồ LSI cũng được sử dụng bởi
bộ đếm thời gian watchdog.
Chương 16: Chương này áp dụng bộ đếm thời gian phần cứng cho nhiệm vụ tạo
đầu ra tín hiệu PWM thích hợp cho việc điều khiển động cơ servo RC. Ưu điểm
của việc sử dụng bộ đếm thời gian phần cứng là ít hoặc không hỗ trợ phần mềm
khi nó được cấu hình để chạy, để thay đổi độ rộng xung hoặc chu kỳ của một bản
cập nhật nhỏ cho bộ hẹn giờ. Đồng hồ phần cứng cũng cung cấp độ chính xác cao
hơn vì chúng không bị chậm trễ phần mềm.
Chương 17: Chương này sẽ trình bày cách bộ đếm thời gian STM32 được sử dụng
để đo độ rộng xung và khoảng thời gian của tín hiệu một cách dễ dàng.
Chương 18: Khi đèn tín hiệu nhấp nháy, mắt người nhìn thấy chúng gần như là liên
tục chứ không phải là nhấp nhấy. Vậy chúng được được làm bằng cách nào? Và
điều gì xảy ra nếu cần độ chính xác cao hơn cho ứng dụng điều khiển nhà máy?
Chương này sẽ trình bày chi tiết hai câu hỏi trên.
Chương 19: Chương này sẽ trình bày một số cách viết code C đơn giản bằng cách
đặt API ứng dụng CAN bus trong mô-đun canmsgs.c và canmsgs.h, nhiệm vụ viết
ứng dụng trở nên dễ dàng hơn. Và một số ứng dụng của CAN BUS.
Chương 20: Chương này sẽ chuẩn bị để tạo các dự án STM32 tự thực hiện bằng
cách sử dụng FreeRTOS.
Chương 21: Chương này trình bày các thiết bị thành viên khác có các thiết bị ngoại
vi bổ sung trong gia đình STM32, như DAC (bộ chuyển đổi digitalto-analog), để
đặt tên một thiết bị, một thiết bị trong gia đình STM32F407, Core407V, STM32F4.

You might also like