BÀI 11: SPI VỚI STM32F1 - Chia Sẻ Các Vấn đề điện Tử
Có thể bạn quan tâm
BÀI 11: SPI VỚI STM32F1
SPI VỚI STM32F1 BÀI 11: SPI VỚI STM32F1.- Một số khái niệm về lý thuyết.
- SCK: chân này là chân clock, duy trì xung nhịp cho mọi hoạt động truyền nhận. Nhờ có chân này nên SPI là chuẩn giao tiếp đồng bộ và data trong quá trình truyền nhận cũng ít sai sót hơn nhờ sự đồng bộ này. Xung nhịp chỉ do thiết bị Master phát ra.
- MOSI(Master output slave input) : khi thiết bị được cấu hình là Master thì nó sẽ là chân xuất dữ liệu và khi là Slave thì sẽ là chân nhận dữ liệu.
- MISO(Master input Slave output) : khi thiết bị được cấu hình là Master thì nó sẽ là chân nhập dữ liệu và khi là Slave thì sẽ là chân xuất dữ liệu.
- CS – NSS : là chân chọn thiết bị, khi có nhiều thiết bị Slave, chân này sẽ là chân quyết định thiết bị nào sẵn sàng được giao tiếp. Ở 1 số IC nhớ, chân này sẽ là chân cho phép có được giao tiếp(enable) với IC đó hay không.
- Truyền đồng bộ full –duplex trên 3 dây chính, half – duplex, chỉ truyền, chỉ nhận.
- Cấu hình bằng phần mềm là master hay Slave.
- Khung truyền cấu hình là 8 hay 16 bit.
- Cấu hình data truyền theo kiểu MSB hoặc LSB đi trước.
- Có các cờ báo lỗi, tính năng CRC, cờ ngắt.
- Có hỗ trợ DMA(bộ truyền tốc độ cao).
- Cấu hình sử dụng thư viện chuẩn.
- Chương trình con cấu hình SPI1 làm Master:
- Chương trình con cấu hình SPI2 làm Slave.
- Chương trình con thực thi ngắt SPI2.
- Chương trình thực thi trong main.
- Một vài thanh ghi quan trọng.
- SPI_CR1 - SPI control register.
- BIDI MODE: chọn lựa chế độ sử dụng cả 2 dây MOSI và MISO hay chỉ 1 dây.
- BIDI OE: chọn lựa hướng của data là nhận hoặc truyền.
- CRCEN: cho phép tính toán CRC(quá trình kiểm tra lỗi ) xảy ra hay không.
- CRCNEXT : liên quan đến việc thiết lập truyền CRC.
- DFF: lựa chọn kiểu data là 8 bit hay 16 bit.
- RXONLY : thiết lập SPI ở chế độ chỉ cho phép nhận hoặc cả truyền và nhận.
- SSM: liên quan đến việc sử dụng phần mềm để quản lí thiết bị Slave.
- SSI : liên quan đến việc sử dụng chân CS hay không.
- LSSBFIRST : cài đặt bit đi đầu là bit cao hay bit thấp của data.
- SPE: cho phép hoặc không cho phép bộ SPI hoạt động.
- BR[2:0]: cài đặt baud rate, liên quan đến tốc độ truyền data của cổng SPI.
- MSTR : cài đặt cổng là Master hay Slave.
- CPOL, CPHA: liên quan đến việc thiết lập data dich chuyển là cạnh lên hay cạnh xuống của clock.
- SPI_SR - SPI status register.
- BSY: cờ busy flag thông báo trạng thái là SPI đang bận giao tiếp hay rảnh rỗi để truyền nhận data.
- OVR : overrun flag: thông báo là data đã được nhận hay là chưa nhận xong.
- MODF : cờ thông báo có lỗi xảy ra trong quá trình truyền hay là không.
- CRCERR: cờ thông báo CRC xảy ra lỗi hay không.
- UDR : thông báo có lỗi xảy ra ở thiết bị Slave khi mà đã có clock ở Master mà thiết bị Slave chưa cấu hình xong.
- TXE: thông báo buffer truyền rỗng hay không.
- RXE: thông báo buffer nhận rỗng hay không.
- SPI_DR – SPI data register.
- Bài tập.
- Cấu hình SPI1(Master) và truyền dữ liệu cho SPI2(Slave), khi SP2(Slave) nhận được đúng dữ liệu gửi đi từ SPI1(Master) thì đèn led ở chân PB9 sẽ sáng, dùng ngắt nhận trên cổng SPI2. Khung truyền dữ liệu là 32 byte data, tốc độ là 9Mbs/s, LSB đi trước, 2 bit 1 xung clock.
- Cấu hình SPI1(Master) và truyền dữ liệu cho SPI2(Slave), khi SPI2(Slave) nhận được dữ liệu thì gửi lại cho SPI1(Master), SPI1(Master) nhận đúng dữ liệu gửi đi thì đèn led ở chân PB9 sẽ sáng, dùng ngắt nhận trên cổng SPI2 và SPI1. Khung truyền dữ liệu là 32 byte data, tốc độ là 9Mbs/s, LSB đi trước, 2 bit 1 xung clock.
SPI(Serial Peripheral Interface ) là chuẩn giao tiếp đồng bộ 4 dây do hãng Motorola phát triển. Chuẩn giao tiếp này bao gồm 1 thiết bị Master, 1 hay nhiều thiết bị Slave. Tốc độ giao tiếp SPI cũng là khá cao nên nó được dùng nhiều trong các ứng dụng như: module SIM, module Btultooth, Module wifi, IC nhớ, thẻ nhớ, IC RFID, IC chuyển đổi ADC, đọc tín hiệu vị trí từ IC màn hình, IC dịch bit….
4 dây của chuẩn giao tiếp SPI bao gồm:
STM32f103C8T6 có 2 cổng giao tiếp SPI tốc độ tối đa lên đến 18Mbs/s với nhiều mode cấu hình. Một số tính năng chính của giao tiếp SPI trên MCU này là:
Vd: cấu hình SPI1(Master) và truyền dữ liệu cho SPI2(Slave), khi SP2(Slave) nhận được đúng dữ liệu gửi đi từ SPI1(Master) thì đèn led ở chân PB9 sẽ sáng, dùng ngắt nhận trên cổng SPI2. Khung truyền dữ liệu là 32 byte data.
Đấu nối dây: thực tế khi chỉ có 1 Master và 1 Slave thì chỉ cần đấu 3 dây CLK, MOSI,MISO là đủ, tuy nhiên khi có nhiều thiết bị Slave thì cần có thêm dây CS, Ở đây mình thêm chân CS cho những trường hợp sau.
Chân nào nhận dữ liệu từ thiết bị khác thì cấu hình GPIO_Mode_AF_PP và chân truyền thì cấu hình GPIO_Mode_AF_PP, cấu hình mode là Master, truyền 8 bit, 2 bit 1 cạnh xung, tốc độ baud chia 8(tính ra được 9Mbs/s), bit thấp đi trước.
Cấu hình tương tự như Master nhưng khác biệt là : Slave, tốc độ baud chia 4(tính ra vẫn được 9Mbs/s độ chia khác nhau nhưng 2 cổng SPI ở 2 nhánh clock hệ thống nhỏ khác nhau).
Khi nhảy vào ngắt, chương trình sẽ kiểm tra lại là có nhận data hay chưa và sau đó kiểm tra byte nhận đầu là kí tự ban đầu của chuỗi gửi hay không, tương tự với kí tự cuối cùng. Sau khi xử lý xong quá trình ngắt, cờ báo ngắt nhận sẽ được xóa để phục vụ cho lần ngắt tiếp theo.
Nút nhấn PC13 được nhấn thì SP1(Master) sẽ bắt đầu cho phép ngắt nhận ở SPI2(Slave), reset các trạng thái ban đầu và đợi cờ truyền trống, khi cờ truyền trống sẽ thực hiện việc truyền 32 kí tự.
Flag_end =1 thông báo quá trình xử lí ngắt(trong file it.c) đã thực hiện thành công và không có sai sót. Led ở chân PB9 được bật để hiển thị kết quả. Các data nhận có thể được xem khi debug chương trình.
Chân nào nhận dữ liệu từ thiết bị khác thì cấu hình GPIO_Mode_AF_PP và chân truyền thì cấu hình GPIO_Mode_AF_PP, cấu hình mode là Master, truyền 8 bit, 2 bit 1 cạnh xung, tốc độ baud chia 8(tính ra được 9Mbs/s), bit thấp đi trước.
Cấu hình tương tự như Master nhưng khác biệt là : Slave, tốc độ baud chia 4(tính ra vẫn được 9Mbs/s độ chia khác nhau nhưng 2 cổng SPI ở 2 nhánh clock hệ thống nhỏ khác nhau).
Khi nhảy vào ngắt, chương trình sẽ kiểm tra lại là có nhận data hay chưa và sau đó kiểm tra byte nhận đầu là kí tự ban đầu của chuỗi gửi hay không, tương tự với kí tự cuối cùng. Sau khi xử lý xong quá trình ngắt, cờ báo ngắt nhận sẽ được xóa để phục vụ cho lần ngắt tiếp theo.
Nút nhấn PC13 được nhấn thì SP1(Master) sẽ bắt đầu cho phép ngắt nhận ở SPI2(Slave), reset các trạng thái ban đầu và đợi cờ truyền trống, khi cờ truyền trống sẽ thực hiện việc truyền 32 kí tự.
Flag_end =1 thông báo quá trình xử lí ngắt(trong file it.c) đã thực hiện thành công và không có sai sót. Led ở chân PB9 được bật để hiển thị kết quả. Các data nhận có thể được xem khi debug chương trình.
Thanh ghi này điều khiển chính quá trình truyền nhận data.
Thanh ghi này 16 bit chứa dữ liệu của data nhận hoặc gửi.
Thanh ghi này điều khiển chính quá trình truyền nhận data.
Thanh ghi này 16 bit chứa dữ liệu của data nhận hoặc gửi.
xuan minh
You may also like :
5 comments :
- UnknownAugust 21, 2018 at 9:37 AM
vậy nếu em muốn truyền 2 mạch song song với nhau thì dùng lệnh như thế nào ạem thấy dùng lệnh này em truyền tin nhắn "xin chao cac ban" giữa 2 mạch stm32f103 mà không thấy hiển thị. mong anh giúp đỡ ạ
ReplyDeleteReplies- UnknownAugust 21, 2018 at 10:35 AM
em dùng phần mềm hecules . dùng usart để kết nối con stm32f103 board với máy tínhem dùng 2 mạch stm32 : 1 con truyền 1 con nhận kết nối với máy tính
DeleteReplies- Reply
- xuan minhAugust 24, 2018 at 8:30 AM
Theo như bạn diễn tả thì mình nghĩ có 2 cách để kết nối giữa 2 board STM32 bằng UART.+ cách 1: kết nối trực tiếp giữa 2 board STM32, chân TX của board 1 nối với chân Rx của board 2, và tương tự với chân RX của board 1. Tuy nhiên, ở cách giao tiếp này thì khoảng cách nhỏ, ở khoảng cách lớn sẽ xảy ra nhiều sai sót cũng như nhiều rắc rối.+ Cách 2 : dùng 2 module UART to com với 2 board STM32. Tuy nhiên cách này cần phải tìm ra cách kết nối giữa 2 cổng COM của máy tính. Cái này mình không rõ lắm.
DeleteReplies- Reply
Reply
- UnknownAugust 21, 2018 at 10:35 AM
- zendang63@gmail.comJune 21, 2020 at 5:10 PM
mình muốn giao tiếp spi giữa modul giải mã vs1003 với arm stm32f103c8t6 thì cấu hình spi giữa 2 con như thế nào ạ ?
ReplyDeleteReplies- xuan minhJuly 31, 2021 at 10:27 PM
Chào bạn, bạn có thể kết nối STM32 sẽ là master và VS1003 là Slave, các chân kết nối theo đúng thứ tự, lưu ý các chân MISO và MOSI khác nhau giữa Master và Slave, chân CS. Giao tiếp được thức hiện theo protocol trong datasheet, read/write - địa chỉ - data.
DeleteReplies- Reply
Reply
- xuan minhJuly 31, 2021 at 10:27 PM
Bài đăng phổ biến
- BÀI 08: UART TRONG STM32F103 BÀI 08: UART TRONG STM32F103. Sơ lược về lý thuyết. UART - Universal synchronous asynchronous receiver transmitter là một ngoại vi cơ...
- BÀI 09: ADC TRONG STM32F103 BÀI 09: ADC TRONG STM32F103. Sơ lược về lý thuyết. ADC – Analog to digital Converter là bộ chuyển đổi tín hiệu tương tự sang tín hiệu...
- BÀI 07: PWM TRONG STM32F103 BÀI 07: PWM TRONG STM32F103. Sơ lược về lý thuyết. PWM(pulse- with modulation) hay còn gọi nôm na là “băm xung” hay “điều khiển độ r...
- BÀI 02 : GPIO VỚI STM32F1 BÀI 02 : GPIO VỚI STM32F1. Sơ lược về lý thuyết. GPIO là từ viết tắt của General purpose I/O po...
- BÀI 00 : GIỚI THIỆU VỀ STM32F103C8T6 BÀI 00 : GIỚI THIỆU VỀ STM32F103C8T6. Giới thiệu sơ lược STM32 là một trong những dòng chip...
- NẠP CODE CHO STM32 BẰNG BOOT LOADER NẠP CODE VỚI BOOT LOADER STM32 Boot loader là gì
- BÀI 04 : SYSTEM TICK TIMER VỚI STM32F1 BÀI 04 : SYSTEM TICK TIMER VỚI STM32F1. Sơ lược về lý thuyết. System Tick Timer là bộ timer 24 bit độc lập nằm trong lõi cortex. Bộ t...
- BÀI 06 : TIMER BASE trong STM32F103 BÀI 06 : TIMER BASE trong STM32F103. Sơ lược về lý thuyết. STM32f103C8 có tất cả 7 timer nhưng trong đó đã bao gồm 1 systick timer, 2...
- BÀI 10: DMA VỚI STM32F103 BÀI 10: DMA VỚI STM32F1. Giới thiệu sơ lược về DMA. ...
- BÀI 05 : Ngắt ngoài với STM32F1 BÀI 05 : Ngắt ngoài với STM32F1. Sơ lược về lý thuyết. NVIC - Nested vectored interrupt controller là bộ vector ngắt lồng nhau. Nghĩa...
About Me
xuan minh View my complete profilePopular
Labels
Archive
Hướng dẫn tạo project trong STM8S với STVD
- BÀI 07: PWM TRONG STM32F103 BÀI 07: PWM TRONG STM32F103. Sơ lược về lý thuyết. PWM(pulse- with modulation) hay còn gọi nôm na là “băm xung” hay “điều khiển độ r...
- BÀI 09: ADC TRONG STM32F103 BÀI 09: ADC TRONG STM32F103. Sơ lược về lý thuyết. ADC – Analog to digital Converter là bộ chuyển đổi tín hiệu tương tự sang tín hiệu...
- BÀI 08: UART TRONG STM32F103 BÀI 08: UART TRONG STM32F103. Sơ lược về lý thuyết. UART - Universal synchronous asynchronous receiver transmitter là một ngoại vi cơ...
Labels
- 01. Giao tiếp với cảm biến ánh sáng BH1750.
- 10. MXCUBE HAL STM32F407 SIMULATE EEPROM.
- 13. FLASH và EEPROM TRONG STM8S.
- 14. OPTION BYTES TRONG STM8S
- ADC TRONG STM32F103
- ADC TRONG STM8S
- ADC với STM32F303CC.
- BÀI 00 : GIỚI THIỆU VỀ STM32F103C8T6
- BÀI 01 : HƯỚNG DẪN TẠO PROJETC STM32 VỚI KEIL V5.
- BÀI 02 : GPIO VỚI STM32F1
- BÀI 03 : CLOCK HỆ THỐNG VỚI STM32F1
- BÀI 04 : SYSTEM TICK TIMER VỚI STM32F1
- Bài 04. Giao tiếp với OLED 0.96 inch SSD1306.
- Bài 05: PWM với STM32F303CC trong MXCUBE
- BOARD STM32F103C8T6 - STLINK.
- BOARD STM8S003F3P6 - UART.
- BOOT LOADER VỚI STM32
- Bootloader STM8S trên IAR.
- CLOCK HỆ THỐNG TRONG STM8S
- DAC với STM32F303CC
- DMA VỚI STM32F103
- ENCODER TRONG STM8S
- ENCODER VỚI STM32F103
- Export library from existing project in altium
- EXTERNAL INTERRUPT với STM32F303CC
- GPIO trong STM8S với STVD
- GPIO với STM32CubeMX trong STM32F303
- Hướng dẫn tạo project với STM32CubeMX
- I2C VỚI IC DS1307
- I2C VỚI STM32F1
- NẠP CHƯƠNG TRÌNH VỚI CÁC CHÂN ALTERNATE FUNCTION(REMAP)TRONG STVP
- NGẮT NGOÀI TRONG STM8S
- Ngắt ngoài với STM32F1
- PWM TRONG STM32F103
- PWM trong STM8S
- RTC VỚI STM32F103
- RTC với STM32F303CC
- SPI VỚI STM32F1
- SRF05 VỚI STM8S
- Tạo project cho STM8S với IAR for STM8S
- Tạo project trong STM8S với STVD
- THIẾT KẾ LED VỚI 2 CHÂN PB4 VÀ PB5
- TIMER BASE trong STM32F103
- TIMER BASE và NGẮT TIMER
- TIMER BASE VỚI MXCUBE SỬ DỤNG STM32F303CC
- TỐI ƯU CODE TRONG STVD
- UART TRONG STM32F103
- UART TRONG STM8S
- UART với STM32F303CC trong MXCUBE
Blog Archive
- ► 2024 (1)
- ► August (1)
- ► 2022 (4)
- ► July (1)
- ► June (1)
- ► March (2)
- ► 2021 (2)
- ► November (2)
- ► 2019 (4)
- ► March (4)
- ► 2017 (2)
- ► December (2)
Blogger templates
Blogroll
About
Copyrights at chia sẻ các vấn đề điện tử © - Powered By Xuan MinhSEARCH ON chia sẻ các vấn đề điện tử
Từ khóa » Tốc độ Spi
-
Chuẩn Giao Tiếp SPI - Trung Kien's Blog
-
Giao Tiếp SPI - Deviot
-
Tốc độ SPI Và I2C ???? - Dien Tu Viet Nam
-
Chuẩn Giao Tiếp SPI Và Cách Kết Nối
-
Lựa Chọn Giữa I2C Và SPI Cho Dự án Của Bạn - EYEWATED.COM
-
Hướng Dẫn Sử Dụng Giao Tiếp SPI Trên STM32F4 - TAPIT
-
Chuẩn Giao Tiếp SPI Là Gì - ĐIỆN TỬ TƯƠNG LAI
-
Arduino Và Giao Tiếp SPI | Cộng đồng Arduino Việt Nam
-
Giao Tiếp SPI - IoTDev
-
Chuẩn Giao Tiếp SPI - Diễn đàn Kỹ Thuật điện Tử
-
Bài 3 : Lập Trình Raspberry Giao Tiếp SPI - MLAB
-
Bộ Lập Trình Usb Spi Tốc Độ Cao Cho Ezp2019 24 25 26 93 ...
-
Chip Bios Tốc Độ Cao Ezp2019 Usb Spi Hỗ Trợ 24 25 93 Eeprom ...
-
Jtag Spi Chất Lượng, Giá Tốt 2021
-
Bài 12: Lập Trình STM32 Với Giao Thức SPI - Khuê Nguyễn
-
USB Tốc Độ Cao Để SPI I2C PWM ADC GPIO UART Có Thể Lâm ...
-
Lập Trình STM32 Với Giao Thức SPI - OLP Tiếng Anh
-
Usb Tốc Độ Cao Ezp2019 Spi Hỗ Trợ 32m Flash 24 25 93 Eeprom ...
-
Chuẩn Giao Tiếp Spi Và Cách Kết Nối