हम व्यवहार में एसटीएम 32 का अध्ययन करते हैं। भाग 1. सीमेंस C55 से स्क्रीन कनेक्शन



अस्वीकरण! लेखक किसी भी मामले में उनके लिए एक नए क्षेत्र में अनुभवहीनता के कारण, अंतिम सत्य की गारंटी नहीं देते हैं। यदि आपको एक सकल तकनीकी त्रुटि दिखाई देती है, तो हम आपसे इसे जल्द से जल्द रिपोर्ट करने के लिए कहते हैं!


किसी तरह एक नौसिखिया प्रोग्रामर और नौसिखिया इलेक्ट्रॉनिक्स इंजीनियर का भाग्य एक साथ लाया। और उन्होंने बनाना शुरू किया। उन्होंने रिकॉर्डिंग साउंड मॉड्यूल के साथ दर्जनों छोटे टेडी बियर खिलौने बनाए और महसूस किया कि एकल-फ़ंक्शन बोर्डों का उपयोग करना बहुत मजेदार नहीं है। और उज्ज्वल गर्मियों की शाम को वे इकट्ठे हुए और सोचा, वे क्या दिलचस्प करेंगे? भाग्य ने उन्हें दूसरी बार मदद की: उन्हें रूस में STM32VLDiscovery डिबग बोर्ड की बिक्री के लिए एक विज्ञापन मिला और एक हफ्ते बाद उन्होंने अपने हाथों को मिलाते हुए और एलइडी को "ब्लिंक" किया। छोटे उपकरण पर पूर्ण शक्ति की सनसनी ने उसकी आँखों में आग लगा दी और दिमाग कमाया। यह तय किया गया था: अपने नए "खिलौना" की पूरी क्षमता का उपयोग करते हुए, कुछ दिलचस्प कार्यक्षमता के साथ "इलेक्ट्रॉनिक कंगन" बनाने के लिए ...

जब हम STM32 का उपयोग करने के संभावित तरीकों के बारे में जान गए, तो उनकी आँखें और भी अधिक जल उठी। सबसे पहले, हमने सभी प्रकार के बाह्य उपकरणों को जोड़ने के बारे में सोचा। हमारे हाथ में सोवियत घड़ी से सात खंडों वाला एलसीडी था। हमने कनेक्ट किया, एक टाइमर लिखा, लेकिन शांत नहीं हो सका ...

अगले दिन, हम सेवा केंद्र में एक छोटी सी दुकान में चले गए और भारी संख्या में फोन को पार्स करने के लिए गूंगा: 3 खड़ा था, पिछले वर्षों के सेल फोन के बीच पूरी तरह से विभिन्न "हिट" से भरा हुआ था। केवल 80 रूबल के लिए, सीमेंस C55 खरीदा गया था, जो बाद में हमारा दाता बन गया।
मामले को खोलने के बाद , हमें आईटी मिला: मोनोक्रोम एलसीडी-स्क्रीन LPH7999-4 जिसकी रिज़ॉल्यूशन 102 गुणा 64 पिक्सेल है। यह वास्तव में, एलसीडी मैट्रिक्स और PCF8812 नियंत्रक (डेटाशीट के लिए लिंक) के होते हैं । नियंत्रक में DDRAM होता है, जिसमें पिक्सल की स्थिति (1 \ 0), I \ O-बफर, कई वर्तमान जनरेटर और तर्क तत्व बिट टेबल में संग्रहीत होते हैं। एलसीडी के साथ सभी क्रियाएं सीधे 8 पैर वीडीडी, एससीके, एमआईएसओ, डीसी, एसएस, जीएनडी, वीओयूटी, आरईएस के माध्यम से नियंत्रक का उपयोग करती हैं, जिनमें से दो एक संधारित्र के माध्यम से बंद होती हैं, और बाकी हमारे प्रोसेसर के पैरों से जुड़े होते हैं।

उसी समय, एक विचार हमारे सिर के माध्यम से फिसल गया: "ये किस प्रकार के अस्पष्ट पदनाम हैं और इसे कैसे नियंत्रित किया जा सकता है?" पूर्ण उदासी और निराशा की अभिव्यक्ति के साथ, हम अज्ञात शब्दों से भरे लेखों में लगातार टकराते हुए, गूगल करने लगे। नतीजतन, हमारे सिर में कई दिनों के बाद एक छोटी सी नई जानकारी रखी गई थी।




MOSI (या SIMO, SDO, DO, DOUT, SO, MTSR)
मास्टर आउटपुट स्लेव इनपुट
मास्टर आउटपुट, जो स्लेव इनपुट से जुड़ा होना चाहिए
MISO (या SOMI, SDI, DI, DIN, SI, MRST)
मास्टर इनपुट गुलाम आउटपुट
मास्टर इनपुट, जिसमें स्लेव आउटपुट की आपूर्ति की जाती है
SCK (या SCLK, CLK)
MISO \ MOSI से बिट्स पार्स करने के लिए घड़ी की आवृत्ति की आपूर्ति की
एसएस (या सीएस)
परिधीय उपकरण का विकल्प जिसके साथ हम काम करेंगे।
यदि एक से अधिक डिवाइस हैं, तो एक विशिष्ट डिवाइस के साथ काम करने के लिए, चयनित एक पर जम्पर पैर को बंद करें और इसे अन्य सभी उपकरणों पर चालू करें।


इसलिए, हमारे एलसीडी को नियंत्रित करने के लिए, हमें एसपीआई का उपयोग करना चाहिए, जो बाह्य उपकरणों के साथ संचार के लिए एक मानकीकृत इंटरफ़ेस है। इसका उपयोग करने के लिए, आपको काम के सिद्धांत और इसके साथ जुड़े सभी शब्दावली को समझने की आवश्यकता है, और विशेष रूप से सभी पैरों के नाम और उद्देश्य।

एसपीआई इंटरफ़ेस मानता है कि हमारे पास कुछ एक डिवाइस है जो सब कुछ (मास्टर) और कई नियंत्रित परिधीय उपकरणों जैसे सेंसर, एलसीडी \ एलसीडी, मेमोरी कार्ड, एडीसी \ डीएसी आदि को नियंत्रित करेगा। (दास)। हमारे मास्टर पर, हमें डेटा / एन-लेग-जंपर्स प्राप्त करने / प्रसारित करने के लिए 3 पैर चुनना चाहिए, जहां एन कनेक्टेड परिधीय उपकरणों की संख्या है। स्लेव उपकरणों पर, आमतौर पर अग्रिम (यदि यह, निश्चित रूप से, एक और प्रोसेसर नहीं है) प्राप्त करने और संचारित करने के लिए पैरों को संबंधित डेटशीट में वर्णित किया गया है।

आइए एक सारगर्भित मास्टर और एक अमूर्त स्लेव डिवाइस के बीच डेटा संचारित करने और प्राप्त करने के संचालन का एक उदाहरण देखें।
नोट! एसपीआई का आयोजन निम्न प्रकार से किया जाता है: जब डेटा को MOSI मास्टर से MISO स्लेव में स्थानांतरित किया जाता है, तो डेटा को MOSI स्लेव से MISO मास्टर और इसके विपरीत प्रसारित किया जाता है। इस प्रकार, एससीके सिग्नल MISO और MOSI के लिए समान है, क्रमशः, वे उसी तरह काम करते हैं।

एक बाइट प्रेषित करते समय, SCK और MOSI आउटपुट शामिल होते हैं। हम SCK घड़ी दालों का उत्पादन करते हैं (तार्किक शून्य से तार्किक इकाई तक वोल्टेज गिरता है)। एक तार्किक इकाई को प्रेषित करते समय, आउटपुट वोल्टेज ~ 3.3V है, जबकि क्रमशः शून्य, क्रमशः ~ 0V प्रसारित करता है। तार्किक शून्य और तार्किक इकाइयों की स्थिति की अवधि बराबर होती है और इसे प्रोग्रामेटिक रूप से सेट किया जाता है। एक बाइट प्रेषित करते समय, एक आवेग प्रत्येक बिट पर पड़ता है। इस प्रकार, SCK आउटपुट में, बाइट ट्रांसफर में हम आठ समान "कूबड़" देख सकते हैं। MOSI के आउटपुट में, हमारी जानकारी सीधे प्रसारित होती है। उदाहरण के लिए, यदि हम 10000001 संचारित करते हैं, तो संकेत एक बड़े छेद की तरह दिखेगा, और यदि 10011001, तो बीच में एक फलाव के साथ एक छेद की तरह। अब दोनों आउटपुट अलग-अलग कैसे काम करते हैं, मुझे लगता है कि यह स्पष्ट है, अब हम इस बारे में बात करेंगे कि वे एक दूसरे के साथ कैसे समन्वित हैं।

निष्क्रिय मोड में। वह क्षण जब कुछ भी प्रेषित नहीं किया जाता है, अर्थात, जब SPI चालू होता है, तो बाइट्स के संचरण के बीच या उनके प्रसारण की शुरुआत से पहले अंतराल में। यह मान लेना तर्कसंगत होगा कि दोनों इनपुटों पर किसी भी संचालन के अभाव में 0. होगा। लेकिन नहीं, निष्क्रिय मोड में MOSI पर तार्किक इकाई का वोल्टेज, SCK पर या तो एक तार्किक इकाई या शून्य है। SCK की यह स्थिति हम अपने लिए चुन सकते हैं।

ट्रांसमिशन मोड में। यहां हमें यह चुनना होगा कि SCK और MOSI बंदरगाहों के आवेगों को कैसे समन्वित किया जाएगा। ऐसा करने के लिए, आपको कुछ बुरे शब्दों को दर्ज करना होगा:
मोर्चा एक राज्य से दूसरे राज्य में एक संक्रमण है, अर्थात्, एक तार्किक इकाई से एक तार्किक शून्य तक वोल्टेज कूदता है। आवेग की छवि में, ये ऊर्ध्वाधर छड़ें हैं।
मोर्चा उठ रहा है और गिर रहा है: बढ़ती - तार्किक शून्य से एक तार्किक इकाई में संक्रमण, गिरना - इसके विपरीत, एक तार्किक इकाई से तार्किक शून्य तक।
फ्रंट भी फ्रंट और रियर है: फ्रंट फ्रंट पहला जंप है जो आइडल मोड के बाद हुआ है, रियर फ्रंट दूसरा जंप है जो आइडल मोड के बाद हुआ है।

डेवलपर SCK निष्क्रिय मोड (तार्किक इकाई या शून्य) और ट्रांसमिशन मोड (अग्रणी या अनुगामी किनारे पर) के लिए चुन सकता है। कुल, ऑपरेशन के 4 तरीके हैं:


मोड 0 (00):
डाउनटाइम एक तार्किक शून्य है।
फ्रंट-एंड ट्रांसमिशन।
चूंकि हमने एसकेके पर एक लॉजिक शून्य वोल्टेज से लॉजिकल यूनिट वोल्टेज में संक्रमण के दौरान एक अग्रणी धार ट्रांसमिशन का चयन किया था, इसलिए बीओएस पर बिट ट्रांसमिशन होगा।


मोड 1 (01):
डाउनटाइम एक तार्किक शून्य है।
रिवर्स गियर।
चूंकि हमने अनुगामी किनारे पर संचरण को चुना, पहले एक बढ़ती हुई बढ़त है, फिर कुछ समय के लिए एक तार्किक शून्य वोल्टेज रखा जाता है, फिर एक गिरने वाला किनारा होता है। उसके बाद, MOSI पर बिट ट्रांसमिशन होगा।


मोड 2 (10):
डाउनटाइम एक तार्किक इकाई है।
फ्रंट-एंड ट्रांसमिशन।
संचरण के दौरान, एक आवेग SCK को जाता है। लेकिन यह दो पिछले मोड के विपरीत नहीं, बल्कि गिर रहा है। चूंकि वोल्टेज की तार्किक इकाई के ऊपर कोई वोल्टेज नहीं हो सकता है, इसलिए पहला आवेग "नीचे" जाता है। यह इस संक्रमण के दौरान है (आखिरकार, हमने अग्रणी बढ़त को चुना है) कि बिट को MOSI में प्रसारित किया जाता है।


मोड 3 (11):
डाउनटाइम एक तार्किक इकाई है।
रिवर्स गियर।
संचरण के दौरान, एससीके के लिए एक आवेग है, पहले गिर रहा है, फिर बढ़ रहा है। इस समय, MOSI के लिए एक संक्रमण है।

आमतौर पर, डेटासेट में ऑपरेटिंग मोड का संकेत नहीं दिया जाता है, लेकिन इसे आसानी से प्राप्त किया जा सकता है यदि आप डेटाशीट के किसी भी चार्ट पर MOSI \ MISO और SCK के व्यवहार का अध्ययन करते हैं।



तो हम अपने नियंत्रक पर क्या नियंत्रण कर सकते हैं?
सबसे पहले, हमारे पास मेमोरी है जो नियंत्रक एलसीडी मैट्रिक्स पर प्रदर्शित करता है।
दूसरे, हमारे पास एक्स और वाई के समन्वय के साथ एक मेमोरी कैरिज है
तीसरा, हमारे पास विभिन्न प्रकार के दर्जनों हैं:
  पीडी बिट - यदि 0, तो नियंत्रक चालू है, यदि 1 - तो नियंत्रक नींद मोड में है
	 बिट V - यदि 0 है, तो डेटा लिखे जाने के बाद, X ​​द्वारा गाड़ी को शिफ्ट कर दिया जाता है, अन्यथा Y बाय 9 (यानी, रिकॉर्ड किए गए कॉलम के तुरंत बाद)
	 बिट एच - यदि 0 है, तो निर्देशों के सामान्य सेट के साथ काम करने के लिए मोड चालू है, यदि 1 - फिर विस्तारित के साथ
	 बिट्स डी और ई डिस्प्ले मोड के लिए जिम्मेदार हैं:
		 00 - सभी पिक्सेल बंद हैं
		 01 - सभी पिक्सेल चालू हैं
		 10 - यदि मेमोरी 1 में पिक्सेल की स्थिति है, तो यह 0 पर है, यदि यह बंद है (सामान्य मोड)
		 11 - यदि मेमोरी 1 में पिक्सेल की स्थिति है, तो यह लिट नहीं है, यदि 0 है, तो जलाया (उलटा)
	 बिट्स TC1 और TC0 एलसीडी तापमान गुणांक के लिए जिम्मेदार हैं
		 ०० - गुणांक ०
		 01 - गुणांक 1
		 10 - गुणांक 2
		 11 - गुणांक 3
	 बिट्स S1 और S0 आंतरिक शक्ति गुणक के लिए जिम्मेदार हैं, अर्थात्।  सैद्धांतिक रूप से भोजन कितनी बार होता है 
		 VDD के लिए दायर आंतरिक शक्ति से अलग होगा
		 00 - दो बार जितना
		 01 - तीन गुना अधिक
		 10 - चार गुना अधिक
		 11 - पांच गुना बड़ा
	 Vop6-Vop0 बिट्स प्रारंभिक आंतरिक वोल्टेज के मूल्य के लिए जिम्मेदार हैं
	 BS2-BS0 बिट्स सिस्टम पूर्वाग्रह के लिए जिम्मेदार हैं


अब हम नियंत्रण के लिए संभव आदेश देते हैं। उनमें से प्रत्येक बिल्कुल 8 बिट्स से बना है:
(निर्देशों के किसी भी मोड में)
रजिस्टर पीडी, वी, एच सेट करें00100पीडीवीएच
(सामान्य मोड में, निर्देशों का एक सेट)
सेट रजिस्टर डी, ई00001डी0
गाड़ी का एक्स समन्वय स्थापित करें ( )1एक्स 6एक्स 5एक्स 4एक्स 3एक्स 2एक्स 1एक्स 0
गाड़ी का Y समन्वय सेट करें ( )01002
(विस्तारित निर्देश सेट में)
टीसी रजिस्टर सेट करें000001टीसी 1तृक
रजिस्टर एस सेट करें000010S S 0
बीएस रजिस्टर सेट करें00010बीएस बीएस बीएस
सेट रजिस्टर V ( )1 वी सेशन 5वी ऑप 6वी ऑप 5वी ऑप 4वि ऑप वि ऑप वि ऑप वि ऑप


एलसीडी को प्रारंभिक रूप से ठीक करने के लिए, हमें VDD पर वोल्टेज लागू करना होगा, इसे RES पर बंद करना होगा, 100 ize की प्रतीक्षा करनी होगी और RES पर फिर से आवेदन करना होगा। जब आरईएस की शक्ति बंद हो जाती है, तो नियंत्रक स्लीप मोड में चला जाता है, रैम को मंजूरी देने की गारंटी नहीं होती है, कई रजिस्टरों को अपना डिफ़ॉल्ट मान मिलता है। कंट्रोलर पर डेटाशीट में पेज 14 पर और पढ़ें।
उसके बाद, हमें एसएस को बंद करना चाहिए (अर्थात, "काम करने के लिए डिवाइस का चयन करें") और डीसी को बंद करें (अर्थात, कमांड भेजना शुरू करें) और एसपीआई का उपयोग करके कई इनिशियलाइज़िंग कमांड भेजें:
  1. बिजली चालू करें, और एक ही समय में V = 0 और H = 1 सेट करें
  2. तापमान गुणांक टीसी = 11 का चयन करें
  3. अधिकतम आंतरिक बिजली की आपूर्ति V op = 1111111 निर्धारित करें
  4. आंतरिक शक्ति कारक S = 01 चालू करें
  5. सिस्टम ऑफ़सेट को BS = 011 सेट करें
  6. सामान्य निर्देश सेट मोड H = 0, V = 0, PD = 0 को सक्षम करें
  7. सामान्य प्रदर्शन मोड D = 1, E = 0 का चयन करें

उसके बाद, हमारा प्रदर्शन हल्का हो जाएगा और हमें गैर-रीसेट रैम से लिया गया यादृच्छिक पिक्सेल दिखाएगा।
दुर्भाग्य से, नियंत्रक पर कोई MOSI नहीं है (यानी कोई प्रतिक्रिया नहीं है), इसलिए यदि प्रदर्शन कुछ भी नहीं दिखाता है, तो कम से कम एसपीआई काम करना सुनिश्चित करने के लिए, उपरोक्त आदेशों के बाद आपको एलसीडी के 7 वें पैर पर वोल्टेज को मापने की आवश्यकता है।
प्रयोगात्मक (और लंबे) तरीके से, निम्नलिखित पाया गया था: यदि डिस्प्ले कुछ भी नहीं दिखाता है, लेकिन 7 वें पैर पर वोल्टेज है, तो इसका मतलब है कि एसपीआई काम कर रहा है और प्रदर्शन में पर्याप्त आंतरिक वोल्टेज नहीं है और वी ऑप और एस रजिस्टरों का उपयोग करके इसे बढ़ाने की आवश्यकता है (अधिकतम सेट करें) उदाहरण के लिए)। हमारे मामले में, डिस्प्ले ~ 6V पर रोशनी करता है।



हमने सिद्धांत का अध्ययन किया और अब कार्यान्वयन पर आगे बढ़ते हैं। एसपीआई के साथ काम को लागू करने के दो तरीके हैं: प्रोसेसर (सॉफ़्टवेयर स्पाई) के पैरों को नियंत्रित करके हैंडल के साथ सब कुछ करें या "हार्डवेयर" कार्यान्वयन (हार्डवेयर एसआईआई) का उपयोग करें, जो हमारे एसटीएम 32 में है। उदाहरण के लिए, मुझे प्रोसेसर पावर का उपयोग करके इंटरफ़ेस को लागू करने का कोई कारण नहीं दिखता है, इसलिए मैं हार्डवेयर स्पाई का उपयोग करता हूं।

हम CooCox IDE में कोड लिखेंगे और डीबग करेंगे:
  1. CoIDE लॉन्च करें और एक नया प्रोजेक्ट बनाएं।

  2. हमारे लिए आवश्यक मॉड्यूल चुनें: GPIO (पैरों को नियंत्रित करने के लिए), SPI (SPI को नियंत्रित करने के लिए), RCC

  3. हम अपने भविष्य के कार्यक्रम के लिए एक छोटी रूपरेखा लिखेंगे
    #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #include "stm32f10x_spi.h" void SPIInit(void) { } void GPIOInit(void) { } void LCDInit(void) { } int main() { SystemInit(); GPIOInit(); SPIInit(); LCDInit(); return 0; } 

  4. GPIO में भरने के द्वारा शुरू करते हैं। ऐसा करने के लिए, एसटीएम 32 पर एक डेटाशीट का उपयोग करके, हमें यह पता लगाना होगा कि "लोहा" एसपीआई के पैर कहाँ हैं। हमारा मॉडल PA5 (SCK), PA6 (MISO), PA7 (MOSI) है। ये पैर या तो साधारण पैर या एसपीआई पैर हो सकते हैं, इसलिए हमें स्पष्ट रूप से इच्छित उद्देश्य को इंगित करने और उनका उपयोग करने की आवश्यकता है।
  5. शेष पैरों पर विचार करें:
    VDDकनेक्ट करने की शक्ति के लिए एक पैर, STM32 पर एक मनमाना पैर से जोड़ता है (हमारे मामले में, LPH7999-4 पर कनेक्शन सीमा 6.5V तक है, और STM32 प्रत्येक पैर पर 3.3V देता है)
    Voutआंतरिक बिजली उत्पादन, एक्स mF पर एक संधारित्र के माध्यम से स्क्रीन की जमीन से जुड़ा हुआ है।
    GNDजमीन, VOUT देखें
    आरईएसनियंत्रक रीसेट को नियंत्रित करने के लिए पैर, STM32 पर एक मनमाना पैर से जोड़ता है
    डीसीपैर, जो नियंत्रक को डेटा ट्रांसफर मोड के लिए जिम्मेदार है, STM32 पर एक मनमाना पैर से जुड़ा है। यदि पैर पर कोई वोल्टेज नहीं है, तो एलसीडी नियंत्रक एक कमांड के रूप में प्राप्त डेटा की व्याख्या करता है, और यदि है, तो 8 पिक्सल के एक सेट के रूप में, जो गाड़ी के स्थान के सापेक्ष डीडीआरएएम में एक कॉलम में लिखा जाता है।
    एसएसऊपर देखें, STM32 पर एक अनियंत्रित पैर से जुड़ता है

  6. सोल्डर SCK, MOSI से PA5 और PA7, और DC, VDD, RES और SS को मनमाना पैर। हमारे पास क्रमशः यह PB0, PB1, PB2, PB3 है।
  7. हम कोड लिखते हैं:
     #define SCK_Pin GPIO_Pin_5 #define SCK_Pin_Port GPIOA #define MOSI_Pin GPIO_Pin_7 #define MOSI_Pin_Port GPIOA #define DC_Pin GPIO_Pin_0 #define DC_Pin_Port GPIOB #define VDD_Pin GPIO_Pin_1 #define VDD_Pin_Port GPIOB #define RST_Pin GPIO_Pin_2 #define RST_Pin_Port GPIOB #define SS_Pin GPIO_Pin_3 #define SS_Pin_Port GPIOB void GPIOInit(void) { //   (=)   A, B   SPI1 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_SPI1, ENABLE); GPIO_InitTypeDef PORT; //     PORT.GPIO_Pin = SCK_Pin | MOSI_Pin; //    (   4   ) PORT.GPIO_Speed = GPIO_Speed_2MHz; // (!)   .  -  " "  PORT.GPIO_Mode = GPIO_Mode_AF_PP; //      GPIO_Init(GPIOA, &PORT); //     PORT.GPIO_Pin = DC_Pin | VDD_Pin | RST_Pin | SS_Pin; //   ( -  ) PORT.GPIO_Speed = GPIO_Speed_2MHz; //  - ,  PORT.GPIO_Mode = GPIO_Mode_Out_PP; //     B GPIO_Init(GPIOB, &PORT); } 

    हम कोड पठनीयता के लिए सहायक प्रक्रियाएँ लिखेंगे:
  8.  void PowerOn() { VDD_Pin_Port->ODR |= VDD_Pin; } void PowerOff() { VDD_Pin_Port->ODR &= ~VDD_Pin; } void ResetOn() { RST_Pin_Port->ODR |= RST_Pin; } void ResetOff() { RST_Pin_Port->ODR &= ~RST_Pin; } void DCOn() { DC_Pin_Port->ODR |= DC_Pin; } void DCOff() { DC_Pin_Port->ODR &= ~DC_Pin; } void SSOff() { SS_Pin_Port->ODR &= ~SS_Pin; } void SSOn() { SS_Pin_Port->ODR |= SS_Pin; } 

  9. अब SPI कॉन्फ़िगर करें:
     void SPIInit(void) { SPI_InitTypeDef SPIConf; // ,       SPIConf.SPI_Direction = SPI_Direction_1Line_Tx; // ,    - Master SPIConf.SPI_Mode = SPI_Mode_Master; //    8  (=1 ) SPIConf.SPI_DataSize = SPI_DataSize_8b; //  00 SPIConf.SPI_CPOL = SPI_CPOL_Low; SPIConf.SPI_CPHA = SPI_CPHA_1Edge; SPIConf.SPI_NSS = SPI_NSS_Soft; //    (  ,       ) SPIConf.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; //      (..  ) SPIConf.SPI_FirstBit = SPI_FirstBit_MSB; //    SPI SPI_Init(SPI1, &SPIConf); //  SPI1 SPI_Cmd(SPI1, ENABLE); // SS = 1 SPI_NSSInternalSoftwareConfig(SPI1, SPI_NSSInternalSoft_Set); } 

  10. एसपीआई द्वारा डेटा भेजने का कार्य लिखते हैं
     void SPISend(uint16_t data) { SPI_I2S_SendData(SPI1, data); //   while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET); // ,     } 

  11. आइए सिद्धांत के अनुसार आरंभीकरण लिखें
     void LCDInit(void) { SSOff(); DCOff(); PowerOn(); ResetOff(); ResetOn(); SPISend(0x21); //  ,   ,   . . SPISend(0b1001); //      SPISend(0xFF); //     SPISend(0x06); //   SPISend(0x13); //  bias ( ) SPISend(0x20); // ...,     SPISend(0b1100); //     } 

  12. प्रोजेक्ट - बिल्ड (या F7)
  13. फ्लैश - प्रोग्राम डाउनलोड
  14. हम देखते हैं और आनन्दित होते हैं: ३

यहां आप CooCox के लिए तैयार प्रोजेक्ट डाउनलोड कर सकते हैं



बेशक, 2013 में एआरएम प्रोसेसर के साथ जुड़े डिस्प्ले को आश्चर्यचकित करना मुश्किल है। हमारे लिए, शुरुआत करने वाले डेवलपर्स के रूप में, यह हमारी अनूठी "इलेक्ट्रॉनिक ब्रेसलेट" परियोजना के कार्यान्वयन की दिशा में पहला कदम है।
हम बाजार में प्रवेश करने का सपना नहीं देखते हैं, हम सिर्फ अनुभव हासिल करना चाहते हैं, अपने लिए एक कार्यात्मक, स्टाइलिश और लंबे समय तक चलने वाला गैजेट बनाना चाहते हैं, और साथ ही यहां हमारी सफलताओं और असफलताओं के बारे में बताते हैं।

अब हमारा डिवाइस स्क्रीन पर चित्र बनाने में सक्षम है, पहले इस पायथन स्क्रिप्ट का उपयोग करके 8-बिट "कॉलम" की एक सरणी में परिवर्तित किया गया था, जिसके लिए पायथन 2.7 और पीआईएल की आवश्यकता होती है।
उपयोग: photo.py file24bit.bmp> bytes.c

कुछ चित्र http://easystm32.ru/interfaces/43-spi-interface-part-1 से लिए गए थे

Source: https://habr.com/ru/post/In188082/


All Articles