- வன்பொருள் தயார் செய்தல்
- STM8S103F இல் GPIO பின்அவுட்களைப் புரிந்துகொள்வது
- STM8S103F GPIO தேர்வுக்கான பின்அவுட் விளக்கம் மற்றும் உதவிக்குறிப்புகள்
- SPL ஐப் பயன்படுத்தி GPIO உள்ளீடு மற்றும் வெளியீட்டிற்கான STM8S ஐ நிரல் செய்தல்
- நிரலைப் பதிவேற்றுதல் மற்றும் சோதனை செய்தல்
மைக்ரோகண்ட்ரோலர்களைப் பொறுத்தவரை, எல்.ஈ.டி ஒளிரும் திட்டம் “ஹலோ வேர்ல்ட்” திட்டத்திற்கு சமம். எங்கள் முந்தைய டுடோரியலில், STM8S103F3 மேம்பாட்டு வாரியத்துடன் எவ்வாறு தொடங்குவது மற்றும் எங்கள் STM8S கட்டுப்படுத்திகளை நிரல் செய்ய IDE மற்றும் கம்பைலரை எவ்வாறு அமைப்பது என்பதைக் கற்றுக்கொண்டோம். நிலையான புற நூலகங்களை எவ்வாறு பயன்படுத்துவது என்பதையும், எங்கள் மைக்ரோகண்ட்ரோலரில் குறியீட்டை எவ்வாறு தொகுத்தல் மற்றும் பதிவேற்றுவது என்பதையும் நாங்கள் கற்றுக்கொண்டோம். அனைத்து அடிப்படைகளையும் உள்ளடக்கியுள்ளதால், உண்மையில் குறியீட்டை எழுத ஆரம்பிக்கலாம். இந்த டுடோரியலில், STM8S கட்டுப்படுத்திகளில் பொதுவான GPIO செயல்பாடுகளை எவ்வாறு செய்வது என்பதைக் கற்றுக்கொள்வோம். போர்டில் ஏற்கனவே போர்ட் பி இன் முள் 5 உடன் இணைக்கப்பட்ட ஒரு உள் எல்.ஈ.டி உள்ளது, இந்த எல்.ஈ.டியை எவ்வாறு ஒளிரச் செய்வது என்பதைக் கற்றுக்கொள்வோம், மேலும் வெளிப்புற எல்.ஈ.டி யையும் சேர்த்து புஷ்-பொத்தான் மூலம் கட்டுப்படுத்தலாம். நீங்கள் முற்றிலும் புதியவர் என்றால், நீங்கள் மேற்கொள்வதற்கு முன் முந்தைய டுடோரியலைப் படிக்க மிகவும் பரிந்துரைக்கப்படுகிறது.
வன்பொருள் தயார் செய்தல்
நாங்கள் நிரலுக்குள் நுழைவதற்கு முன், வன்பொருள் இணைப்புகளைத் தயார் செய்யட்டும். ஆரம்பத்தில் குறிப்பிட்டுள்ளபடி, நாங்கள் இங்கே இரண்டு எல்.ஈ.டிகளைப் பயன்படுத்துவோம், ஒன்று ஆன்-போர்டு எல்.ஈ.டி, இது தொடர்ந்து ஒளிரும், மற்றொன்று வெளிப்புற எல்.ஈ.டி ஆகும், இது புஷ் பொத்தானைக் கொண்டு மாற்றப்படும். அனைத்து ஜி.பி.ஐ.ஓ செயல்பாடுகளையும் எளிமையான அமைப்பில் கற்க வேண்டும் என்பது யோசனை. ஆன்-போர்டு லெட் ஏற்கனவே PB5 (PORTB இன் pin5) உடன் இணைக்கப்பட்டுள்ளது, எனவே நான் ஒரு எல்.ஈ.டி யை PA3 உடன் இணைத்துள்ளேன், PA2 உடன் ஒரு புஷ்-பொத்தானை இணைத்துள்ளேன், கீழே உள்ள வரைபடத்தில் நீங்கள் காணலாம்.

ஆனால், எங்கள் கட்டுப்பாட்டில் உள்ள அனைத்து வெளியீட்டு ஊசிகளிலும் நான் ஏன் வெளியீட்டிற்கு PA3 மற்றும் உள்ளீட்டிற்கு PA2 ஐ தேர்ந்தெடுத்தேன்? கேள்விகள் செல்லுபடியாகும், அதை இந்த கட்டுரையில் பின்னர் விளக்குகிறேன். இந்த டுடோரியலுக்கான எனது வன்பொருள் அமைவு கீழே காட்டப்பட்டுள்ளது. நீங்கள் பார்க்க முடியும் என, நான் என் எஸ்.டி-இணைப்பு புரோகிராமரை நிரலாக்க ஊசிகளுடன் இணைத்துள்ளேன், இது எங்கள் போர்டை நிரல் செய்வது மட்டுமல்லாமல் ஒரு சக்தி மூலமாகவும் செயல்படும்.

STM8S103F இல் GPIO பின்அவுட்களைப் புரிந்துகொள்வது
இப்போது மீண்டும் கேள்விக்கு வருகிறேன், ஏன் உள்ளீட்டுக்கு PA2 மற்றும் வெளியீட்டிற்கு PA3 ஏன்? அதைப் புரிந்து கொள்ள, கீழே காட்டப்பட்டுள்ள மைக்ரோகண்ட்ரோலரின் பின்அவுட்டை உற்று நோக்கலாம்.

பின்அவுட் வரைபடத்தின்படி, எங்கள் மைக்ரோகண்ட்ரோலரில் நான்கு துறைமுகங்கள் உள்ளன, அதாவது PORT A, B, C மற்றும் D முறையே PA, PB, PC மற்றும் PD ஆல் குறிக்கப்படுகின்றன. ஒவ்வொரு ஜி.பீ.ஓ முள் வேறு சில சிறப்பு செயல்பாடுகளுடன் இணைக்கப்பட்டுள்ளது. எடுத்துக்காட்டாக, PB5 (PORT B இன் முள் 5) ஒரு GPIO முள் மட்டுமல்லாமல் I2C தகவல்தொடர்புக்கான SDA முள் மற்றும் டைமர் 1 வெளியீட்டு முள் போன்றவையாகவும் செயல்பட முடியும். எனவே, எல்.ஈ.டியை இணைப்பது போன்ற எளிய ஜி.பீ.ஓ நோக்கங்களுக்காக இந்த முள் பயன்படுத்தினால், ஒரே நேரத்தில் ஐ 2 சி மற்றும் எல்.ஈ.டி ஆகியவற்றைப் பயன்படுத்த முடியாது. துரதிர்ஷ்டவசமாக, ஆன்-போர்டு எல்.ஈ.டி இந்த முள் உடன் இணைக்கப்பட்டுள்ளது, எனவே இங்கு எங்களுக்கு அதிக தேர்வு இல்லை, இந்த திட்டத்தில், நாங்கள் I2C ஐப் பயன்படுத்தப் போவதில்லை, எனவே இது மிகவும் சிக்கலாக இல்லை.
STM8S103F GPIO தேர்வுக்கான பின்அவுட் விளக்கம் மற்றும் உதவிக்குறிப்புகள்
உண்மையிலேயே பேசினால், PA1 ஒரு உள்ளீட்டு முள் பயன்படுத்துவது புண்படுத்தாது, அது முள் வேலை செய்யும். ஆனால் ஒரு புதிய மைக்ரோகண்ட்ரோலரில் ஜிபிஐஓ ஊசிகளைத் தேர்ந்தெடுக்கும்போது நீங்கள் விழக்கூடிய சில பொதுவான பொறிகளைக் காண்பிப்பதற்கான வாய்ப்பை வழங்குவதற்காக நான் இதை வேண்டுமென்றே கொண்டு வந்தேன். பொறிகளைத் தவிர்ப்பது STM8S103F3P6 தரவுத்தாள் இல் வழங்கப்பட்ட முள் விவரங்கள் மற்றும் முள் விளக்கத்தைப் படிப்பது. தரவுத்தாள் குறிப்பிடப்பட்டுள்ள STM8S103F3P6 மைக்ரோகண்ட்ரோலர் முள் விளக்க விவரங்களுக்கு கீழே படங்கள் காட்டப்பட்டுள்ளன.

எங்கள் மைக்ரோகண்ட்ரோலரில் உள்ளீட்டு ஊசிகளை மிதக்கும் அல்லது பலவீனமான இழுக்கக்கூடியதாக இருக்கலாம் மற்றும் வெளியீட்டு ஊசிகளை திறந்த வடிகால் அல்லது புஷ்-புல் ஆக இருக்கலாம். திறந்த வடிகால் மற்றும் புஷ்-புல் வெளியீட்டு ஊசிகளுக்கு இடையிலான வேறுபாடு ஏற்கனவே விவாதிக்கப்பட்டது, எனவே அதன் விவரங்களை நாங்கள் பெற மாட்டோம். எளிமையாகச் சொல்வதென்றால், ஒரு திறந்த வடிகால் வெளியீட்டு முள் வெளியீட்டை மிகக் குறைவாகவோ அல்லது குறைவாகவோ மட்டுமே செய்ய முடியும், அதே சமயம் ஒரு புஷ்-புல் வெளியீட்டு முள் வெளியீட்டை அதிகமாகவும் அதிகமாகவும் செய்யலாம்.
மேலேயுள்ள அட்டவணையைத் தவிர, ஒரு வெளியீட்டு முள் வேகமாக வெளியீடு (10 மெகா ஹெர்ட்ஸ்) அல்லது மெதுவான வெளியீடு (2 மெகா ஹெர்ட்ஸ்) ஆக இருப்பதையும் நீங்கள் கவனிக்கலாம். இது GPIO வேகத்தை தீர்மானிக்கிறது, உங்கள் GPIO ஊசிகளை உயர் மற்றும் குறைந்த வேகத்திற்கு இடையில் மாற்ற விரும்பினால், நாங்கள் வேகமான வெளியீட்டை தேர்வு செய்யலாம்.

எங்கள் கட்டுப்படுத்தியில் உள்ள சில ஜிபிஐஓ ஊசிகளும் மேலே உள்ள படத்தில் குறிப்பிடப்பட்டுள்ளபடி உண்மையான திறந்த வடிகால் (டி) மற்றும் உயர் மூழ்கி மின்னோட்டத்தை (எச்எஸ்) ஆதரிக்கின்றன. திறந்த வடிகால் மற்றும் உண்மையான திறந்த வடிகால் ஆகியவற்றுக்கு இடையேயான கணிசமான வேறுபாடு என்னவென்றால், திறந்த வடிகால் இணைக்கப்பட்ட வெளியீட்டை மைக்ரோகண்ட்ரோலரின் (Vdd) இயக்க மின்னழுத்தத்தை விட அதிகமாக இழுக்க முடியாது, அதே நேரத்தில் உண்மையான திறந்த-வடிகால் வெளியீட்டு முள் Vdd ஐ விட அதிகமாக இழுக்க முடியும். உயர் மூழ்கும் திறன் கொண்ட பின்ஸ் என்றால் அது அதிக மின்னோட்டத்தை மூழ்கடிக்கும். எந்த GPIO HS முள் மூலமும் மடு மின்னோட்டமும் 20mA ஆகும், அதே நேரத்தில் மின் இணைப்பு 100 mA வரை நுகரும்.
மேலே உள்ள படத்தை உற்று நோக்கினால், பிபி 4 மற்றும் பிபி 5 ஐத் தவிர கிட்டத்தட்ட அனைத்து ஜிபிஐஓ ஊசிகளும் உயர் மடு மின்னோட்ட (எச்எஸ்) வகையாகும், அவை உண்மையான திறந்த வடிகால் வகை (டி). இதன் பொருள் இந்த ஊசிகளை அதிகமாக்க முடியாது, முள் அதிகமாக்கப்பட்டாலும் அவை 3.3 வி வழங்க முடியாது. இதனால்தான் ஆன்-போர்டு லெட் ஒரு 3.3 வி உடன் இணைக்கப்பட்டுள்ளது மற்றும் ஜிபிஐஓ முள் இருந்து நேரடியாக அதை இயக்குவதற்கு பதிலாக பிபி 5 மூலம் தரையிறக்கப்படுகிறது.

விரிவான முள் விளக்கத்திற்கு தரவுத்தாள் 28 ஆம் பக்கத்தைப் பார்க்கவும். மேலே உள்ள படத்தில் குறிப்பிட்டுள்ளபடி, PA1 தானாகவே பலவீனமான இழுக்கலாக கட்டமைக்கப்படுகிறது மற்றும் வெளியீட்டு முள் பயன்படுத்த பரிந்துரைக்கப்படவில்லை. எப்படியிருந்தாலும் அதை ஒரு புஷ்-பொத்தானுடன் உள்ளீட்டு முள் போலப் பயன்படுத்தலாம், ஆனால் நிரலிலிருந்து இழுக்க முயற்சிக்க PA2 ஐப் பயன்படுத்த முடிவு செய்தேன். இவை சில அடிப்படை விஷயங்கள், அவை மிகவும் சிக்கலான நிரல்களை எழுதும்போது பயனுள்ளதாக இருக்கும். இப்போதைக்கு, பல விஷயங்கள் உங்கள் தலையில் இருந்து குதித்தால் பரவாயில்லை, மற்ற பயிற்சிகளில் நாங்கள் அதை அடுக்குகிறோம்.
SPL ஐப் பயன்படுத்தி GPIO உள்ளீடு மற்றும் வெளியீட்டிற்கான STM8S ஐ நிரல் செய்தல்
எங்கள் முதல் டுடோரியலில் விவாதித்தபடி பணியிடத்தையும் புதிய திட்டத்தையும் உருவாக்கவும். நீங்கள் அனைத்து தலைப்பு மற்றும் மூல கோப்புகளையும் சேர்க்கலாம் அல்லது gpio, config மற்றும் stm8s கோப்புகளை மட்டுமே சேர்க்கலாம். Main.c கோப்பைத் திறந்து உங்கள் நிரலை எழுதத் தொடங்குங்கள்.

மேலே உள்ள படத்தில் காட்டப்பட்டுள்ளபடி தலைப்பு கோப்புகளை நீங்கள் சேர்த்துள்ளீர்கள் என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். Main.c கோப்பைத் திறந்து குறியீட்டைத் தொடங்கவும் . முழுமையான main.c குறியீட்டை இந்தப் பக்கத்தின் கீழே காணலாம், மேலும் திட்டக் கோப்பையும் அங்கிருந்து பதிவிறக்கம் செய்ய முடியும். குறியீட்டின் விளக்கம் பின்வருமாறு, நீங்கள் குறியீட்டு பகுதியைப் பற்றி குழப்பமடைந்தால், SPL பயனர் கையேடு அல்லது இந்தப் பக்கத்தின் கீழே இணைக்கப்பட்ட வீடியோவையும் குறிப்பிடலாம்.
தேவையான துறைமுகத்தை துவக்குதல்
தேவையான துறைமுகங்களை டி-துவக்குவதன் மூலம் எங்கள் திட்டத்தைத் தொடங்குகிறோம். நாங்கள் முன்பு விவாதித்தபடி, ஒவ்வொரு ஜி.பீ.ஓ முள் ஒரு சாதாரண உள்ளீடு மற்றும் வெளியீட்டைப் போல செயல்படுவதைத் தவிர வேறு பல செயல்பாடுகளைக் கொண்டிருக்கும். இந்த ஊசிகளை முன்னர் வேறு சில பயன்பாடுகளுக்குப் பயன்படுத்தியிருந்தால், அவற்றைப் பயன்படுத்துவதற்கு முன்பு அதை டி-துவக்க வேண்டும். இது கட்டாயமில்லை, இருப்பினும், இது ஒரு நல்ல நடைமுறை. போர்ட் ஏ மற்றும் போர்ட் பி ஆகியவற்றை டி-துவக்க பின்வரும் இரண்டு வரிகள் பயன்படுத்தப்படுகின்றன. தொடரியல் GPIO_DeInit (GPIOx) ஐப் பயன்படுத்தவும் ; x க்கு பதிலாக துறைமுக பெயரைக் குறிப்பிடவும்.
GPIO_DeInit (GPIOA); // GPIO_DeInit (GPIOB) வேலை செய்ய போர்ட் A ஐ தயார் செய்யுங்கள்; // வேலை செய்ய போர்ட் பி தயார்
உள்ளீடு மற்றும் வெளியீடு GPIO பிரகடனம்
அடுத்து, எந்த ஊசிகளை உள்ளீடாகவும் எந்த வெளியீட்டாகவும் பயன்படுத்த வேண்டும் என்பதை அறிவிக்க வேண்டும். எங்கள் விஷயத்தில், பின் PA2 உள்ளீடாகப் பயன்படுத்தப்படும், இந்த முள் உள் புல்-அப் மூலம் அறிவிப்போம், இதனால் நாம் வெளிப்புறமாக ஒன்றைப் பயன்படுத்த வேண்டியதில்லை. தொடரியல் GPIO_Init (GPIOx, GPIO_PIN_y, GPIO_PIN_MODE_z); . X என்பது போர்ட் பெயர், y என்பது முள் எண், மற்றும் z என்பது GPIO பின் பயன்முறை.
// PA2 ஐ உள்ளீட்டு இழுக்கும் முள் GPIO_Init (GPIOA, GPIO_PIN_2, GPIO_MODE_IN_PU_IT) என அறிவிக்கவும்;
அடுத்து, பின்ஸ் PA3 மற்றும் PB5 ஐ வெளியீடாக அறிவிக்க வேண்டும். மீண்டும் பல வகையான வெளியீட்டு அறிவிப்பு சாத்தியம், ஆனால் நாங்கள் “GPIO_MODE_OUT_PP_LOW_SLOW” ஐப் பயன்படுத்துவோம், அதாவது மெதுவான வேகத்துடன் புஷ்-புல் வகையின் வெளியீட்டு முள் என்று அறிவிப்போம். இயல்பாக, மதிப்பு குறைவாக இருக்கும். தொடரியல் ஒரே மாதிரியாக இருக்கும்.
GPIO_Init (GPIOA, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_SLOW); // PB5 ஐ புஷ் புல் வெளியீட்டு முள் GPIO_Init (GPIOB, GPIO_PIN_5, GPIO_MODE_OUT_PP_LOW_SLOW) என அறிவிக்கவும்;
எஸ்பிஎல் பயனர் கையேட்டில் இருந்து கீழே உள்ள ஸ்னாப்ஷாட் சாத்தியமான அனைத்து ஜிபிஐஓ முறைகளையும் (z) குறிப்பிடுகிறது.

வளைய போது எல்லையற்றது
முள் அறிவிப்புக்குப் பிறகு, நாம் எல்லையற்ற சுழற்சியை உருவாக்க வேண்டும், அதற்குள் எல்.ஈ.டியை எப்போதும் ஒளிரச் செய்வோம், எல்.ஈ.டி மாற்றுவதற்கு புஷ் பொத்தானின் நிலையைக் கண்காணிப்போம். எல்லையற்ற வளையத்தை சிறிது நேரம் (1) அல்லது ஒரு (;;) உடன் உருவாக்கலாம் . இங்கே நான் பயன்படுத்தினேன் (1).
(1) {} போது
உள்ளீட்டு முள் நிலையை சரிபார்க்கிறது
உள்ளீட்டு முள் நிலையை நாம் சரிபார்க்க வேண்டும், அதைச் செய்வதற்கான தொடரியல் GPIO_ReadInputPin (GPIOx, GPIO_PIN_y); x என்பது போர்ட் பெயர் மற்றும் y என்பது முள் எண். முள் அதிகமாக இருந்தால், நமக்கு '1' கிடைக்கும், முள் குறைவாக இருந்தால், நமக்கு '0' கிடைக்கும். முள் அதிகமாகவோ அல்லது குறைவாகவோ இருக்கிறதா என்று சோதிக்க ஒரு if loop க்குள் பயன்படுத்தினோம்.
if (GPIO_ReadInputPin (GPIOA, GPIO_PIN_2)) // பொத்தானை அழுத்தினால்
ஒரு GPIO முள் உயர் அல்லது குறைவாக உருவாக்குதல்
ஒரு GPIO முள் உயர் அல்லது குறைவாக செய்ய, நாங்கள் GPIO_WriteHigh (GPIOx, GPIO_PIN_y) ஐப் பயன்படுத்தலாம் ; மற்றும் GPIO_WriteLow (GPIOx, GPIO_PIN_y); முறையே. பொத்தானை அழுத்தினால் இயக்கவும், பொத்தானை அழுத்தவில்லை என்றால் அணைக்கவும் எல்.ஈ.டி.
if (GPIO_ReadInputPin (GPIOA, GPIO_PIN_2)) // பொத்தானை அழுத்தினால் GPIO_WriteLow (GPIOA, GPIO_PIN_3); // LED இல் வேறு GPIO_WriteHigh (GPIOA, GPIO_PIN_3); // எல்.ஈ.டி ஆஃப்
GPIO பின்னை மாற்றுகிறது
GPIO முள் நிலைமாற்ற, எங்களிடம் GPIO_WriteReverse (GPIOx, GPIO_PIN_y) உள்ளது; இந்த செயல்பாட்டை அழைப்பது வெளியீட்டு முள் நிலையை மாற்றும். முள் அதிகமாக இருந்தால், அது குறைந்ததாக மாற்றப்படும், அது குறைவாக இருந்தால், அது உயர்வாக மாற்றப்படும். பிபி 5 இல் ஆன்-போர்டு எல்.ஈ.டி ஒளிர இந்த செயல்பாட்டைப் பயன்படுத்துகிறோம்.
GPIO_WriteReverse (GPIOB, GPIO_PIN_5);
தாமதம் செயல்பாடு
Arduino போலல்லாமல், அண்ட தொகுப்பி முன் வரையறுக்கப்பட்ட தாமத செயல்பாட்டைக் கொண்டிருக்கவில்லை. எனவே நாம் சொந்தமாக ஒன்றை உருவாக்க வேண்டும். எனது தாமத செயல்பாடு கீழே கொடுக்கப்பட்டுள்ளது. மதிப்பு தாமதம் மாறி எம்.எஸ்ஸில் பெறப்படும், மேலும் இருப்பு அல்லது நிரல் செயல்படுத்த லூப்பிற்கு இரண்டைப் பயன்படுத்துவோம். போல் _asm ("என்ஓபி") எந்த செயல்படும் குறிக்கும் ஒரு சட்டசபை வழிமுறை உள்ளது. இதன் பொருள் எந்தவொரு செயல்பாட்டையும் செய்யாமல் கட்டுப்படுத்தி ஃபார் லூப்பில் சுழலும், இதனால் தாமதத்தை உருவாக்கும்.
வெற்றிட தாமதம் (int ms) // செயல்பாட்டு வரையறை {int i = 0; int j = 0; for (i = 0; i <= ms; i ++) {for (j = 0; j <120; j ++) // Nop = Fosc / 4 _asm ("nop"); // எந்த நடவடிக்கையும் செய்ய வேண்டாம் // சட்டசபை குறியீடு}}
நிரலைப் பதிவேற்றுதல் மற்றும் சோதனை செய்தல்
இப்போது எங்கள் நிரல் தயாராக உள்ளது, அதை பதிவேற்றலாம் மற்றும் சோதிக்கலாம். பதிவேற்றியதும், எனது வன்பொருள் எதிர்பார்த்தபடி செயல்பட்டு வந்தது. ஆன்-போர்டு சிவப்பு எல்.ஈ.டி ஒவ்வொரு 500 மில்லி விநாடிகளுக்கும் ஒளிரும் மற்றும் நான் சுவிட்சை அழுத்தும் ஒவ்வொரு முறையும் வெளிப்புற பச்சை எல்.ஈ.

முழுமையான வேலைகளை கீழே இணைக்கப்பட்ட வீடியோவில் காணலாம். இந்த நிலையை அடைந்ததும், சுவிட்ச் மற்றும் எல்.ஈ.யை வெவ்வேறு ஊசிகளுடன் இணைக்க முயற்சி செய்யலாம் மற்றும் கருத்தை புரிந்து கொள்ள குறியீட்டை மீண்டும் எழுதலாம். நீங்கள் கருத்துக்களை தெளிவாக புரிந்து கொண்டீர்களா என்பதை சரிபார்க்க தாமத நேரத்துடன் நீங்கள் விளையாடலாம்.
உங்களிடம் ஏதேனும் கேள்விகள் இருந்தால், தயவுசெய்து அவற்றை கீழே உள்ள கருத்துப் பிரிவிலும் மற்ற தொழில்நுட்ப கேள்விகளுக்கும் விடுங்கள், நீங்கள் எங்கள் மன்றங்களைப் பயன்படுத்தலாம். பின்தொடர்ந்ததற்கு நன்றி, அடுத்த டுடோரியலில் சந்திப்போம்.
