1. Trang chủ
  2. » Giáo Dục - Đào Tạo

SỬ DỤNG USART để KIỂM TRA KÝ TỰ NHẬP VÀO VÀ ĐIỀU KHIỂN LED

22 38 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

Định dạng
Số trang 22
Dung lượng 825,7 KB

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

Nội dung

Hình 1.1 Sơ đồ truyền nhận nối tiếp Truyền nhận nối tiếp là quá trình gửi dữ liệu tuần tự theo từng bit, qua một kênhtruyền thông communication channel hoặc bus máy tính.. Điều này để kh

Trang 1

BỘ THÔNG TIN VÀ TRUYỀN THÔNG

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG

BÀI TẬP LỚN MÔN KỸ THUẬT VI XỬ LÝ

ĐỀ TÀI 15: SỬ DỤNG USART ĐỂ KIỂM TRA KÝ TỰ NHẬP

VÀO VÀ ĐIỀU KHIỂN LED

Thái Bình – 11/2021

TÊN NHÓM

THÀNH VIÊN NHÓM

15 NGUYỄN MẠNH VIỆT – B19DCVT433

Trang 2

Phân chia công việc:

Nguyễn Mạnh Việt : Phụ trách tìm tài liệu, viết báo cáo, phụ trách code và môphỏng trên proteus

Trang 3

MỤC LỤC

LỜI NÓI ĐẦU……….………CHƯƠNG I Tìm hiểu chung về giao tiếp USART……….………

1.1 USART là gì? 1.2 Các thông số quan trọng khi giao tiếp USART……….………….….1.3 USART với STM32……….…………

Trang 4

CHƯƠNG III Mô phỏng trênproteus………

Trang 5

LỜI NÓI ĐẦU

Trong thời kì công nghệ 4.0, cùng với sự đi lên của đời sống xã hội, các đồdùng điện tử đang là một phần không thể thiếu trong đời sống hiện đại từ máy vitính, đồng hồ, đèn led,… Chúng xuất hiện mọi nơi bên cạnh chúng ra

Mặc dù ai cũng được tiếp cận thường xuyên, ai cũng biết cách sử dụngnhưng không phải ai cũng biết được cách vận hành tưởng như rất đơn giản củachúng Nhằm giải quyết vấn đề đó và đem lại kỹ năng nhất định cho sinh viên vềviệc làm quen và giao tiếp với các linh kiện điện tử, Học viện Công nghệ Bưuchính Viễn thông đã đem bộ môn Kỹ thuật Vi xử lý vào quá trình dạy và họccủa sinh viên Học viện, đáp ứng nhu cầu công việc trong tương lai

Kỹ thuật vi xử lý là môn học thú vị và bổ ích trong chương trình giảng dạycủa Học viện Công nghệ Bưu chính Viễn thông Nó giúp chúng em có nhữngkiến thức chuyên ngành nhất định, giúp chúng em tự tin, vững bước hơn khi rakhỏi mái trường! Tuy nhiên, vì số đơn vị học trình quá ít cùng thời gian học tậphoàn toàn là hình thức trực tuyến nên mặc dù đã nỗ lực và cố gắng nhưng chắcchắn trình độ hiểu biết và kỹ năng về môn học này của em vẫn còn nhiều hạnchế Vì vậy, bài Báo cáo của chúng em khó tránh khỏi những thiếu xót và nhiềuchỗ chưa chuẩn xác, kính mong giảng viên bộ môn xem xét và góp ý giúp bàiBáo cáo của em được hoàn thiện hơn

Em xin chân thành cám ơn!

Sinh viênNguyễn Mạnh Việt

Trang 6

CHƯƠNG I TÌM HIỂU CHUNG VỀ GIAO TIẾP USART 1.1 USART là gì?

USART (Universal Synchronous/ Asynchronous Receiver/ Transmitter) là bộtruyền nhận nối tiếp đồng bộ hoặc cận đồng bộ Được dùng trong việc giao tiếp giữahai thiết bị Đây là giao tiếp đơn giản nhưng phổ biến, là một vi mạch có sẵn trong viđiều khiển dùng để giao tiếp với các thiết bị ngoại vi

1.1.1 Truyền nhận nối tiếp là gì?

Hình 1.1 Sơ đồ truyền nhận nối tiếp

Truyền nhận nối tiếp là quá trình gửi dữ liệu tuần tự theo từng bit, qua một kênhtruyền thông (communication channel) hoặc bus máy tính Với truyền nhận nối tiếp,mỗi xung clock ta gửi được 1 bit dữ liệu đi

1.1.2 Đồng bộ và cận đồng bộ

2 Đồng bộ

Khái niệm “đồng bộ” ám chỉ sự báo trước trong quá trình truyền Giả sử có hai

thiết bị (T1 và T2) được kết nối với nhau bởi một đường dữ liệu (data) và một đườngtruyền xung nhịp (clock) Cứ mỗi lần T1 muốn gửi 1 bit dữ liệu, T1 điều khiển đườngxung nhịp từ mức thấp lên mức cao để báo cho T2 sẵn sàng để nhận một bit này

Bằng cách “báo trước” này, tất cả các bit dữ liệu có thể truyền nhận dễ dàng và ít có

sai lệch trong quá trình truyền Tuy nhiên cách này đòi hỏi ít nhất 2 đường truyền chomột quá trình (send or receiver)

Trang 7

Hình 1.2 Sơ đồ minh hoạ truyền thông nối tiếp đồng bộ

b Cận đồng bộ

Khác với truyền thông đồng bộ, truyền thông cận đồng bộ chỉ sử dụng duy nhấtmột đường truyền dữ liệu mà không cần xung nhịp để báo trước Tất cả dữ liệu được

chuẩn hoá thành một khung dữ liệu Giả sử T1 và T2 cũng đang giao tiếp với nhau,

giữa chúng thoả thuận rằng cứ mỗi khoảng thời gian 1ms thì có một bit dữ liệu đượctruyền đi Như vậy T2 chỉ cần đọc dữ liệu một lần mỗi 1ms và sau đó kết hợp chúnglại Nhờ đó truyền thông không đồng bộ sử dụng ít tài nguyên hơn

Khung truyền dữ liệu được chuẩn hoá với start bit, data bit, stop bit Điều này

để khi giao tiếp, thiết bị nhận dữ liệu có thể biết được dữ liệu bắt đầu từ đâu và kếtthúc ở vị trí nào Từ đó kết hợp lại chính xác để không xảy ra sai lệch dữ liệu

Hình 1.3 Sơ đồ minh hoạ truyền thông nối tiếp cận đồng bộ

Trang 8

1.2 Các thông số quan trọng khi giao tiếp USART

- Baud rate: Để việc truyền nhận dữ liệu không đồng bộ xảy ra thành công

thì các thiết bị tham gia phải thống nhất về khoảng thời gian dành cho 1bit truyền đi Hay nói cách khác, tốc độ truyền phải được cài đặt như nhautrước, tốc độ này gọi là tốc độ Baud Theo định nghĩa, tốc độ Baud là sốbit truyền trong 1 giây

- Frame (khung truyền): Do truyền thông nối tiếp mà nhất là không đồng bộ

rất dễ xảy ra sai lệch dữ liệu cho nên quá trình truyền thông tin theo kiểunày phải tuân theo một quy cách nhất định Bên cạnh tốc độ Baud, khungtruyền là một yếu tố rất quan trọng tạo nên sự thành công khi truyền vànhận Khung truyền bao gồm các quy định về số bit trong một lần truyền(data bits), các bit báo hiệu bắt đầu và kết thúc của một dữ liệu (start bit,stop bit), các bit kiểm tra,…

- Start bit: Là bit đầu tiên được truyền đi trong một khung truyền, bit này có

chức năng báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp đượctruyền tới

- Data bit: Là thông tin mà chúng ta cần gửi và nhận.

- Parity bit: Là bit kiểm tra dữ liệu được truyền có đúng không bằng cách

đếm các số 1 trong dãy nhị phân của dữ liệu được truyền đi trong khungtruyền Nếu là số chẵn thì Parity chẵn được bật, ngược lại Parity lẻ đượcbật Đây không phải là bit bắt buộc và không nhất thiết phải xuất hiệntrong khung truyền

- Stop bit: Là một hoặc các bit báo hiệu cho thiết bị nhận rằng một gói dữ

liệu đã được gửi xong

Khung truyền phổ biến nhất đó là : Start bit – 8 Data bit – 1 Stop bit

Trang 9

1.3 USART với STM32

Hình 1.4 Chức năng của các chân Pin trong STM32

STM32 thiết kế những cổng dùng cho một số hoạt động giao tiếp nhất định Để giao tiếp USART, ta nối chân TX và RX của USART với các chân Pin thích hợp trên STM 32

Trang 10

CHƯƠNG II LÀM VIỆC VỚI USART QUA THANH GHI 2.1 Các thanh ghi quan trọng

2.1.1 Thanh ghi SR (Status Register)

Hình 2.1 Sơ đồ thanh ghi SRThanh ghi SR là thanh ghi trạng thái, các bit cần chú ý:

TXE : Báo hiệu thanh ghi dữ liệu trống.

Bit này cho biết dữ liệu của bộ đệm TDR đã được đưa vào Transmit ShiftRegister và bắt đầu truyền đi Bit TXE có thể tạo ra tín hiệu ngắt nếu bit TXEIE đượcset Bit này luôn luôn được reset bằng cách ghi vào thanh ghi dữ liệu

0: TDR chưa được làm trống

1: TDR được làm trống và dữ liệu tiếp theo có thể được ghi vào thanhghi USART_DR mà không làm ảnh hưởng đến dữ liệu trước

TC : Báo hiệu quá trình truyền hoàn tất.

Bit TC được set bởi phần cứng và được set lên khi MCU đã hoàn thành xongmột quá trình truyền dữ liệu và bit TXE được set Bit này có thể tạo ra tín hiệu ngắtnếu bit TCIE của thanh ghi USART_CR1 được set Bit này có thể được reset bằngcách ghi 0 vào nó hoặc bằng hoạt động đọc tại thanh ghi USART_SR sau đó ghi giátrị vào USART_DR

0: Quá trình truyền chưa hoàn tất

1: Quá trình truyền đã hoàn thành

RXNE: Báo hiệu dữ liệu đọc không trống.

Bit này được thiết lập bởi phần cứng khi nội dung của thanh ghi dịch chuyểnRDR đã được chuyển đến thanh ghi USART_DR Một ngắt được tạo ra nếu RXNEIE

= 1 trong thanh ghi USART_CR1 Nó được xóa bằng cách đọc ở USART_DR CờRXNE cũng có thể được xóa bằng cách viết số 0 vào nó

0: Không nhận được dữ liệu

Trang 11

FE: Kiểm tra lỗi khung truyền

0: Không phát hiện lỗi khung

1: Lỗi khung hoặc ký tự ngắt được phát hiện

2.1.2 Thanh ghi DR (Data Register)

Hình 2.2 Sơ đồ thanh ghi DRThanh ghi DR là thanh ghi dữ liệu, nó chứa các bit được truyền đi hoặc nhận về.Thực tế thanh ghi này gồm hai thanh ghi TDR và RDR Thanh ghi TDR có chức năngghi, dùng trong bộ truyền Thanh ghi RDR có chức năng đọc dữ liệu, dùng trong bộthu Khi lập trình ta gọi chung tên của chúng nhưng tuỳ theo trường hợp nó được đọchay ghi tới mà máy tính sẽ xử lý chính xác

2.1.3 Thanh ghi BRR (Baud rate register)

Hình 2.3 Sơ đồ thanh ghi BRR

Từ bit 15 về bit 4 là giá trị nguyên của số được truyền vào thanh ghi BRR

Từ bit 3 về bit 0 là giá trị sau dấu “.” của giá trị được truyền

Cụ thể khi giao tiếp hai thiết bị với nhau, để nhận chính xác dữ liệu được gửi đithì hai thiết bị này phải nhận và truyền tại cùng một tốc độ Tuy nhiên, giá trị tạithanh ghi BRR không phải là tốc độ Baud rate, nó chỉ được dùng để USART tínhtoán tốc độ truyền Cụ thể với công thức như sau:

Trang 12

2.1.4 Thanh ghi CR1 (Control register 1)

Hình 2.3 Sơ đồ thanh ghi CR1Thanh ghi CR1 là thanh ghi điều khiển, gồm các bit quan trọng sau:

UE: Bật USART

Khi bit này bị xóa, các bộ định mức và đầu ra USART được dừng lại và kết thúcquá trình truyền byte hiện tại để giảm tiêu thụ điện năng Bit này được thiết lập vàxóa bằng phần mềm

0: Đã tắt chức năng định mức trước USART và kết quả đầu ra

1: USART được bật

M: Độ dài của khung dữ liệu

Bit này xác định độ dài từ

0: 1 Bit bắt đầu, 8 bit dữ liệu, n bit dừng

1: 1 Bit bắt đầu, 9 bit dữ liệu, n bit dừng

Trang 13

Bit này cho phép Transmitter hoạt động.0: Tắt Transmitter.

1: Bật Transmitter

RE: Kích hoạt Receiver

Bit này cho phép bộ nhận tín hiệu hoạt động0: Tắt Receiver

1: Bật Receiver

Trang 14

2.2 Quá trình truyền nhận dữ liệu

Để giao tiếp 2 chiều USART, MCU cần phải kết nối với thiết bị bên ngoài ítnhất 2 chân là chân TX (chân truyền dữ liệu ra bên ngoài) và chân RX (chân nhận dữliệu từ bên ngoài) Chân TX của MCU sẽ được nối với chân RX của thiết bị ngoài vàngược lại chân RX của MCU sẽ được nối với chân TX của thiết bị ngoài ChânSW_RX được dùng để nhận dữ liệu ở chế độ single-wire

Hình 2.4 Sơ đồ khối ghi/đọc dữ liệu trong USART

Về quá trình truyền USART

Một byte dữ liệu từ đường bus sẽ được lưu trong bộ đệm TDR Khi bit cho phéptruyền (TE) được set, dữ liệu sẽ được đưa xuống thanh ghi Transmit Shift Register vàbit có trọng số thấp nhất (LSB) sẽ được gửi đi đầu tiên trên chân TX MCU Sau khitruyền đi một byte, thanh ghi TDR sẽ được làm trống và byte tiếp theo có thể đượctruyền đi Ở chế độ này dữ liệu của thanh ghi USART_DR chính là dữ liệu của bộđệm TDR

Trang 15

Về quá trình nhận USART

Khi có dữ liệu được truyền từ thiết bị bên ngoài, bit có trọng số thấp nhất củaframe data đầu tiên được truyền qua chân RX của MCU và lưu vào thanh ghi ReceiveShift Register Khi một byte đã nhận xong, bit RXNE (Read data register not empty)set lên 1, dữ liệu chứa trong thanh ghi Receive Shift Register được đưa đến bộ đệmRDR, dữ liệu lúc này đã sẵn sàng để đọc Nếu bit RXNE và bit RXNEIE (RXNEinterrupt enable) cùng set lên 1 thì một tín hiệu ngắt sẽ được sinh ra Bit RXNE đượcreset khi có hoạt động đọc dữ liệu trên thanh ghi USART_DR hoặc khi ghi bit 0 vàonó

Trang 16

2.3 Các bước cấu hình cho USART

B1 Cấp clock cho port sử dụng giao tiếp USART

B2 Chọn chân và chế độ mode cho từng chân của USART

B3 Bật USART bằng cách set bit UE trong thanh ghi USART_CR1 lên 1

B4 Lập trình bit M trong USART_CR1 để xác định độ dài từ

B5 Lập trình số lượng bit dừng trong USART_CR2

B6 Chọn kích hoạt DMA (DMAT) trong USART_CR3 nếu Giao tiếp nhiều bộ đệm được thực hiện Định cấu hình thanh ghi DMA như được giải thích trong giao tiếp đa bộ đệm

B7 Chọn tốc độ truyền mong muốn bằng cách sử dụng thanh ghi

USART_BRR

B8 Set bit TE và RE trong USART_CR1 lên 1 để cho phép thu và nhận tín hiệu

từ thiết bị bên ngoài

B9 Cấu hình cho ngắt bằng cách setbit RXNEIE và TXEIE, USART có thể ngắtmỗi khi có hoạt động truyền hoặc nhận tín hiệu

Trang 17

CHƯƠNG III MÔ PHỎNG TRÊN PROTEUS

1 Vấn đề cần giải quyết:

Sử dụng USART để hiện ký tự lên màn hình Nếu ký tự được gửi lên là

“ONLED” thì bật led PC13 Nếu là “OFFLED” thì tắt led PC13

2 Các bước thực hiện:

Dựa theo đề bài, ta cần làm việc với USART và đèn led PC13

Đầu tiên ta cấu hình cho led PC13:

B1: Cấp Clock cho port C

B2: Chân PC13 nằm ở phần cao nên ta cấp chân PC13 bằng cách kéo vị trí thứ 6trong thanh ghi CRH về mức 0

Chọn mode General output push-pull và Output mode, max speed 50 MHz

Thứ hai, ta cần cấu hình cho USART

Trang 18

Cụ thể trong bài toán mà chúng em làm, chúng em sử dụng giao tiếp qua

USART1 Như trên hình, chúng ta sử dụng chân PA9 (USART1_TX) và chân PA10 (USART1_RX) Nối chân TX của STM32 với chân RX của thiết vị và ngược lại:

Code như sau:

Trong bài này ta sử dụng ngắt nên sẽ set bit AFIO tại thanh ghi RCC, cùng với

nó là bit USART, bit GPIO để giao tiếp USART

Cấp chân PA9, PA10, chọn mode cho từng chân

Tại chân PA9, chế độ mode là alternate function push-pull Tại chân này ta truyền vào mã 10-11 = 0xB

Tại chân PA10, chế độ mode là Input-floating (Cấu hình I/O là ngõ vào và để nổi) Tại chân này ta truyền vào mã 01-00 = 0x4

Các bước tiếp theo như sau ( dựa vào mục 2.3)

B3 Bật USART bằng cách set bit UE trong thanh 1

Trang 19

định độ dài từ  USART_CR1_M = 0B5 Lập trình số lượng bit dừng trong

USART_CR2

1 stop-bit

 USART_CR2_STOP = 00B6 Chọn kích hoạt DMA (DMAT) trong

USART_CR3 nếu Giao tiếp nhiều bộ đệm được

thực hiện Định cấu hình thanh ghi DMA như

được giải thích trong giao tiếp đa bộ đệm

Không sử dụng

B7 Chọn tốc độ truyền mong muốn bằng cách sử

dụng thanh ghi USART_BRR

BRR = 72MHz/9600

= 7500 = 0x1D4CB8 Set bit TE và RE trong USART_CR1 lên 1 để

cho phép thu và nhận tín hiệu từ thiết bị bên ngoài

USART_CR1_TE = 1USART_CR1_RE =1B9 Cấu hình cho ngắt bằng cách setbit RXNEIE

và TXEIE, USART có thể ngắt mỗi khi có hoạt

động truyền hoặc nhận tín hiệu

Set RXNEIE cho phép ngắt nhận.USART_CR1_RXNEIE = 1

Ta có code sau:

NVIC => ISER[1] là xử lý ngắt với USART1

Trang 20

Tiếp theo ta sẽ khai báo các biến nhận kí tự từ thiết bị ngoại vi và kiểm tra các kí

tự đó:

Data_in là chuỗi các kí tự nhập từ bàn phím Ta sẽ kiểm tra chúng với chuỗi các

kí tự của lệnh onled và offled xem có trùng nhau không Biến sp là con trỏ của data_in

Trang 21

Nếu chuỗi data_in trùng với lệnh ONLED hoặc OFFLED ta sẽ trả về giá trị 1,

nếu không phải sẽ trả về giá trị 0

Như vậy, điều cuối cùng mà ta cần thực hiện là xem kí tự nhận vào là gì và đưa

ra hướng giải quyết cho lệnh đó mà thôi

Lúc này câu hỏi đặt ra là làm thế nào để biết ta đã nhận xong một lệnh? Ở đây

em quy định với người điều khiển rằng khi nhập xong 1 lệnh gồm chuỗi các kí tự, họ

phải ấn Enter để “báo” cho máy biết rằng lệnh đã được nhập xong và ra lệnh cho

ảnh hưởng gì phải không? Có ảnh hưởng chính là câu trả lời cho câu hỏi này Ta xét

Trang 22

Chính xác, cả hai lệnh này đều không tác động lên led PC13, vậy tại sao led

PC13 lại bị tắt ở lệnh thứ 2? Nguyên nhân do mảng data_in chưa được làm sạch Kí

tự “O” và “F” tại lệnh thứ hai sẽ ghi đè lên “O” và “N” ở lệnh trước đó Nhưng các kí

tự “FLED” vẫn còn ở đó, nó kết hợp với hai kí tự “O”, “N” vừa nhận được để tạo rachuỗi “OFFLED” Và dẫn đến kết quả tắt led PC13

Vậy nên ta cần làm sạch chuỗi data_in trước khi bắt đầu nhận một lệnh tiếp

theo Nhưng chỉ cần clear từ data_in[0] đến data_in[6] thôi bởi vì lệnh thực thi dài nhất là OFFLED chỉ có 6 kí tự (Kết thúc ở data_in[5] mà thôi).

3 Thiết kế mạch trên Proteus

Ngày đăng: 09/12/2021, 19:51

TỪ KHÓA LIÊN QUAN

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