- హార్డ్వేర్ సిద్ధంగా ఉంది
- STM8S103F లో GPIO పిన్అవుట్లను అర్థం చేసుకోవడం
- STM8S103F GPIO ఎంపిక కోసం పిన్అవుట్ వివరణ మరియు చిట్కాలు
- SPL ఉపయోగించి GPIO ఇన్పుట్ మరియు అవుట్పుట్ కోసం STM8S ప్రోగ్రామింగ్
- ప్రోగ్రామ్ను అప్లోడ్ చేయడం మరియు పరీక్షించడం
మైక్రోకంట్రోలర్ల కోసం, LED బ్లింకింగ్ ప్రోగ్రామ్ “హలో వరల్డ్” ప్రోగ్రామ్కు సమానం. మా మునుపటి ట్యుటోరియల్లో, STM8S103F3 డెవలప్మెంట్ బోర్డ్తో ఎలా ప్రారంభించాలో మరియు మా STM8S కంట్రోలర్లను ప్రోగ్రామ్ చేయడానికి IDE మరియు కంపైలర్ను ఎలా ఏర్పాటు చేయాలో నేర్చుకున్నాము. ప్రామాణిక పరిధీయ గ్రంథాలయాలను ఎలా ఉపయోగించాలో మరియు మన మైక్రోకంట్రోలర్లో కోడ్ను ఎలా కంపైల్ చేసి అప్లోడ్ చేయాలో కూడా నేర్చుకున్నాము. అన్ని ప్రాథమికాలను కవర్ చేయడంతో, వాస్తవానికి కోడ్ రాయడం ప్రారంభించండి. ఈ ట్యుటోరియల్లో, STM8S కంట్రోలర్లపై సాధారణ GPIO ఫంక్షన్లను ఎలా చేయాలో నేర్చుకుంటాము. బోర్డు ఇప్పటికే పోర్ట్ B యొక్క పిన్ 5 కి అనుసంధానించబడిన ఆన్బోర్డ్ LED ని కలిగి ఉంది, ఈ LED ని ఎలా రెప్ప వేయాలో నేర్చుకుంటాము మరియు బాహ్య LED ని కూడా జోడించి పుష్-బటన్ తో నియంత్రించండి. మీరు పూర్తిగా క్రొత్తవారైతే, మీరు ఇంకా ముందుకు సాగడానికి ముందు మునుపటి ట్యుటోరియల్ చదవడం చాలా మంచిది.
హార్డ్వేర్ సిద్ధంగా ఉంది
మేము ప్రోగ్రామ్లోకి ప్రవేశించే ముందు, హార్డ్వేర్ కనెక్షన్లను సిద్ధంగా ఉంచండి. ప్రారంభంలో చెప్పినట్లుగా, మేము ఇక్కడ రెండు ఎల్ఈడీలను ఉపయోగిస్తాము, ఒకటి ఆన్బోర్డ్ ఎల్ఇడి, ఇది నిరంతరం మెరిసిపోతుంది మరియు మరొకటి బాహ్య ఎల్ఇడి, ఇది పుష్ బటన్తో టోగుల్ చేయబడుతుంది. అన్ని GPIO కార్యాచరణను సరళమైన సెటప్లో నేర్చుకోవాలనే ఆలోచన ఉంది. ఆన్-బోర్డ్ లెడ్ ఇప్పటికే PB5 (PORTB యొక్క పిన్ 5) కి కనెక్ట్ చేయబడింది, కాబట్టి నేను ఈ క్రింది రేఖాచిత్రంలో చూడగలిగినట్లుగా, నేను LED ను PA3 కి మరియు పుష్-బటన్ను PA2 కి కనెక్ట్ చేసాను.
కానీ, మా నియంత్రితంలో అందుబాటులో ఉన్న అన్ని అవుట్పుట్ పిన్లలో నేను అవుట్పుట్ కోసం PA3 మరియు ఇన్పుట్ కోసం PA2 ను ఎందుకు ఎంచుకున్నాను? ప్రశ్నలు చెల్లుబాటు అయ్యేవి మరియు తరువాత ఈ వ్యాసంలో వివరిస్తాను. ఈ ట్యుటోరియల్ కోసం నా హార్డ్వేర్ సెటప్ క్రింద చూపబడింది. మీరు చూడగలిగినట్లుగా, నేను నా ST- లింక్ ప్రోగ్రామర్ను ప్రోగ్రామింగ్ పిన్లకు కనెక్ట్ చేసాను, ఇది మా బోర్డును ప్రోగ్రామ్ చేయడమే కాకుండా శక్తి వనరుగా కూడా పనిచేస్తుంది.
STM8S103F లో GPIO పిన్అవుట్లను అర్థం చేసుకోవడం
ఇప్పుడు ప్రశ్నకు తిరిగి వస్తోంది, ఇన్పుట్ కోసం PA2 ఎందుకు మరియు అవుట్పుట్ కోసం PA3 ఎందుకు? దాన్ని అర్థం చేసుకోవడానికి, క్రింద చూపిన మైక్రోకంట్రోలర్ యొక్క పిన్అవుట్ ని దగ్గరగా చూద్దాం.
పిన్అవుట్ రేఖాచిత్రం ప్రకారం, మా మైక్రోకంట్రోలర్లో నాలుగు పోర్టులు ఉన్నాయి, అవి PORT A, B, C మరియు D వరుసగా PA, PB, PC మరియు PD చే సూచించబడతాయి. ప్రతి GPIO పిన్ కొన్ని ఇతర ప్రత్యేక కార్యాచరణలతో కూడి ఉంటుంది. ఉదాహరణకు, PB5 (PORT B యొక్క పిన్ 5) GPIO పిన్గా మాత్రమే కాకుండా I2C కమ్యూనికేషన్ కోసం SDA పిన్గా మరియు టైమర్ 1 అవుట్పుట్ పిన్గా కూడా పనిచేయగలదు. కాబట్టి, మేము ఈ పిన్ను LED ని కనెక్ట్ చేయడం వంటి సాధారణ GPIO ప్రయోజనాల కోసం ఉపయోగిస్తే, అప్పుడు మేము ఒకే సమయంలో I2C మరియు LED లను ఉపయోగించలేము. పాపం, ఆన్-బోర్డు LED ఈ పిన్తో అనుసంధానించబడి ఉంది, కాబట్టి ఇక్కడ మాకు ఎక్కువ ఎంపిక లేదు, మరియు ఈ ప్రోగ్రామ్లో, మేము I2C ని ఉపయోగించబోవడం లేదు, కాబట్టి ఇది చాలా సమస్య కాదు.
STM8S103F GPIO ఎంపిక కోసం పిన్అవుట్ వివరణ మరియు చిట్కాలు
నిజంగా చెప్పాలంటే, PA1 ఇన్పుట్ పిన్ను ఉపయోగించడం బాధించదు మరియు ఇది పిన్గా పనిచేస్తుంది. కొత్త మైక్రోకంట్రోలర్పై GPIO పిన్లను ఎన్నుకునేటప్పుడు మీరు పడే కొన్ని సాధారణ ఉచ్చులను మీకు చూపించే అవకాశాన్ని కల్పించడానికి నేను ఉద్దేశపూర్వకంగా దీనిని తీసుకువచ్చాను. STM8S103F3P6 డేటాషీట్లో అందించిన పిన్ వివరాలు మరియు పిన్ వివరణను చదవడం ఉచ్చులను నివారించడానికి ఉత్తమమైనది. డేటాషీట్లో పేర్కొన్న STM8S103F3P6 మైక్రోకంట్రోలర్ పిన్ వివరణ వివరాల కోసం చిత్రాల క్రింద చూపబడింది.
మా మైక్రోకంట్రోలర్లోని ఇన్పుట్ పిన్లు తేలియాడేవి లేదా బలహీనమైన పుల్-అప్ కావచ్చు మరియు అవుట్పుట్ పిన్లు ఓపెన్ డ్రెయిన్ లేదా పుష్-పుల్ కావచ్చు. ఓపెన్ డ్రెయిన్ మరియు పుష్-పుల్ అవుట్పుట్ పిన్ల మధ్య వ్యత్యాసం ఇప్పటికే చర్చించబడింది, అందువల్ల మేము దాని వివరాలను పొందలేము. సరళంగా చెప్పాలంటే, ఓపెన్ డ్రెయిన్ అవుట్పుట్ పిన్ అవుట్పుట్ను తక్కువ కాదు మాత్రమే చేయగలదు, అయితే పుష్-పుల్ అవుట్పుట్ పిన్ అవుట్పుట్ను అధికంగా మరియు అధికంగా చేస్తుంది.
పై పట్టిక కాకుండా, అవుట్పుట్ పిన్ ఫాస్ట్ అవుట్పుట్ (10 Mhz) లేదా నెమ్మదిగా అవుట్పుట్ (2 MHz) కావచ్చు అని కూడా మీరు గమనించవచ్చు. ఇది GPIO వేగాన్ని నిర్ణయిస్తుంది, మీరు మీ GPIO పిన్లను అధిక మరియు తక్కువ మధ్య చాలా వేగంగా మార్చాలనుకుంటే, మేము ఫాస్ట్ అవుట్పుట్ను ఎంచుకోవచ్చు.
మా కంట్రోలర్లోని కొన్ని GPIO పిన్లు పైన పేర్కొన్న చిత్రంలో పేర్కొన్న విధంగా ట్రూ ఓపెన్ డ్రెయిన్ (T) మరియు హై సింక్ కరెంట్ (HS) కు మద్దతు ఇస్తాయి. ఓపెన్ డ్రెయిన్ మరియు ట్రూ ఓపెన్ డ్రెయిన్ మధ్య గణనీయమైన వ్యత్యాసం ఏమిటంటే, ఓపెన్ కాలువకు అనుసంధానించబడిన అవుట్పుట్ మైక్రోకంట్రోలర్ (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 ఫైల్ను తెరిచి కోడ్ను ప్రారంభించండి. పూర్తి మెయిన్ సి కోడ్ ఈ పేజీ దిగువన చూడవచ్చు మరియు మీరు అక్కడ నుండి ప్రాజెక్ట్ ఫైల్ను కూడా డౌన్లోడ్ చేసుకోగలరు. కోడ్ యొక్క వివరణ ఈ క్రింది విధంగా ఉంది, మీరు కోడింగ్ భాగం గురించి గందరగోళంలో ఉంటే మీరు SPL యూజర్ మాన్యువల్ లేదా ఈ పేజీ దిగువన లింక్ చేయబడిన వీడియోను కూడా చూడవచ్చు.
అవసరమైన పోర్టును డి-ప్రారంభించడం
అవసరమైన పోర్టులను డి-ప్రారంభించడం ద్వారా మేము మా ప్రోగ్రామ్ను ప్రారంభిస్తాము. మేము ఇంతకుముందు చర్చించినట్లుగా, ప్రతి GPIO పిన్ సాధారణ ఇన్పుట్ మరియు అవుట్పుట్ లాగా పనిచేయడం మినహా దానితో సంబంధం ఉన్న అనేక ఇతర విధులను కలిగి ఉంటుంది. ఈ పిన్లను ఇంతకుముందు కొన్ని ఇతర అనువర్తనాల కోసం ఉపయోగించినట్లయితే, మేము వాటిని ఉపయోగించే ముందు దాన్ని డి-ఇనిషియలైజ్ చేయాలి. ఇది తప్పనిసరి కాదు, అయితే, ఇది మంచి పద్ధతి. పోర్ట్ A మరియు పోర్ట్ B ని డి-ప్రారంభించడానికి ఈ క్రింది రెండు పంక్తుల కోడ్ ఉపయోగించబడుతుంది. కేవలం వాక్యనిర్మాణం GPIO_DeInit (GPIOx) ను వాడండి; మరియు x స్థానంలో పోర్ట్ పేరును పేర్కొనండి.
GPIO_DeInit (GPIOA); // GPIO_DeInit (GPIOB) పని కోసం పోర్ట్ A ను సిద్ధం చేయండి; // పని కోసం పోర్ట్ B ను సిద్ధం చేయండి
ఇన్పుట్ మరియు అవుట్పుట్ 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);
SPL యూజర్ మాన్యువల్ నుండి దిగువ స్నాప్షాట్ అన్ని GPIO మోడ్లను (z) ప్రస్తావించింది.
లూప్ అయితే అనంతం
పిన్ డిక్లరేషన్ తరువాత, మనం అనంతమైన లూప్ను సృష్టించాలి, దానిలో మనం ఎల్ఈడీని ఎప్పటికీ మెరిసేలా చేస్తాము మరియు ఎల్ఈడీని టోగుల్ చేయడానికి పుష్ బటన్ స్థితిని పర్యవేక్షిస్తాము. అనంతమైన లూప్ కొంతకాలం (1) తో లేదా ఒక (;;) తో సృష్టించవచ్చు . ఇక్కడ నేను ఉపయోగించాను (1).
(1) while while అయితే
ఇన్పుట్ పిన్ స్థితిని తనిఖీ చేస్తోంది
మేము ఇన్పుట్ పిన్ యొక్క స్థితిని తనిఖీ చేయాలి, అలా చేయటానికి సింటాక్స్ GPIO_ReadInputPin (GPIOx, GPIO_PIN_y); ఇక్కడ x పోర్ట్ పేరు మరియు y పిన్ సంఖ్య. పిన్ ఎక్కువగా ఉంటే, మనకు '1' లభిస్తుంది మరియు పిన్ తక్కువగా ఉంటే, మనకు '0' లభిస్తుంది. పిన్ ఎక్కువ లేదా తక్కువగా ఉందో లేదో తనిఖీ చేయడానికి మేము ఒక if లూప్ లోపల ఉపయోగించాము.
if (GPIO_ReadInputPin (GPIOA, GPIO_PIN_2)) // బటన్ నొక్కితే
GPIO పిన్ను ఎక్కువ లేదా తక్కువ చేయడం
GPIO పిన్ను ఎక్కువ లేదా తక్కువ చేయడానికి, మేము GPIO_WriteHigh (GPIOx, GPIO_PIN_y) ను ఉపయోగించవచ్చు; మరియు GPIO_WriteLow (GPIOx, GPIO_PIN_y); వరుసగా. బటన్ నొక్కినట్లయితే ఆన్ చేయడానికి మరియు బటన్ నొక్కినట్లయితే ఆపివేయడానికి ఇక్కడ మేము LED ని తయారు చేసాము.
if (GPIO_ReadInputPin (GPIOA, GPIO_PIN_2)) // బటన్ నొక్కితే GPIO_WriteLow (GPIOA, GPIO_PIN_3); // LED ఆన్ వేరే GPIO_WriteHigh (GPIOA, GPIO_PIN_3); // LED ఆఫ్
GPIO పిన్ను టోగుల్ చేస్తోంది
GPIO పిన్ను టోగుల్ చేయడానికి, మాకు GPIO_WriteReverse (GPIOx, GPIO_PIN_y) ఉంది; ఈ ఫంక్షన్ను పిలవడం అవుట్పుట్ పిన్ యొక్క స్థితిని మారుస్తుంది. పిన్ ఎక్కువగా ఉంటే, అది తక్కువకు మార్చబడుతుంది మరియు అది తక్కువగా ఉంటే, అది అధికంగా మార్చబడుతుంది. PB5 లో ఆన్బోర్డ్ LED ని రెప్ప వేయడానికి మేము ఈ ఫంక్షన్ను ఉపయోగిస్తున్నాము.
GPIO_WriteReverse (GPIOB, GPIO_PIN_5);
ఆలస్యం ఫంక్షన్
ఆర్డునో మాదిరిగా కాకుండా, కాస్మిక్ కంపైలర్కు ముందుగా నిర్వచించిన ఆలస్యం ఫంక్షన్ లేదు. కాబట్టి మన స్వంతంగా ఒకదాన్ని సృష్టించాలి. నా ఆలస్యం ఫంక్షన్ క్రింద ఇవ్వబడింది. విలువ ఆలస్యం వేరియబుల్ ms లో స్వీకరించబడుతుంది మరియు లూప్ కోసం పట్టుటకు లేదా ప్రోగ్రామ్ ఎగ్జిక్యూషన్ కొరకు రెండింటిని ఉపయోగిస్తాము. ఇలా _asm ("NOP") ఏ ఆపరేషన్ కోసం నిలుచునే ఒక అసెంబ్లీ ఆదేశం. దీని అర్థం కంట్రోలర్ ఎటువంటి ఆపరేషన్ చేయకుండా ఫోర్ లూప్లోకి లూప్ అవుతుందని, తద్వారా ఆలస్యం ఏర్పడుతుంది.
void delay (int ms) // ఫంక్షన్ నిర్వచనం {int i = 0; int j = 0; (i = 0; i <= ms; i ++) {for (j = 0; j <120; j ++) // Nop = Fosc / 4 _asm ("nop"); // ఆపరేషన్ చేయవద్దు // అసెంబ్లీ కోడ్}}
ప్రోగ్రామ్ను అప్లోడ్ చేయడం మరియు పరీక్షించడం
ఇప్పుడు మా ప్రోగ్రామ్ సిద్ధంగా ఉంది, మేము దానిని అప్లోడ్ చేసి పరీక్షించవచ్చు. అప్లోడ్ చేసిన తర్వాత, నా హార్డ్వేర్.హించిన విధంగా పనిచేస్తోంది. ఆన్-బోర్డ్ ఎరుపు LED ప్రతి 500 మిల్లీసెకన్లకు మెరిసేది మరియు నేను స్విచ్ నొక్కిన ప్రతిసారీ బాహ్య ఆకుపచ్చ LED ఆన్ చేయబడింది.
పూర్తి లింక్ క్రింద లింక్ చేయబడిన వీడియోలో చూడవచ్చు. మీరు ఈ దశకు చేరుకున్న తర్వాత, మీరు స్విచ్ మరియు ఎల్ఇడిని వేర్వేరు పిన్లకు కనెక్ట్ చేయడానికి ప్రయత్నించవచ్చు మరియు భావనను అర్థం చేసుకోవడానికి కోడ్ను తిరిగి వ్రాయవచ్చు. మీరు భావనలను స్పష్టంగా అర్థం చేసుకున్నారో లేదో తనిఖీ చేయడానికి మీరు ఆలస్యం సమయంతో కూడా ఆడవచ్చు.
మీకు ఏవైనా ప్రశ్నలు ఉంటే, దయచేసి వాటిని క్రింది వ్యాఖ్య విభాగంలో మరియు ఇతర సాంకేతిక ప్రశ్నల కోసం ఉంచండి, మీరు మా ఫోరమ్లను ఉపయోగించవచ్చు. అనుసరించినందుకు ధన్యవాదాలు, తదుపరి ట్యుటోరియల్లో మిమ్మల్ని చూస్తాము.