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

ĐỒNG hồ bấm GIỜ sử DỤNG TIMER HIỂN THỊ LED 7 THANH 3 CHẾ độ STOP, START RS – 4 LED

42 17 0

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Đồng hồ bấm giờ sử dụng timer hiển thị LED 7 thanh 3 chế độ stop, start rs – 4 LED
Tác giả Nguyễn Ngọc Minh
Người hướng dẫn Nguyễn Ngọc Minh
Trường học Học Viện Công Nghệ Bưu Chính Viễn Thông
Chuyên ngành Hệ Thống Nhúng Vận Dụng
Thể loại bài tập lớn
Năm xuất bản 2023
Thành phố Hồ Chí Minh
Định dạng
Số trang 42
Dung lượng 5,99 MB
File đính kèm file dinh kem.rar (11 MB)

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

Cấu trúc

  • I. Vi xử lý Cortex M3 (4)
    • 1. Vi xử lý Cortex M3 là gì (4)
    • 2. Cấu trúc lõi của ARM Cortex-M3 (5)
    • 3. Cấu trúc lõi bộ vi xử lý Cortex M (6)
  • II. VI ĐIỀU KHIỂN STM32F103C8 (8)
    • 1. Tổng quan về vi điều khiển STM32F103C8 (8)
    • 2. Tính năng của STM32F103C8 (9)
    • 3. Timer (12)
      • 3.1. Giới thiệu về Timer (12)
      • 3.2. Các chế độ hoạt động của Timer trong STM32 (12)
      • 3.3 Timer Mode STM32 (17)
  • III. SMT32CUBEMX VÀ KEILC (19)
    • 1. Phần mềm STM32CubeMx (19)
    • 2. Phần mềm KeilC uvision5 (22)
  • IV. XÂY DỰNG CHƯƠNG TRÌNH (29)
    • 1. Lưu đồ thuật toán (29)
    • 2. Xây dựng chương trình trên phần mềm STM32CubeMX (31)
    • 3. Xây dựng chương trình trên phần mềm KeilC uvision 5 (34)
  • V. Chương trình Code (35)
    • 1. Khai báo các chân GPIO và chương trình con (35)
    • 2. Thiết lập cấu hình clock hệ thống (36)
    • 3. Thiết lập cấu hình GPIO (36)
    • 4. Thiết lập cấu hình Timer (38)
    • 5. Các chương trình con (39)
    • 6. Chương trình Main (41)

Nội dung

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG KHOA KỸ THUẬT ĐIỆN TỬ I BÀI TẬP LỚN MÔN HỆ THỐNG NHÚNG ĐỀ TÀI ĐỒNG HỒ BẤM GIỜ SỬ DỤNG TIMER HIỂN THỊ LED 7 THANH 3 CHẾ ĐỘ STOP, START RS – 4 LED Giảng viên Ng.

Vi xử lý Cortex M3

Vi xử lý Cortex M3 là gì

Vi xử lý ARM Cortex M3 là một lựa chọn lý tưởng cho các ứng dụng vi điều khiển nhờ kiến trúc ARM tiên tiến, mang lại hiệu suất mạnh mẽ với chi phí tối ưu Với khả năng xử lý linh hoạt và tiết kiệm năng lượng, ARM Cortex M3 ngày càng được ưa chuộng trong các thiết bị nhúng và hệ thống điều khiển thông minh.

Kiến trúc ARM là một kiến trúc vi xử lý theo dạng RISC, được tối ưu hóa cho nhiều môi trường ứng dụng khác nhau Được phát triển bởi Arm Holdings, kiến trúc này được cấp phép cho các công ty công nghệ để thiết kế các sản phẩm riêng như SoC (System on Chip) và SoM (System on Module), tích hợp với bộ nhớ và các ngoại vi Một ví dụ điển hình là dòng vi điều khiển STM32 của STMicroelectronics, thường được sử dụng trong Series Học Lập Trình STM32.

Vi xử lý lõi ARM Cortex dựa trên 3 cấu hình của kiến trúc ARMv7

 Cấu hình A: cho các ứng dụng Application, yêu cầu cao chạy trên các hệ điều hành mở và phức tạp như Linux, Android…

 Cấu hình R: cho các ứng dụng thời gian thực Real Time

 Cấu hình M: cho các ứng dụng vi điều khiển Microcontroller

Bộ vi xử lý ARM Cortex-M3, dựa trên kiến trúc ARMv7-M, là lựa chọn lý tưởng cho các ứng dụng nhúng nhờ hiệu suất cao và khả năng tiết kiệm năng lượng, chi phí Với thiết kế tối ưu cho các vi điều khiển, hệ thống cơ ô tô, kiểm soát công nghiệp và mạng không dây, Cortex-M3 còn nổi bật bởi khả năng lập trình đơn giản, giúp tăng tính linh hoạt và dễ dàng triển khai ngay cả trong các ứng dụng đơn giản nhất.

Cấu trúc lõi của ARM Cortex-M3

Bộ vi xử lý ARM Cortex-M3, được xây dựng trên kiến trúc ARMv7-M có cấu trúc thứ bậc, tích hợp lõi xử lý trung tâm cùng các thiết bị ngoại vi hệ thống tiên tiến Nhờ đó, nó cung cấp các tính năng mạnh mẽ như kiểm soát ngắt, bảo vệ bộ nhớ, hỗ trợ gỡ lỗi và theo dõi hệ thống, đáp ứng hiệu quả nhu cầu xử lý trong các ứng dụng nhúng hiện đại.

Vi xử lý ARM Cortex-M3 sử dụng kiến trúc Harvard, nổi bật với khả năng phân tách bộ nhớ dữ liệu và chương trình, cho phép truy xuất đồng thời lệnh và dữ liệu Nhờ đó, ARM Cortex-M3 thực hiện các tác vụ song song hiệu quả, tối ưu hóa tốc độ xử lý và nâng cao hiệu suất ứng dụng trong các hệ thống nhúng.

Cấu trúc lõi bộ vi xử lý Cortex M

Lõi ARM Cortex sử dụng kiến trúc đường ống gồm ba tầng: Instruction Fetch, Instruction Decode và Instruction Execute, giúp tối ưu hóa hiệu suất xử lý Khi gặp lệnh nhánh, tầng decode sẽ kích hoạt cơ chế nạp lệnh suy đoán, cho phép bộ xử lý dự đoán hướng rẽ nhánh ngay trong giai đoạn giải mã Trong giai đoạn thực thi, bộ vi xử lý xác định chính xác lệnh tiếp theo cần thực hiện Nếu dự đoán đúng, lệnh kế tiếp đã sẵn sàng; nếu rẽ nhánh được chọn, lệnh rẽ nhánh cũng đã được chuẩn bị, giúp giảm thời gian chờ xuống chỉ còn một chu kỳ.

Bộ vi xử lý Cortex-M3 là một vi xử lý 32-bit mạnh mẽ, tích hợp bộ giải mã cho cả tập lệnh Thumb truyền thống và Thumb-2 hiện đại, cùng với đơn vị logic số học (ALU) tiên tiến hỗ trợ các phép toán nhân chia phần cứng và điều khiển logic Với đường dẫn dữ liệu rộng 32 bit, Cortex-M3 cung cấp khả năng giao tiếp bộ nhớ hiệu quả và sở hữu hệ thống thanh ghi đa dạng gồm 13 thanh ghi đa dụng, hai con trỏ ngăn xếp, một thanh ghi liên kết, một bộ đếm chương trình và các thanh ghi đặc biệt như thanh ghi trạng thái chương trình, giúp tối ưu hóa hiệu suất xử lý và khả năng tương tác với các thành phần khác trong hệ thống.

VI ĐIỀU KHIỂN STM32F103C8

Tổng quan về vi điều khiển STM32F103C8

STM32F103xx là dòng vi điều khiển hiệu suất mật độ trung bình, tích hợp lõi ARM Cortex-M3 32-bit hoạt động ở tần số 72MHz, mang lại hiệu suất cao và khả năng xử lý mạnh mẽ Chip sở hữu bộ nhớ flash lên đến 128KB và SRAM 20KB, cùng với hệ thống ngoại vi đa dạng như hai bộ chuyển đổi ADC 12-bit, ba bộ định thời 16-bit và một bộ định thời PWM Ngoài ra, STM32F103xx hỗ trợ các giao tiếp tiêu chuẩn và nâng cao gồm tối đa hai I2C, hai SPI, ba USART, một USB và một CAN, giúp mở rộng khả năng kết nối trong các ứng dụng nhúng Thiết bị hoạt động ổn định trong dải điện áp từ 2.0V đến 3.6V và có thể chịu được nhiệt độ từ -40°C đến +105°C, phù hợp với môi trường công nghiệp khắc nghiệt Với chế độ tiết kiệm năng lượng toàn diện, STM32F103xx là lựa chọn lý tưởng cho các ứng dụng yêu cầu tiêu thụ điện năng thấp.

Dòng vi điều khiển STM32F103xx hiệu suất mật độ trung bình cung cấp nhiều tùy chọn gói từ 36 đến 100 chân, phù hợp với đa dạng nhu cầu thiết kế hệ thống nhúng Tùy theo phiên bản cụ thể, các thiết bị này được tích hợp các bộ ngoại vi khác nhau, mang đến khả năng linh hoạt cao trong ứng dụng Bài viết này sẽ tổng hợp đầy đủ các loại ngoại vi được đề xuất trong dòng sản phẩm STM32F103xx, giúp người dùng dễ dàng lựa chọn giải pháp phù hợp cho dự án của mình.

Dòng vi điều khiển mật độ trung bình STM32F103xx nổi bật với các tính năng mạnh mẽ, giúp nó trở thành lựa chọn lý tưởng cho nhiều ứng dụng như điều khiển động cơ, thiết bị y tế và cầm tay, thiết bị ngoại vi máy tính, hệ thống chơi game, nền tảng GPS, các ứng dụng công nghiệp, PLCs, biến tần, máy in, máy quét, hệ thống báo động, liên lạc video và điều hòa không khí HVAC.

Tính năng của STM32F103C8

 Core: CPU Cortex-M3 ARM32 bit

 Tần số tối đa: 72MHz, 1.25 DMIPS/MHz (Dhrystone 2.1) hiệu suất ở 0 chờ truy cập bộ nhớ ở trạng thái chờ.

 Phép nhân một chu kì và phân chia phần cứng

 Đồng hồ, chức năng reset và quản lý

 2.0 đến 3.6V điện áp ứng dụng và I/Os

 POR, PDR và máy dò điện có thể lập trình (PVD)

 Dao động thạch anh 4-16MHz

 Dao động máy RC nội: 8MHz

 Dao động RC nội: 40KHz

 Bộ dao động 32KHz cho RTC với hiệu chuẩn

 Chế độ hoạt động công suất thấp

 Chế độ: Ngủ, dừng, chờ.

 Cung cấp VBAT cho RTC và đăng kí dự phòng

 Bộ chuyển đổi 2 x 12 bit, 1 às A/D (tối đa 16 kờnh)

 Giao diện gỡ lỗi dây nối tiếp (SWD) và JTAG

 32/46/80 với mức điện áp ra ở mức cao là 5V

 Thiết lập bản đồ 16 vector

 Có tất cả 7 bộ Timer

 3 bộ Timer hẹn giờ 16 bit, mỗi bộ đếm thời gian có tối đa 4 IC/OC/ PWM hoặc bộ đếm xung và bộ mã hóa bậc bốn đầu vào

 Bộ hẹn giờ PWM điều khiển động cơ 16bit với dead time generation và emergency stop

 SysTick Timer: có 24bit đếm lùi

 Giao tiếp ngoại vi: 9 giao tiếp

 Có tối đa 2 giao tiếp I 2 C (SMBus/PMBus)

Timer

Timer 16-bit là một mạch logic kỹ thuật số cơ bản, hoạt động bằng cách đếm lên mỗi chu kỳ đồng hồ, với khả năng đếm từ 0 đến 65535 Mỗi chu kỳ, giá trị của bộ hẹn giờ tăng thêm 1 đơn vị Tần số Fsys không trực tiếp điều khiển tốc độ đếm của Timer mà được chia nhỏ thông qua Prescaler trước khi được đưa vào bộ hẹn giờ, giúp kiểm soát chính xác tốc độ hoạt động của Timer.

Trong chế độ hẹn giờ, thanh ghi TCNT sẽ tăng thêm 1 sau mỗi chu kỳ đồng hồ với tần số xác định bởi công thức Fsys / PSC Ví dụ, nếu Fsys là 80MHz và PSC là 1:1024, thì TCNT sẽ tăng mỗi 12,8μs, dẫn đến tín hiệu ngắt xuất hiện mỗi 0,839 giây khi đếm từ 0 đến 65535 Tuy nhiên, nếu cần tín hiệu ngắt mỗi 1 giây, ta có thể sử dụng Preload Register để thiết lập giá trị bắt đầu của bộ đếm, cho phép Timer đếm từ một giá trị tùy chọn đến khi tràn Nhờ đó, có thể tùy chỉnh khoảng thời gian ngắt chính xác theo yêu cầu.

3.2 Các chế độ hoạt động của Timer trong STM32

Timer Mode (Chế độ hẹn giờ)

Trong chế độ hẹn giờ, Timer hoạt động dựa trên xung nhịp từ nguồn dao động nội, cho phép xác định trước số lượng xung clock và tính toán chính xác thời gian tràn Thời gian này được kiểm soát thông qua thanh ghi tải trước, giúp thiết lập khoảng thời gian mong muốn Khi Timer tràn, nó sẽ kích hoạt một ngắt để thông báo cho CPU biết rằng khoảng thời gian đã định đã kết thúc.

Phương thức hoạt động này được áp dụng phổ biến nhằm thực hiện các thao tác định kỳ theo khoảng thời gian xác định, giúp đảm bảo tính đồng bộ giữa các nhiệm vụ và sự kiện trong hệ thống Ngoài ra, nó còn có khả năng thay thế các cơ chế trì hoãn truyền thống, từ đó cải thiện khả năng phản ứng của hệ thống trong nhiều tình huống khác nhau.

Chế độ đếm (Counter Mode) trong Timer sử dụng xung clock từ nguồn dao động bên ngoài để thực hiện việc đếm lên hoặc đếm xuống dựa trên sườn âm hoặc sườn dương của tín hiệu dao động Đây là chế độ lý tưởng cho các ứng dụng đếm kỹ thuật số mà không cần phải xử lý tín hiệu đầu vào qua GPIO, không cần đọc định kỳ hoặc gây gián đoạn CPU, đặc biệt khi Timer được kết nối với chân EXTI để tối ưu hóa hiệu suất hệ thống.

Việc theo dõi sự thay đổi giá trị truy cập theo từng khoảng thời gian giúp bạn xác định chính xác số lượng xung đã xảy ra và tần số hoạt động của hệ thống Đây là phương pháp hiệu quả để phân tích dữ liệu thời gian thực, tối ưu hóa hiệu suất và nâng cao độ chính xác trong việc giám sát các biến động kỹ thuật.

Chế độ PWM (Pulse Width Modulation) sử dụng Timer với nguồn clock nội để tạo ra tín hiệu kỹ thuật số trên chân đầu ra, gọi là tín hiệu PWM Timer hoạt động bằng cách so sánh giá trị của thanh ghi đếm với thanh ghi so sánh đầu ra (OCR), từ đó điều chỉnh độ rộng xung của tín hiệu, giúp kiểm soát chính xác các thiết bị như động cơ hoặc đèn LED trong các ứng dụng nhúng.

Chế độ PWM của Timer cho phép tạo ra tín hiệu PWM với tần số tùy chọn do người dùng thiết lập, đồng thời chu kỳ nhiệm vụ được điều khiển thông qua các thanh ghi lập trình Độ phân giải của tín hiệu PWM phụ thuộc vào tần số FPWM mong muốn và nhiều yếu tố kỹ thuật khác, sẽ được trình bày chi tiết trong các hướng dẫn chuyên sâu về cách tạo PWM hiệu quả.

Chế độ PWM nâng cao cho phép kiểm soát linh hoạt nhiều thông số kỹ thuật, đồng thời tích hợp thêm các mạch phần cứng chuyên dụng nhằm hỗ trợ các tính năng mở rộng trong quá trình tạo tín hiệu PWM Việc sử dụng chế độ này giúp tối ưu hóa hiệu suất hệ thống, tăng độ chính xác và độ ổn định của tín hiệu, đáp ứng tốt hơn các yêu cầu kỹ thuật trong các ứng dụng công nghiệp và điện tử hiện đại.

Khả năng tạo ra tín hiệu PWM bổ sung thường giống như PWM trên kênh chính nhưng đảo ngược một cách hợp lý (phần cao trở nên thấp và ngược lại).

Việc tiêm băng tần thời gian chết vào tín hiệu PWM trong các ứng dụng điều khiển động cơ giúp ngăn chặn hiện tượng dòng điện bắn qua do sự chồng chéo của tín hiệu PWM, từ đó nâng cao hiệu suất hoạt động và độ bền của hệ thống truyền động.

Khả năng thực hiện tắt tự động cho tín hiệu PWM, nó còn được gọi là

"phanh tự động" là một tính năng quan trọng cho các ứng dụng quan trọng về an toàn.

Và khả năng điều chỉnh pha tín hiệu PWM, và nhiều hơn nữa! Tất cả điều này được gọi là kiểm soát PWM tiên tiến.

Ví dụ dưới đây minh họa cho các kênh điều chế độ rộng xung (PWM) với đầu ra dạng sóng bổ sung, trong đó có tích hợp băng tần chết nhằm cải thiện hiệu suất chuyển mạch và điều chỉnh độ trễ pha để tối ưu hóa độ chính xác tín hiệu Đây là một tín hiệu điều khiển tiêu biểu trong chế độ hoạt động nửa cầu, thường được sử dụng trong các ứng dụng điện tử công suất cao.

Trong chế độ so sánh đầu ra, bộ định thời (timer) có thể điều khiển dạng sóng đầu ra hoặc xác định thời điểm một khoảng thời gian đã kết thúc Khi giá trị của thanh ghi so sánh đầu ra (OCR) trùng với giá trị của bộ đếm, chân đầu ra sẽ được gán một mức logic theo cấu hình lập trình sẵn trong chế độ so sánh Tùy theo yêu cầu ứng dụng, đầu ra có thể được thiết lập ở mức cao, thấp, chuyển trạng thái hoặc giữ nguyên Cơ chế này rất hữu ích trong việc tạo tín hiệu thời gian chính xác và điều khiển đầu ra trong nhiều ứng dụng điện tử, đặc biệt là trong các hướng dẫn kỹ thuật nâng cao.

Dưới đây là ví dụ minh họa cách sử dụng bộ đếm thời gian trong chế độ so sánh đầu ra, giúp tối ưu hóa hiệu suất điều khiển Khi trạng thái đầu ra được thay đổi (toggled), cần đặc biệt chú ý đến giá trị trong thanh ghi OCR, cụ thể là TIM1_CCR1, để đảm bảo quá trình so sánh diễn ra chính xác và ổn định.

Chế độ một xung (OPM) là một dạng hoạt động đặc biệt trong các chế độ điều khiển tín hiệu, cho phép bộ đếm khởi động khi nhận kích thích và tạo ra một xung có độ dài được lập trình sau một khoảng trễ xác định Quá trình khởi động bộ đếm có thể được kiểm soát thông qua bộ điều khiển chế độ nô lệ, giúp tối ưu hóa việc tạo dạng sóng trong các ứng dụng kỹ thuật số Việc tạo dạng sóng có thể thực hiện bằng chế độ so sánh đầu ra hoặc chế độ điều chế độ rộng xung (PWM), mang lại tính linh hoạt cao trong thiết kế hệ thống điều khiển.

Ngoài ra còn có các chế độ khác như: One-Pluse Mode, Input CaptureMode, Encoder Mode, Timer Gate Mode, Timer DMA Burst Mode, IRTIMInfrared Mode.

SMT32CUBEMX VÀ KEILC

Phần mềm STM32CubeMx

STM32CubeMX là phần mềm cấu hình đồ họa mạnh mẽ, hỗ trợ lập trình viên dễ dàng thiết lập vi điều khiển STM32 và bộ vi xử lý dựa trên kiến trúc Arm Cortex-M hoặc Cortex-A Công cụ này cho phép tạo mã nguồn C khởi tạo tự động hoặc một phần cây thiết bị Linux (Device Tree) thông qua quy trình từng bước, giúp tối ưu hóa thời gian phát triển và nâng cao hiệu quả lập trình hệ thống nhúng.

Quá trình phát triển ứng dụng với STM32 bắt đầu bằng việc lựa chọn vi điều khiển, bộ vi xử lý hoặc nền tảng phát triển phù hợp với yêu cầu thiết bị ngoại vi Tiếp theo, cấu hình GPU, thiết lập đồng hồ hệ thống và gán thiết bị ngoại vi cho Arm Cortex-M hoặc Cortex-A được thực hiện Các tiện ích như cấu hình DDR và điều chỉnh giúp đơn giản hóa việc khởi tạo bộ vi xử lý STM32 Đối với lõi Cortex-M, quy trình cấu hình tương tự như vi điều khiển, bao gồm thiết lập phần mềm nhúng thông qua bộ giải xung đột pinout, công cụ cài đặt cây đồng hồ, máy tính tiêu thụ điện năng và tiện ích cấu hình GPIO, USART, cùng các ngăn xếp phần mềm như USB hoặc TCP/IP STM32Cube cung cấp các gói mở rộng nâng cao, có thể tải trực tiếp từ trình quản lý gói STM32CubeMX hoặc cài đặt từ ổ đĩa địa phương Ngoài ra, STM32PackCreator hỗ trợ nhà phát triển tạo các gói mở rộng tùy chỉnh, tối ưu hóa quy trình phát triển phần mềm nhúng.

Người dùng cuối cùng tiến hành khởi tạo thế hệ phù hợp với cấu hình đã chọn, qua đó nhận được mã nguồn C dành cho Arm Cortex-M, sẵn sàng tích hợp vào các môi trường phát triển phổ biến, hoặc phần cấu trúc cây thiết bị Linux (Device Tree) cho Arm Cortex-A Công cụ STM32CubeMX, được phân phối trong bộ STM32Cube, hỗ trợ tối ưu quá trình cấu hình và khởi tạo phần mềm nhúng, giúp tăng tốc độ phát triển ứng dụng trên nền tảng vi điều khiển STM32.

STM32 cung cấp một bộ công cụ mạnh mẽ với giao diện người dùng đồ họa trực quan, hỗ trợ lựa chọn vi điều khiển và bộ vi xử lý dễ dàng Hệ thống cấu hình pinout tự động giải quyết xung đột, cùng với xác nhận động các ràng buộc tham số cho lõi Arm Cortex-M Cây đồng hồ và trình tự công suất được thiết kế tối ưu, giúp ước tính tiêu thụ năng lượng chính xác Người dùng có thể tạo dự án mã C khởi tạo tương thích với IAR Embedded Workbench, MDK-ARM và STM32CubeIDE Ngoài ra, STM32 hỗ trợ tạo cây thiết bị Linux cho lõi Arm Cortex-A, phát triển gói mở rộng với STM32PackCreator và tích hợp STM32Cube Expansion vào dự án Phần mềm có thể chạy độc lập trên Windows, Linux và macOS, tương thích với môi trường Java Runtime 64-bit.

Phần mềm KeilC uvision5

Hiện nay, trên thị trường có nhiều trình biên dịch ngôn ngữ C dành cho vi điều khiển như IAR, Keil C, được tích hợp trong các môi trường phát triển IDE (Integrated Development Environment) Các IDE này không chỉ đóng vai trò là trình soạn thảo ngôn ngữ C và assembly, mà còn hỗ trợ biên dịch mã nguồn, phát hiện và sửa lỗi thông qua chức năng debug Ngoài ra, chúng còn có khả năng chuyển đổi mã lệnh thành file hex để nạp vào vi xử lý, giúp tối ưu hóa quy trình phát triển phần mềm nhúng.

Keil C là phần mềm chuyên dụng được sử dụng rộng rãi trong lĩnh vực lập trình nhúng, cung cấp môi trường phát triển mạnh mẽ cho nhiều dòng vi xử lý như ARM, AVR, 8051, PIC Với khả năng hỗ trợ ngôn ngữ lập trình C và assembly, Keil C giúp tối ưu hóa hiệu suất và độ tương thích trong quá trình phát triển ứng dụng nhúng.

Giao diện hoạt động của Keil C

Màn hình làm việc chính

Trên màn hình làm việc của Keil C có 3 vùng chính:

Vùng 1: Vùng soạn thảo Đây là nơi ta sẽ soạn thảo chương trình Người sẽ dụng sẽ lập trình phần mềm tại đây

Vùng 2 trong giao diện phần mềm là nơi hiển thị cửa sổ Project và Function, giúp người dùng dễ dàng quản lý các tập tin thuộc dự án cũng như các chương trình con và thư viện liên quan, tối ưu hóa quy trình phát triển phần mềm một cách hiệu quả.

Vùng 3, hay còn gọi là cửa sổ Build Output, là nơi hiển thị thông tin chi tiết trong quá trình biên dịch chương trình Tại đây, các lỗi (error) và cảnh báo (warning) sẽ được thể hiện rõ ràng, giúp lập trình viên dễ dàng kiểm tra và xử lý Sau khi tiến hành debug, nếu không phát sinh lỗi, chương trình sẽ được biên dịch thành công và thông báo kết quả sẽ xuất hiện tại cửa sổ này.

Sau khi hoàn tất việc soạn thảo chương trình, người dùng có thể tiến hành biên dịch bằng cách truy cập menu Project > Build Target, nhấn nút Build trên thanh công cụ hoặc sử dụng phím tắt F7 Nút Build thường được hiển thị nổi bật để dễ nhận biết, giúp quá trình biên dịch diễn ra nhanh chóng và hiệu quả.

Công dụng của nút Build là biên dịch những đoạn chương trình được thay đổi xem chúng có lỗi hay không.

Ngoài nút Build, nút Rebuild được sử dụng để biên dịch toàn bộ chương trình, bao gồm cả thư viện được thêm vào và chương trình chính Thời gian biên dịch bằng nút Rebuild thường lâu hơn so với Build Nút Rebuild nằm trên thanh công cụ debug và được đánh dấu rõ ràng để dễ nhận biết.

Sau khi quá trình biên dịch chương trình hoàn tất, nếu không phát sinh lỗi hay cảnh báo nào, hệ thống sẽ hiển thị thông báo “0 Error(s), 0 Warning(s)” trong cửa sổ Build Output Đây là dấu hiệu cho thấy mã nguồn đã được biên dịch thành công, đảm bảo tính ổn định và sẵn sàng cho bước triển khai tiếp theo.

Trong quá trình phát triển một chương trình, sẽ có hai loại lỗi (Error) có thể xảy ra:

Lỗi cú pháp (Syntax error) là những sai sót trong cấu trúc câu lệnh lập trình, chẳng hạn như thiếu tham số hoặc sử dụng sai từ khóa Những lỗi này thường được trình biên dịch phát hiện tự động trong quá trình biên dịch mã nguồn, giúp lập trình viên nhanh chóng xác định và sửa chữa để đảm bảo chương trình hoạt động chính xác.

Lỗi logic trong lập trình là những sai sót xảy ra trong giải thuật, khiến chương trình không hoạt động đúng theo ý định ban đầu của lập trình viên Đây là loại lỗi khó phát hiện, chỉ có thể được nhận biết và sửa chữa bởi chính lập trình viên thông qua quá trình kiểm tra và phân tích Các môi trường phát triển tích hợp (IDE) không thể tự động phát hiện lỗi logic, nhưng có thể cung cấp các công cụ hỗ trợ giúp lập trình viên xác định và khắc phục lỗi hiệu quả hơn.

Keil C không chỉ là một công cụ mạnh mẽ để soạn thảo và biên dịch chương trình, mà còn cung cấp tính năng gỡ lỗi (debug) hiệu quả, giúp lập trình viên dễ dàng kiểm tra và sửa lỗi trong quá trình phát triển phần mềm Sau khi chương trình đã được biên dịch thành công, người dùng có thể kích hoạt chế độ debug thông qua nhiều cách khác nhau để bắt đầu quá trình kiểm tra và tối ưu mã nguồn.

Nhấn tổ hợp phím tắt Ctrl + F5.

Warning trong lập trình không phải là lỗi (error), do đó chương trình vẫn có thể chạy bình thường dù xuất hiện nhiều cảnh báo Tuy nhiên, các warning đóng vai trò quan trọng trong việc cảnh báo những đoạn mã có thể tiềm ẩn lỗi hoặc không cần thiết, chẳng hạn như khai báo biến nhưng không sử dụng Việc chú ý và xử lý các warning giúp cải thiện chất lượng mã nguồn và đảm bảo hiệu suất hoạt động ổn định của phần mềm.

Để kích hoạt chức năng Debug trong phần mềm, người dùng cần mở menu Debug và chọn Start/Stop Debug Session, sau đó nhấn vào nút được khoanh vùng như hình minh họa Khi muốn tắt chế độ Debug, chỉ cần thực hiện lại thao tác này một lần nữa.

Sau khi kích hoạt chế độ Debug trong phần mềm Keil C, giao diện làm việc sẽ hiển thị các cửa sổ hỗ trợ như hình minh họa Trong trường hợp một số cửa sổ không xuất hiện, người dùng có thể truy cập menu View để bật các cửa sổ cần thiết, đảm bảo quá trình lập trình và kiểm tra mã nguồn diễn ra hiệu quả.

Trong cửa sổ này, có 4 vùng chính như hình bên dưới:

Vùng 1: Cửa sổ thể hiện các thanh ghi của vi điều khiển

Vùng 2: Cửa sổ lệnh soạn thảo, chứa chương trình đang được debug

Vùng 3 trong phần mềm lập trình cung cấp cửa sổ Watches, cho phép người dùng dễ dàng theo dõi giá trị của các biến trong chương trình Để kiểm tra giá trị của một biến cụ thể, chỉ cần chọn cửa sổ Watches, nhấn phím F2 và nhập tên biến cần theo dõi Ngay sau đó, cửa sổ sẽ hiển thị tên biến cùng với giá trị hiện tại, giúp lập trình viên kiểm soát và phân tích dữ liệu hiệu quả hơn.

Vùng 4 - Cửa sổ Disassembly trong phần mềm Keil C giúp người dùng hiểu rõ cách một lệnh C được chuyển đổi sang mã hợp ngữ Để kích hoạt tính năng này, bạn chỉ cần truy cập vào menu View và chọn Disassembly Đây là công cụ hữu ích trong quá trình phân tích và tối ưu hóa mã nguồn, đặc biệt quan trọng đối với các lập trình viên nhúng.

Bên cạnh những chức năng trên Keil C còn hỗ trợ nhiều chức năng khác cho người sử dụng chẳng hạn như.

XÂY DỰNG CHƯƠNG TRÌNH

Lưu đồ thuật toán

Xây dựng chương trình trên phần mềm STM32CubeMX

Bước 1: Khởi động phần mềm STM32CubeMX Trong phần giao diện chính của phần mềm, chọn FILE, NEW PROJECT Tại cửa sổ mới, chọn vi điều khiển cần lập trình Chọn vi điều khiển STM32F103C8

Bước 2: Cấu hình cho vi điều khiển STM32F103C8

Cấu hình SYS cơ bản

Cấu hình RCC cơ bản

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

Sau khi hoàn tất việc cài đặt các cấu hình cơ bản, người dùng cần đặt tên dự án và điều chỉnh một số thông số trong mục Project Manager Tiếp theo, chọn chức năng Generate Code để hệ thống tự động biên dịch và chuyển sang môi trường phát triển KeilC uVision5, giúp tối ưu hóa quy trình lập trình và tăng hiệu suất làm việc.

Xây dựng chương trình trên phần mềm KeilC uvision 5

Bước 1: Trong giao diện chính của phần mềm, tìm chọn file main.c, đây là file được dùng để viết chương trình code

Bước 2: Trong cửa sổ Option for Target, chọn mục Output, tích chuột trái chọn muc Create HEX File tạo file hex sau khi biên dịch chương trình.

Bước 3: Thực hiện viết chương trình code và biên dịch.

Chương trình Code

Khai báo các chân GPIO và chương trình con

 START: chân GPIO được sử dụng để nhận tín hiệu nút bấm Start

 STOP: chân GPIO được sử dụng để nhận tín hiệu nút bấm Stop

 RESET: chân GPIO được sử dụng để nhận tín hiệu nút bấm Start

 LED1, LED2, LED3, LED4, DP: chân GPIO kết nối lần lượt với các chân

 HIGH: điện áp tích cực cao.

 LOW: điện áp tích cực thấp.

 Delay: Hàm con thực hiện chương trình trễ.

 Display: Hàm con thực hiện chương trình hiển thị trên 7SEG.

 Start: Hàm con thực hiện chương trình ở chế độ Start.

 Stop: Hàm con thực hiện chương trình ở chế độ Stop.

 Reset: Hàm con thực hiện chương trình ở chế độ Reset

 MX_TIM2_Init: Chương trình khởi tạo Timer2.

 MX_GPIO_Init: Chương trình khởi tạo GPIO.

 SystemClock_Config: Chương trình cấu hình các xung clock hệ thống.

Thiết lập cấu hình clock hệ thống

Chương trình SystemClock_Config thực hiện cấu hình các xung clock của hệ thống theo các cài đặt được thiết lập trên STM32cubeMX ở phần trước.

Thiết lập cấu hình GPIO

Trong phần này, chúng ta tiến hành cấu hình các thông số thiết yếu cho chân GPIO của vi điều khiển, bao gồm lựa chọn chân PIN, thiết lập chế độ hoạt động và điều chỉnh tốc độ truyền tín hiệu Việc cài đặt chính xác các thông số này giúp đảm bảo hiệu suất tối ưu và độ ổn định trong quá trình giao tiếp giữa vi điều khiển và các thiết bị ngoại vi.

 HAL_RCC_GPIOx_CLK_ENABLE: cấp xung hoạt động cho các Port x trong GPIO.

GPIO_InitStruct.Pin: chọn chân PIN được sử dụng.

GPIO_InitStruct.Mode: chọn chế độ hoạt động của chân PIN.

GPIO_InitStruc.Speed: cấu hình tốc độ hoạt động của chân PIN.

Thiết lập cấu hình Timer

Khởi tạo Timer trong CubeMx

Timer sử dụng Timer 2 Cấu hình như sau:

Bộ chia: 7200-1 do prescale luôn được cộng thêm 1 với bất kì số nào được đưa vào Với Fmaster là 72MHz thì Count Step sẽ là 10000Hz, tương ứng 0.1 ms

Bộ nạp lại ARR: 0xFFFF.

Chế độ đếm: đếm lên.

Hàm delay trong lập trình nhúng hoạt động bằng cách đặt giá trị counter về 0 mỗi khi được gọi Sau đó, với mỗi xung nhịp từ bộ Timer, counter sẽ tăng lên một đơn vị Quá trình này diễn ra trong một vòng lặp vô tận cho đến khi counter đạt đến giá trị tương ứng với thời gian delay mong muốn (tính bằng mili giây) Khi đó, chương trình sẽ thoát khỏi vòng lặp, hoàn tất quá trình delay với thời gian thực hiện được tính bằng công thức: Count Step x ms.

Các chương trình con

 Khi nút bấm Start được nhấn thả, thực hiện Delay 5ms để trạng thái nút bấm không ảnh hưởng tới các chương trình kế tế

 Trong suốt quá trình nút bấm Stop và Reset không được nhấn thả, đồng hồ sẽ thực hiện đếm tiến và LED Start sáng

 Khi nút bấm Stop, Reset được kích hoạt, thoát khỏi Start Mode và chuyển sang Stop Mode hoặc Reset Mode tương ứng

 Tương tự như Start Mode, trước tiên cũng thực hiện Delay để tránh nhiễu.

 Trong suốt quá trình diễn ra Stop Mode, đồng hồ chỉ hiển thị một giá trị không đổi, LED Stop sáng.

 Khi nút bấm Reset được kích hoạt, trả về Reset Mode.Khi Start Mode được kích hoạt, thời gian + 1 và trả về Start Mode.

 Delay 5ms để chống nhiễu.

 Trong suốt quá trình Reset Mode, đồng hồ chỉ hiển thị thời gian = 0 LED Reset sáng.

 Khi Start Mode được kích hoạt, thời gian + 1 và trả về Start Mode

 HAL_TIM_SET_COUNTER (&htim2, 0): Mỗi lần gọi hàm delay, chương trình sẽ trả counter về giá trị 0

Trong quá trình thực hiện hàm delay bằng Timer, mỗi xung nhịp của bộ định thời (Timer) sẽ làm giá trị counter tăng lên một đơn vị Vòng lặp sẽ tiếp tục chạy liên tục cho đến khi giá trị counter đạt đến ngưỡng ms được thiết lập, lúc đó chương trình mới thoát khỏi vòng lặp Điều này đồng nghĩa với việc thời gian delay thực tế sẽ bằng số bước đếm (Count Step) nhân với giá trị ms, đảm bảo độ chính xác cao trong việc kiểm soát thời gian thực thi của chương trình.

 Chia biến đếm time sang thời gian theo giây và phút.

Để hiển thị thời gian lên màn hình 7SEG, chương trình sử dụng vòng lặp for kết hợp với phương pháp quét LED nhằm đảm bảo hiệu quả và độ chính xác cao Đồng thời, điện áp trên các PIN được chọn được nâng lên mức ‘1’ để kích hoạt và làm sáng các đèn hiển thị chế độ, giúp người dùng dễ dàng nhận biết trạng thái hoạt động của hệ thống.

 Sử dụng câu lệnh if để thực hiện thoát khỏi vòng lặp khi nút bấm được nhấn thả Tăng đáp ứng thời gian thực

Trong quá trình tính toán thời gian hiển thị, mỗi vòng lặp for được thực hiện 50 lần, kết hợp với 4 câu lệnh Delay(50) tương ứng với độ trễ 5ms mỗi lệnh Tổng thời gian hiển thị thực tế của chương trình Display là 5ms × 4 × 50 = 1000ms, tức 1 giây, hoàn toàn đáp ứng yêu cầu thời gian thực của bài toán Tần số quét của 7SEG trong quá trình quét LED đạt 50 lần/giây, đảm bảo chất lượng hiển thị rõ nét và ổn định.

Chương trình Main

Chương trình chính thực hiện 2 nhiệm vụ duy nhất:

 Nếu nút nhấn Start được nhấn thả: truy cập vào Start Mode.

 Nếu không thì: nhấp nháy đèn LED với chu kì 10ms để test độ chính xác về thời gian thực thi chương trình.

Ngày đăng: 19/11/2022, 21:07

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w