- STM32F103C8 இல் SPI
- அர்டுயினோவில் SPI பின்ஸ்
- கூறுகள் தேவை
- STM32 SPI டுடோரியலுக்கான சுற்று வரைபடம் மற்றும் இணைப்புகள்
- STM32 SPI புரோகிராமிங்
- முதன்மை STM32 SPI புரோகிராமிங் விளக்கம்
- ஸ்லேவ் அர்டுயினோ எஸ்பிஐ புரோகிராமிங் விளக்கம்
எங்கள் முந்தைய டுடோரியல்களில், இரண்டு ஆர்டுயினோ போர்டுகளுக்கு இடையிலான SPI மற்றும் I2C தொடர்பு பற்றி அறிந்து கொண்டோம். இந்த டுடோரியலில், ஒரு ஆர்டுயினோ போர்டை STM32F103C8 என்ற ப்ளூ பில் போர்டுடன் மாற்றுவோம், மேலும் SPI பஸ்ஸைப் பயன்படுத்தி Arduino போர்டுடன் தொடர்புகொள்வோம். இந்த STM32 SPI எடுத்துக்காட்டில், Arduino UNO ஐ அடிமையாகவும், STM32F103C8 ஐ மாஸ்டர் ஆகவும் இரண்டு 16X2 எல்சிடி டிஸ்ப்ளே ஒருவருக்கொருவர் தனித்தனியாக இணைக்கிறோம். இரண்டு பொட்டென்டோமீட்டர்களும் STM32 (PA0) மற்றும் Arduino (A0) உடன் இணைக்கப்பட்டுள்ளன.
STM32F103C8 இல் SPI
Arduino & STM32F103C8 ப்ளூ பில் போர்டில் SPI பஸ்ஸை ஒப்பிடுகையில், STM32 இல் 2 SPI பஸ் உள்ளது, Arduino Uno ஒரு SPI பஸ் உள்ளது. Arduino Uno இல் ATMEGA328 மைக்ரோகண்ட்ரோலர் உள்ளது, மற்றும் STM32F103C8 இல் ARM Cortex- M3 உள்ளது, இது அருடினோ போர்டை விட வேகமாக செய்கிறது.
SPI தகவல்தொடர்பு பற்றி மேலும் அறிய, எங்கள் முந்தைய கட்டுரைகளைப் பார்க்கவும்
- Arduino இல் SPI ஐ எவ்வாறு பயன்படுத்துவது: இரண்டு Arduino போர்டுகளுக்கு இடையிலான தொடர்பு
- PIC மைக்ரோகண்ட்ரோலருடன் PIC16F877A உடன் SPI தொடர்பு
- பிட் பேங்கிங் வழியாக SPI தொடர்பு
- எஸ்பிஐ தொகுதிகளைப் பயன்படுத்தி ராஸ்பெர்ரி பை ஹாட் வாட்டர் டேங்க் லீக் டிடெக்டர்
- DS3231 தொகுதியைப் பயன்படுத்தி ESP32 ரியல் டைம் கடிகாரம்
STM32 SPI பின்ஸ் STM32F103C8

| SPI Line1 | STM32F103C8 இல் பின் |
| MOSI1 | PA7 அல்லது PB5 |
| MISO1 | PA6 அல்லது PB4 |
| SCK1 | PA5 அல்லது PB3 |
| எஸ்எஸ் 1 | PA4 அல்லது PA15 |
| SPI Line2 | |
| MOSI2 | பிபி 15 |
| MISO2 | பிபி 14 |
| SCK2 | பிபி 13 |
| எஸ்எஸ் 2 | பிபி 12 |
அர்டுயினோவில் SPI பின்ஸ்

|
SPI வரி |
Arduino இல் முள் |
|
மோசி |
11 அல்லது ஐ.சி.எஸ்.பி -4 |
|
மிசோ |
12 அல்லது ஐ.சி.எஸ்.பி -1 |
|
எஸ்.சி.கே. |
13 அல்லது ஐ.சி.எஸ்.பி -3 |
|
எஸ்.எஸ் |
10 |
கூறுகள் தேவை
- STM32F103C8
- அர்டுயினோ
- எல்சிடி 16 எக்ஸ் 2 - 2
- 10 கே பொட்டென்டோமீட்டர் - 4
- ப்ரெட்போர்டு
- கம்பிகளை இணைக்கிறது
STM32 SPI டுடோரியலுக்கான சுற்று வரைபடம் மற்றும் இணைப்புகள்


கீழே உள்ள அட்டவணை அர்டுயினோவுடன் STM32 SPI தகவல்தொடர்புக்காக இணைக்கப்பட்ட ஊசிகளைக் காட்டுகிறது.
|
SPI பின் |
STM32F103C8 |
அர்டுயினோ |
|
மோசி |
PA7 |
11 |
|
மிசோ |
PA6 |
12 |
|
எஸ்.சி.கே. |
PA5 |
13 |
|
எஸ்எஸ் 1 |
PA4 |
10 |
கீழேயுள்ள அட்டவணையில் STM32F103C8 மற்றும் Arduino உடன் இரண்டு எல்சிடி (16x2) உடன் இணைக்கப்பட்ட ஊசிகளை தனித்தனியாகக் காட்டுகிறது.
|
எல்சிடி முள் |
STM32F103C8 |
அர்டுயினோ |
|
வி.எஸ்.எஸ் |
ஜி.என்.டி. |
ஜி.என்.டி. |
|
வி.டி.டி. |
+ 5 வி |
+ 5 வி |
|
வி 0 |
எல்சிடி மாறுபாட்டிற்கான பொட்டென்டோமீட்டர் சென்டர் பின் |
எல்சிடி மாறுபாட்டிற்கான பொட்டென்டோமீட்டர் சென்டர் பின் |
|
ஆர்.எஸ் |
பிபி 0 |
2 |
|
ஆர்.டபிள்யூ |
ஜி.என்.டி. |
ஜி.என்.டி. |
|
இ |
பிபி 1 |
3 |
|
டி 4 |
பிபி 10 |
4 |
|
டி 5 |
பிபி 11 |
5 |
|
டி 6 |
பிசி 13 |
6 |
|
டி 7 |
பிசி 14 |
7 |
|
அ |
+ 5 வி |
+ 5 வி |
|
கே |
ஜி.என்.டி. |
ஜி.என்.டி. |
முக்கியமான:
- Arduino GND மற்றும் STM32F103C8 GND ஐ ஒன்றாக இணைக்க மறக்காதீர்கள்.
STM32 SPI புரோகிராமிங்
நிரலாக்கமானது Arduino குறியீட்டைப் போன்றது. அதே
இந்த STM32 SPI எடுத்துக்காட்டில், Arduino UNO ஐ அடிமையாகவும், STM32F103C8 ஐ மாஸ்டர் ஆகவும் இரண்டு 16X2 எல்சிடி டிஸ்ப்ளே ஒருவருக்கொருவர் தனித்தனியாக இணைக்கிறோம். இரண்டு பொட்டென்டோமீட்டர்களும் STM32 (PA0) மற்றும் Arduino (A0) உடன் இணைக்கப்பட்டுள்ளன.
பொட்டென்டோமீட்டரை சுழற்றுவதன் மூலம் அனலாக் உள்ளீடு STM32F10C8 முள் PA0 (0 முதல் 3.3V) வரை எடுக்கப்படுகிறது. இந்த உள்ளீட்டு மதிப்பு அனலாக் டிஜிட்டல் மதிப்புக்கு (0 முதல் 4096 வரை) மாற்றப்படுகிறது, மேலும் இந்த டிஜிட்டல் மதிப்பு மேலும் (0 முதல் 255 வரை) மாற்றப்படுகிறது, ஏனெனில் எஸ்பிஐ தகவல்தொடர்பு மூலம் ஒரே நேரத்தில் 8 பிட் (பைட்) தரவை மட்டுமே அனுப்ப முடியும்.
இதேபோல் ஸ்லேவ் பக்கத்தில், பொட்டென்டோமீட்டரைப் பயன்படுத்துவதன் மூலம் (0 முதல் 5 வி வரை) அர்டுயினோ முள் A0 இல் அனலாக் உள்ளீட்டு மதிப்பை எடுத்துக்கொள்கிறோம். மீண்டும் இந்த உள்ளீட்டு மதிப்பு அனலாக் டிஜிட்டல் மதிப்புக்கு (0 முதல் 1023 வரை) மாற்றப்படுகிறது, மேலும் இந்த டிஜிட்டல் மதிப்பு மேலும் (0 முதல் 255 வரை) மாற்றப்படுகிறது
இந்த டுடோரியலில் மாஸ்டர் எஸ்.டி.எம் 32 மற்றும் ஒன்று அடிமை அர்டுயினோவுக்கு இரண்டு திட்டங்கள் உள்ளன. இரு தரப்பினருக்கும் முழுமையான நிரல்கள் இந்த திட்டத்தின் முடிவில் ஒரு ஆர்ப்பாட்ட வீடியோவுடன் கொடுக்கப்பட்டுள்ளன.
முதன்மை STM32 SPI புரோகிராமிங் விளக்கம்
1. முதலில் எஸ்பிஐ தகவல்தொடர்பு செயல்பாடுகளைப் பயன்படுத்துவதற்கான எஸ்பிஐ நூலகத்தையும் எல்சிடி செயல்பாடுகளைப் பயன்படுத்த எல்சிடி நூலகத்தையும் சேர்க்க வேண்டும். 16x2 எல்சிடிக்கு எல்சிடி ஊசிகளையும் வரையறுக்கவும். எல்.சி.டி.யை எஸ்.டி.எம் 32 உடன் இடைமுகப்படுத்துவது பற்றி மேலும் அறிக.
#சேர்க்கிறது
2. வெற்றிட அமைப்பில் ()
- பாட் வீதம் 9600 இல் தொடர் தொடர்புகளைத் தொடங்கவும்.
சீரியல்.பெஜின் (9600);
- அடுத்து SPI தகவல்தொடர்பு தொடங்கவும்
SPI.begin ();
- SPI தகவல்தொடர்புக்கு கடிகார வகுப்பினை அமைக்கவும். நான் வகுப்பி 16 அமைத்துள்ளேன்.
SPI.setClockDivider (SPI_CLOCK_DIV16);
- அடிமை அர்டுயினோவுக்கு எந்த பரிமாற்றத்தையும் நாங்கள் தொடங்கவில்லை என்பதால் அடுத்து SS முள் HIGH ஐ அமைக்கவும்.
டிஜிட்டல்ரைட் (SS, HIGH);
3. வெற்றிட சுழற்சியில் ()
- அடிமைக்கு எந்த மதிப்பையும் அனுப்புவதற்கு முன், எஜமானரிடமிருந்து அடிமைக்கு மாற்றத் தொடங்க அடிமை தேர்ந்தெடுக்கப்பட்ட மதிப்பைக் குறைக்க வேண்டும்.
டிஜிட்டல்ரைட் (SS, LOW);
- பின் PA0 உடன் இணைக்கப்பட்ட முதன்மை STM32F10C8 POT இலிருந்து அனலாக் மதிப்பைப் படியுங்கள்.
int pot = அனலாக் ரீட் (PA0);
இந்த மதிப்பை ஒரு பைட்டின் அடிப்படையில் (0 முதல் 255 வரை) மாற்றவும்.
byte MasterSend = வரைபடம் (பானை, 0,4096,0,255);
- இங்கே முக்கியமான படி வருகிறது, பின்வரும் அறிக்கையில், மாஸ்டர்சென்ட் மாறியில் சேமிக்கப்பட்ட மாற்றப்பட்ட POT மதிப்பை அடிமை Arduino க்கு அனுப்புகிறோம், மேலும் அடிமை Arduino இலிருந்து மதிப்பைப் பெற்று, அதை மாஸ்டெரெசிவ் மாறியில் சேமித்து வைக்கிறோம் .
Mastereceive = SPI.transfer (Mastersend);
- அடுத்து அடிமை அர்டுயினோவிலிருந்து பெறப்பட்ட மதிப்புகளை 500 மைக்ரோ விநாடிகளின் தாமதத்துடன் காண்பிக்கவும், பின்னர் தொடர்ந்து பெறவும் மதிப்புகளைக் காண்பிக்கவும்.
Serial.println ("அடிமை அர்டுயினோ முதல் மாஸ்டர் STM32"); Serial.println (MasterReceive lcd.setCursor (0,0); lcd.print ("Master: STM32"); lcd.setCursor (0,1); lcd.print ("SalveVal:"); lcd.print (MasterReceive delay (500); டிஜிட்டல்ரைட் (எஸ்.எஸ்., உயர்);
குறிப்பு: Arduino IDE இன் சீரியல் மோட்டரில் முடிவைக் காண serial.println () ஐப் பயன்படுத்துகிறோம்.
ஸ்லேவ் அர்டுயினோ எஸ்பிஐ புரோகிராமிங் விளக்கம்
1. மாஸ்டர் போலவே, முதலில் நாம் I2C தகவல்தொடர்பு செயல்பாடுகளைப் பயன்படுத்துவதற்கான SPI நூலகத்தையும் எல்சிடி செயல்பாடுகளைப் பயன்படுத்த எல்சிடி நூலகத்தையும் சேர்க்க வேண்டும். 16x2 எல்சிடிக்கு எல்சிடி ஊசிகளையும் வரையறுக்கவும்.
#சேர்க்கிறது
2. வெற்றிட அமைப்பில் ()
- நாங்கள் பாட் வீதம் 9600 இல் தொடர் தொடர்புகளைத் தொடங்குகிறோம்.
சீரியல்.பெஜின் (9600);
- கீழே உள்ள அறிக்கை MISO ஐ OUTPUT ஆக அமைக்கிறது (தரவை மாஸ்டர் IN க்கு அனுப்ப வேண்டும்).அதனால் தரவு ஸ்லேவ் அர்டுயினோவின் MISO வழியாக அனுப்பப்படுகிறது.
pinMode (MISO, OUTPUT);
- இப்போது SPI கட்டுப்பாட்டு பதிவேட்டைப் பயன்படுத்தி அடிமை பயன்முறையில் SPI ஐ இயக்கவும்
SPCR - = _BV (SPE);
- SPI தகவல்தொடர்புக்கு குறுக்கீட்டை இயக்கவும். மாஸ்டரிடமிருந்து ஒரு தரவு பெறப்பட்டால், குறுக்கீடு சேவை வழக்கம் அழைக்கப்படுகிறது மற்றும் பெறப்பட்ட மதிப்பு SPDR (SPI தரவு பதிவு) இலிருந்து எடுக்கப்படுகிறது
SPI.attachInterrupt ();
- மாஸ்டரிடமிருந்து வரும் மதிப்பு SPDR இலிருந்து எடுக்கப்பட்டு ஸ்லேவரீசிவ் மாறியில் சேமிக்கப்படுகிறது. குறுக்கீடு வழக்கமான செயல்பாட்டைப் பின்பற்றுவதில் இது நடைபெறுகிறது.
ISR (SPI_STC_vect) {அடிமைத்தனம் = SPDR; பெற்றது = உண்மை; }
3. வெற்றிட சுழற்சியில் அடுத்தது ()
- முள் A0 உடன் இணைக்கப்பட்ட ஸ்லேவ் அர்டுயினோ POT இலிருந்து அனலாக் மதிப்பைப் படியுங்கள்.
int pot = அனலாக் ரீட் (A0);
- அந்த மதிப்பை ஒரு பைட்டின் அடிப்படையில் 0 முதல் 255 ஆக மாற்றவும்.
ஸ்லேவ்ஸென்ட் = வரைபடம் (பானை, 0,1023,0,255);
- மாற்றப்பட்ட மதிப்பை முதன்மை STM32F10C8 க்கு அனுப்புவதே அடுத்த முக்கியமான படி, எனவே மதிப்பை SPDR பதிவேட்டில் வைக்கவும். மதிப்புகளை அனுப்ப மற்றும் பெற SPDR பதிவு பயன்படுத்தப்படுகிறது.
எஸ்.பி.டி.ஆர் = ஸ்லேவ்ஸெண்ட்;
- எல்.சி.டி.யில் மாஸ்டர் எஸ்.டி.எம் 32 எஃப் 103 சி 8 இலிருந்து பெறப்பட்ட மதிப்பை ( ஸ்லேவ் ரீசிவ் ) 500 மைக்ரோ விநாடிகளின் தாமதத்துடன் காண்பிக்கவும், பின்னர் தொடர்ந்து அந்த மதிப்பைப் பெற்று காண்பிக்கவும்.
lcd.setCursor (0,0); lcd.print ("அடிமை: அர்டுயினோ"); lcd.setCursor (0,1); lcd.print ("மாஸ்டர்வால்:"); Serial.println ("மாஸ்டர் STM32 to Slave Arduino"); சீரியல்.பிரண்ட்ல்ன் (ஸ்லேவ் ரீசீவ்); lcd.print (ஸ்லேவ் ரீசீவ்); தாமதம் (500);
பொட்டென்டோமீட்டரை ஒரு பக்கத்தில் சுழற்றுவதன் மூலம் , எல்.சி.டி.யில் மாறுபட்ட மதிப்புகளை மற்றொரு பக்கத்தில் காணலாம்:

எனவே STM32 இல் SPI தொடர்பு நடைபெறுகிறது. இப்போது நீங்கள் எந்த SPI சென்சாரையும் STM32 போர்டுடன் இடைமுகப்படுத்தலாம்.
மாஸ்டர் எஸ்.டி.எம் 32 மற்றும் ஸ்லேவ் அர்டுயினோவுக்கான முழுமையான குறியீட்டு முறை ஒரு ஆர்ப்பாட்ட வீடியோவுடன் கீழே கொடுக்கப்பட்டுள்ளது
