Ð
ä»æ¥ã¯ãããŒã¿ã·ãŒãã䜿çšããŠãSTM32 (Blue Pill) ããã³ STM8 ã³ã³ãããŒã©ãŒäžã®ã¿ã¹ã¯ãéåžžã«åçŽã§ããå€ãã®ãããžã§ã¯ãã«å¿ èŠãªã¿ã¹ã¯ã解決ããæ¹æ³ã説æããŸãã ãã¹ãŠã®ã㢠ãããžã§ã¯ãã¯ç§ã®ãæ°ã«å ¥ãã® LED å°çšã§ãããLED ã倧éã«ç¹ç¯ããããããããããçš®é¡ã®èå³æ·±ãåšèŸºæ©åšã䜿çšããå¿ èŠããããŸãã
ãŸãããŠãããã¹ããèšå€§ã«ãªã£ãŠããŸã£ãã®ã§ã䟿å®äžãã³ã³ãã³ãã次ã®ããã«äœæããŸããã
å 責äºé : ç§ã¯ãšã³ãžãã¢ã§ã¯ãªãããšã¬ã¯ãããã¯ã¹ã«é¢ããæ·±ãç¥èããããµããããã€ããããããŸããããã®èšäºã¯ç§ã®ãããªã¢ããã¥ã¢ã察象ãšããŠããŸãã å®éãç§ã¯ XNUMX 幎åãèªåèªèº«ã察象è ã ãšèããŠããŸããã ãããã®æã誰ãããèŠæ £ããªããããã®ããŒã¿ã·ãŒããèªãã®ã¯æããªãããšèšã£ãŠãããŠããããç§ã¯ã€ã³ã¿ãŒãããã§ã³ãŒããæ¢ããããããµããšç²çããŒãã䜿ã£ãŠæŸèæãçºæãããããã®ã«å€ãã®æéãè²»ããããšã¯ãªãã£ãã§ãããã
ãã®èšäºã¯ãããžã§ã¯ãã§ã¯ãªãããŒã¿ã·ãŒãã«çŠç¹ãåœãŠãŠãããããã³ãŒãã¯ããŸãæŽã£ãŠããªãããã°ãã°çª®å±ã«ãªãå¯èœæ§ããããŸãã ãããžã§ã¯ãèªäœã¯éåžžã«ã·ã³ãã«ã§ãããæ°ããããããåããŠç¥ãã®ã«ã¯é©ããŠããŸãã
ç§ã®èšäºããåãããã«è¶£å³ã«æ²¡é ãã段éã«ãã誰ãã®å©ãã«ãªãã°å¹žãã§ãã
STM32
DM16 ããã³ SPI ãåãã 634 åã® LED
Blue Pill (STM32F103C8T6) ãš DM634 LED ãã©ã€ããŒã䜿çšããå°èŠæš¡ãããžã§ã¯ãã ããŒã¿ã·ãŒãã䜿çšããŠããã©ã€ããŒãSTM IO ããŒããç¹å®ããSPI ãæ§æããŸãã
DM634
16 åã® 16 ããã PWM åºåãåããå°æ¹Ÿè£œãããã§ããã§ãŒã³æ¥ç¶ã§ããŸãã ããŒãšã³ãã®12ãããã¢ãã«ã¯åœå
ãããžã§ã¯ãã§ç¥ãããŠããŸã
å°æ¹Ÿã®ã¡ãŒã«ãŒãªã®ã§ã
DCã·ã³ã¯ãœãŒã¹(ãªãŒãã³ãã¬ã€ã³)
ã·ã³ã¯ / ãªãŒãã³ãã¬ã€ã³åºå â ææ°Ž; æµå ¥é»æµæºã ã¢ã¯ãã£ãç¶æ ã§ã¯åºåã¯ã°ã©ã³ãã«æ¥ç¶ãããŸããLED ã¯ã«ãœãŒãã«ãã£ãŠãã©ã€ããŒã«æ¥ç¶ãããŸãã ãã¡ãããé»æ°çã«ã¯ãããã¯ããªãŒãã³ãã¬ã€ã³ãã§ã¯ãããŸãã(ãªãŒãã³ãã¬ã€ã³) ã§ãããããŒã¿ã·ãŒãã§ã¯ãã¬ã€ã³ ã¢ãŒãã®ãã³ã«å¯Ÿãããã®æå®ãããèŠãããŸãã
åºåé»æµå€ãèšå®ããããã® REXT ãš GND éã®å€ä»ãæµæ
REXT ãã³ãšã°ã©ã³ãã®éã«åºæºæµæãèšçœ®ãããåºåã®å éšæµæãå¶åŸ¡ããŸããããŒã¿ã·ãŒãã® 9 ããŒãžã®ã°ã©ããåç §ããŠãã ããã DM634 ã§ã¯ããã®æµæããœãããŠã§ã¢ã§å¶åŸ¡ããããšãã§ããå šäœã®æãããèšå®ããŸã (ã°ããŒãã«ãªæãã); ãã®èšäºã§ã¯è©³çŽ°ã«ã¯è§ŠããŸããããããã«ã¯ 2.2 ïœ 3 kOhm ã®æµæã眮ãã ãã§ãã
ãããã®å¶åŸ¡æ¹æ³ãç解ããããã«ãããã€ã¹ ã€ã³ã¿ãŒãã§ã€ã¹ã®èª¬æãèŠãŠã¿ãŸãããã
ã¯ããããããæ å ã®äžåœèªè±èªã§ãã ããã翻蚳ããã®ã¯åé¡ããããŸãããã®æ°ã«ãªãã°ç解ã§ããŸãããå¥ã®æ¹æ³ããããŸããæ©èœçã«é¡äŒŒãã TLC5940 ãžã®æ¥ç¶ãããŒã¿ã·ãŒãã§ã©ã®ããã«èª¬æãããŠããããèŠãŠãã ããã
... ããã€ã¹ã«ããŒã¿ãå
¥åããããã«å¿
èŠãªãã³ã¯ XNUMX ã€ã ãã§ãã SCLK ä¿¡å·ã®ç«ã¡äžãããšããžã«ãããããŒã¿ã SIN ãã³ããå
éšã¬ãžã¹ã¿ã«ã·ãããããŸãã ãã¹ãŠã®ããŒã¿ãããŒããããåŸãçã High XLAT ä¿¡å·ããé 次転éãããããŒã¿ãå
éšã¬ãžã¹ã¿ã«ã©ããããŸãã å
éšã¬ãžã¹ã¿ã¯ãXLAT ä¿¡å·ã¬ãã«ã«ãã£ãŠããªã¬ãŒãããã²ãŒãã§ãã ãã¹ãŠã®ããŒã¿ã¯æäžäœãããããæåã«éä¿¡ãããŸãã
ã©ãã â ã©ãã/ã©ãã/ããã¯ã
ç«ã¡äžãããšããž â ãã«ã¹ã®ç«ã¡äžãããšããž
MSBãã¡ãŒã¹ã â æäžäœ (巊端) ãããã®åæ¹ã
ããŒã¿ãã¯ããã¯ãã â ããŒã¿ãé çªã« (ãããããšã«) éä¿¡ããŸãã
åèª ã¯ãããã®ããã¥ã¡ã³ãã«ããèšèŒãããŠãããããŸããŸãªæ¹æ³ã§ç¿»èš³ãããŠãããããç解ã®ããã«èš±å¯ããŸãã
å°èŠæš¡ãªæè²ããã°ã©ã LED ãã©ã€ããŒã¯æ¬è³ªçã«ã¯ã·ãã ã¬ãžã¹ã¿ãŒã§ãã "ã·ãã" ïŒã·ãã) ååã«å«ãŸãã - ããã€ã¹å ã®ããŒã¿ã®ãããããšã®ç§»å: å éšã«æŒã蟌ãŸããæ°ãããããããšã«ããã®åã«ãããã§ãŒã³å šäœãåæ¹ã«æŒãåºãããŸãã ã·ããäžã« LED ãç¡ç§©åºã«ç¹æ» ããã®ã誰ã芳å¯ããããªããããããã»ã¹ã¯ãã³ããŒã«ãã£ãŠäœæ¥ã¬ãžã¹ã¿ãŒããåé¢ããããããã¡ãŒ ã¬ãžã¹ã¿ãŒã§è¡ãããŸã ( ) ã¯ãããããç®çã®é åºã§é 眮ãããäžçš®ã®åŸ å宀ã§ãã ãã¹ãŠã®æºåãå®äºãããšãã·ã£ãã¿ãŒãéããããããåäœããåã®ããããšçœ®ãæããããŸãã èšè ãã€ã¯ãåè·¯ã®ããã¥ã¡ã³ãã§ã¯ãã©ã®ãããªçµã¿åããã§äœ¿çšããããã«é¢ä¿ãªããã»ãšãã©ã®å Žåããã®ãããªãã³ããŒãæå³ããŸãã
ãããã£ãŠãDM634 ãžã®ããŒã¿è»¢éã¯æ¬¡ã®ããã«å®è¡ãããŸããDAI å ¥åãé æ¹ã® LED ã®æäžäœãããã®å€ã«èšå®ããDCK ããã«ã¢ããããã³ãã«ããŠã³ããŸãã DAI å ¥åã次ã®ãããã®å€ã«èšå®ããDCK ããã«ããŸãã ãã¹ãŠã®ããããéä¿¡ããããŸã§ç¶ããŸã (åºå€)ããã®åŸãLAT ããã«ããŸãã ããã¯æåã§è¡ãããšãã§ããŸã (ããããã³) ã§ãããSTM32 ã§ã¯ XNUMX ã€ã®ã³ããŒã§æäŸãããããããã®ããã«ç¹å¥ã«èª¿æŽããã SPI ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããããšããå§ãããŸãã
ãã«ãŒãã« STM32F103
ã¯ããã«: STM32 ã³ã³ãããŒã©ãŒã¯ãèŠãç®ããã Atmega328 ãããã¯ããã«è€éã§ãã ãŸããçãšãã«ã®ãŒã®ãããèµ·åæã«ã¯ã»ãŒãã¹ãŠã®ããªãã§ã©ã«ã®é»æºããªãã«ãªã£ãŠãããã¯ããã¯åšæ³¢æ°ã¯å
éšãœãŒã¹ããã® 8 MHz ã§ãã 幞ããªããšã«ãSTM ããã°ã©ãã¯ãããããèšç®äžã®ã72 MHz ãŸã§åŒãäžããã³ãŒããäœæããŠãããç§ãç¥ã£ãŠãããã¹ãŠã® IDE ã®äœæè
ã¯ãããåæåæé ã«çµã¿èŸŒãã§ããã®ã§ãã¯ããã¯ããå¿
èŠã¯ãããŸãã (ãã ãã
ããã¥ã¡ã³ã: Blue Pill ã«ã¯äººæ°ã® STM32F103C8T6 ããããæèŒãããŠãããããã«é¢ãã圹ç«ã€ããã¥ã¡ã³ãã XNUMX ã€ãããŸãã
ããŒã¿ã·ãŒã ãã€ã¯ãã³ã³ãããŒã© STM32F103x8 ããã³ STM32F103xB çšããªãã¡ã¬ã³ã¹ããã¥ã¢ã« STM32F103 ã©ã€ã³å šäœãªã©ã«å¯Ÿå¿ã
ããŒã¿ã·ãŒãã§ã¯æ¬¡ã®ããšã«èå³ããããããããŸããã
- ãã³é 眮 â ãããã®ãã³é 眮 â ããŒããèªåãã¡ã§äœãããšã«ããå Žåã
- ã¡ã¢ãª ããã â ç¹å®ã®ãããã®ã¡ã¢ãª ãããã ãªãã¡ã¬ã³ã¹ããã¥ã¢ã«ã«ã¯ã©ã€ã³å šäœã®ãããããããç§ãã¡ã®ãã®ã«ãªãã¬ãžã¹ã¿ã«ã€ããŠãèšåãããŠããŸãã
- ãã³å®çŸ©ããŒãã« - ãã³ã®äž»ãªæ©èœãšä»£æ¿æ©èœããªã¹ãããŸãã ãéãé å€ãã«ã€ããŠã¯ããã³ãšãã®æ©èœã®ãªã¹ããå«ãããã䟿å©ãªç»åãã€ã³ã¿ãŒãããäžã§èŠã€ããããšãã§ããŸãã ãããã£ãŠãããã« Google 㧠Blue Pill ã®ãã³é åãæ€çŽ¢ãããã®åçãæå ã«çœ®ããŠãããŸãã
泚æ: ã€ã³ã¿ãŒãããããã®ç»åã«èª€ãããããã³ã¡ã³ãã§ææãããŸãããããããšãããããŸãã åçã¯å·®ãæ¿ããããŠããŸãããããã¯æèšã§ããæ
å ±ã¯ããŒã¿ã·ãŒãããã§ã¯ãªã確èªããæ¹ãè¯ãã§ãã
ããŒã¿ã·ãŒããåé€ãããªãã¡ã¬ã³ã¹ ããã¥ã¢ã«ãéããä»åŸã¯ããã®ã¿ã䜿çšããŸãã
æé : æšæºå
¥åºåãåŠçããSPI ãæ§æããå¿
èŠãªåšèŸºæ©åšããªã³ã«ããŸãã
å ¥åºå
Atmega328 ã§ã¯ãI/O ã¯éåžžã«åçŽã«å®è£ ãããŠãããããSTM32 ãªãã·ã§ã³ãè±å¯ã«ããããæ··ä¹±ããå¯èœæ§ããããŸãã ããã§å¿ èŠãªã®ã¯çµè«ã ãã§ããããããã«ã XNUMX ã€ã®éžæè¢ããããŸãã
ãªãŒãã³ãã¬ã³ãããã·ã¥ãã«ããªã«ã¿ããã£ãããã·ã¥ãã«ããªã«ã¿ããã£ããªãŒãã³ãã¬ã³
ããã«ããã·ã¥ãïŒæŒãåŒã) 㯠Arduino ããã®éåžžã®åºåã§ããããã³ã¯ HIGH ãŸã㯠LOW ã®å€ãåãããšãã§ããŸãã ããããããªãŒãã³ãã¬ã€ã³ãã§ã¯ã
åºåèšå® / ããŒããåºåã«å²ãåœãŠãããŠããå Žå: / åºåãããã¡ãæå¹: / â ãªãŒãã³ ãã¬ã€ã³ ã¢ãŒã: åºåã¬ãžã¹ã¿ã®ã0ã㯠N-MOS ãæå¹ã«ããåºåã¬ãžã¹ã¿ã®ã1ãã¯ããŒãã Hi-Z ã¢ãŒãã®ãŸãŸã«ããŸã ( P-MOS ã¯ã¢ã¯ãã£ãã«ãªããŸãã) / â ããã·ã¥ãã« ã¢ãŒã: åºåã¬ãžã¹ã¿ã®ã0ã㯠N-MOS ãã¢ã¯ãã£ãã«ããåºåã¬ãžã¹ã¿ã®ã1ã㯠P-MOS ãã¢ã¯ãã£ãã«ããŸãã
ãªãŒãã³ãã¬ã€ã³ãšã®ãã¹ãŠã®éã (ãªãŒãã³ãã¬ã€ã³) ãããã·ã¥ãã«ããã (æŒãåŒã) ã¯ãæåã®ãã³ã§ã¯ HIGH ç¶æ ãåãå ¥ããããšãã§ããªããšããããšã§ããåºåã¬ãžã¹ã¿ã« XNUMX ãæžã蟌ããšãé«æµæã¢ãŒãã«ãªããŸã (é«ã€ã³ããŒãã³ã¹, ãã€ãŒããïŒã ãŒããæžã蟌ããšããã³ã¯äž¡æ¹ã®ã¢ãŒãã§è«ççã«ãé»æ°çã«ãåãããã«åäœããŸãã
éåžžã®åºåã¢ãŒãã§ã¯ããã³ã¯åºåã¬ãžã¹ã¿ã®å 容ããããŒããã£ã¹ãããã ãã§ãã ã代æ¿ãã§ã¯ã察å¿ããããªãã§ã©ã«ã«ãã£ãŠå¶åŸ¡ãããŸã (9.1.4 ãåç §)ã
ããŒã ãããã代æ¿æ©èœãã³ãšããŠèšå®ãããŠããå Žåããã³ ã¬ãžã¹ã¿ã¯ç¡å¹ã«ãªãããã³ã¯ããªãã§ã©ã« ãã³ã«æ¥ç¶ãããŸãã
åãã³ã®ä»£æ¿æ©èœã«ã€ããŠã¯ãã ãã³ã®å®çŸ© ããŒã¿ã·ãŒãã¯ããŠã³ããŒãããã€ã¡ãŒãžã«ãããŸãã ãã³ã«è€æ°ã®ä»£æ¿æ©èœãããå Žåã¯ã©ãããã°ããããšãã質åã«å¯Ÿããçãã¯ãããŒã¿ã·ãŒãã®è泚ã«ãããŸãã
è€æ°ã®ããªãã§ã©ã«ãåããã³ã䜿çšããå Žåã代æ¿æ©èœéã®ç«¶åãé¿ããããã«ã(é©å㪠RCC ã¬ãžã¹ã¿å
ã®) ããªãã§ã©ã« ã¯ãã㯠ã€ããŒãã« ãããã䜿çšããŠåãæ¿ããããªãã§ã©ã«ãäžåºŠã« XNUMX ã€ã ã䜿çšããå¿
èŠããããŸãã
æåŸã«ãåºåã¢ãŒãã®ãã³ã«ãã¯ããã¯é床ããããŸãã ããããšãã«ã®ãŒç¯çŽæ©èœã® XNUMX ã€ã§ãããç§ãã¡ã®å Žåã¯æ倧å€ã«èšå®ããã ãã§ãå¿ããŠããŸããŸãã
ã€ãŸããSPI ã䜿çšããŠããŸããããã¯ãXNUMX ã€ã®ãã³ (ããŒã¿ãšã¯ããã¯ä¿¡å·) ãã代æ¿ããã·ã¥ãã«æ©èœãã§ããå¿ èŠãããããã XNUMX ã€ã®ãã³ (LAT) ããéåžžã®ããã·ã¥ãã«ãã§ããå¿ èŠãããããšãæå³ããŸãã ãã ããããããå²ãåœãŠãåã«ãSPI ã«ã€ããŠèããŠã¿ãŸãããã
SPI
ããäžã€ã®å°ããªæè²ããã°ã©ã
SPI ãŸã㯠Serial Peripheral Interface (ã·ãªã¢ã« ããªãã§ã©ã« ã€ã³ã¿ãŒãã§ã€ã¹) ã¯ãMK ãä»ã® MK ãå€éšã®äžçãšæ¥ç¶ããããã®ã·ã³ãã«ã§éåžžã«å¹æçãªã€ã³ã¿ãŒãã§ã€ã¹ã§ãã ãã®åäœåçã¯ãäžåœè£œ LED ãã©ã€ããŒã«ã€ããŠã¯ãã§ã«èª¬æããŸãã (ãªãã¡ã¬ã³ã¹ ããã¥ã¢ã«ã®ã»ã¯ã·ã§ã³ 25 ãåç §)ã SPI ã¯ãã¹ã¿ãŒ (ããã¹ã¿ãŒã) ã¢ãŒããšã¹ã¬ãŒã (ãã¹ã¬ãŒãã) ã¢ãŒãã§åäœã§ããŸãã SPI ã«ã¯ XNUMX ã€ã®åºæ¬ãã£ãã«ããããŸããããã®ãã¹ãŠã䜿çšã§ããããã§ã¯ãããŸããã
- MOSIããã¹ã¿ãŒåºå/ã¹ã¬ãŒãå ¥å: ãã®ãã³ã¯ãã¹ã¿ãŒ ã¢ãŒãã§ããŒã¿ãéä¿¡ããã¹ã¬ãŒã ã¢ãŒãã§ããŒã¿ãåä¿¡ããŸãã
- MISOããã¹ã¿ãŒå ¥å/ã¹ã¬ãŒãåºå: éã«ããã¹ã¿ãŒã§åä¿¡ããã¹ã¬ãŒãã§éä¿¡ããŸãã
- SCKãã·ãªã¢ã« ã¯ããã¯: ãã¹ã¿ãŒã§ããŒã¿éä¿¡ã®åšæ³¢æ°ãèšå®ããããã¹ã¬ãŒãã§ã¯ããã¯ä¿¡å·ãåä¿¡ããŸãã åºæ¬çã«ããŒããæã€ããšã
- SSã奎é·éžæ: ãã®ãã£ãã«ã®å©ããåããŠã奎é·ã¯èªåã«äœããæ±ããããŠããããšãç¥ããŸãã STM32 ã§ã¯ããã㯠NSS ãšåŒã°ããŸããããã§ãN = è² ãã€ãŸããã®ãã£ã³ãã«ã«ã¢ãŒã¹ãããå Žåãã³ã³ãããŒã©ãŒã¯ã¹ã¬ãŒãã«ãªããŸãã ãªãŒãã³ãã¬ã€ã³åºåã¢ãŒããšããŸãçµã¿åãããããšãã§ããŸãããããã¯ãŸãå¥ã®è©±ã§ãã
ä»ã®ãã®ãšåæ§ãSTM32 ã® SPI ã¯æ©èœãè±å¯ã§ãããããç解ããã®ãããé£ãããªããŸãã ããšãã°ãSPI ã ãã§ãªã I2S ã€ã³ã¿ãŒãã§ã€ã¹ã§ãåäœããå¯èœæ§ããããããã¥ã¡ã³ãã§ã¯ãããã®èšè¿°ãæ··åšããŠãããããé©æã«äœåãªéšåãåé€ããå¿ èŠããããŸãã ç§ãã¡ã®ã¿ã¹ã¯ã¯éåžžã«åçŽã§ããMOSI ãš SCK ã®ã¿ã䜿çšããŠããŒã¿ãéä¿¡ããã ãã§ãã ã»ã¯ã·ã§ã³ 25.3.4 (åäºééä¿¡ãåäºééä¿¡) ã«é²ã¿ãŸãã 1 ã€ã®ã¯ããã¯ãš 1 ã€ã®åæ¹åããŒã¿ ã¯ã€ã€ (1 ã€ã®ã¯ããã¯ä¿¡å·ãš 1 ã€ã®åæ¹åããŒã¿ ã¹ããªãŒã ):
ãã®ã¢ãŒãã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯éä¿¡å°çšã¢ãŒããŸãã¯åä¿¡å°çšã¢ãŒã㧠SPI ã䜿çšããŸãã / éä¿¡å°çšã¢ãŒãã¯ãã¥ãã¬ãã¯ã¹ ã¢ãŒããšäŒŒãŠããŸããããŒã¿ã¯éä¿¡ãã³ (ãã¹ã¿ãŒ ã¢ãŒãã® MOSI ãŸãã¯ã¹ã¬ãŒã ã¢ãŒãã® MISO) ã§éä¿¡ãããåä¿¡ãã³ (ãããã MISO ãŸã㯠MOSI) ã¯éåžžã® I/O ãã³ãšããŠäœ¿çšã§ããŸãã ã ãã®å Žåãã¢ããªã±ãŒã·ã§ã³ã¯ Rx ãããã¡ãç¡èŠããã ãã§æžã¿ãŸã (èªã¿åãããå Žåãããã«ããŒã¿ã¯è»¢éãããŸãã)ã
ããããŸãããMISO ãã³ã¯ç©ºããŠããŸããLAT ä¿¡å·ãããã«æ¥ç¶ããŸãããã STM32 ã§ã¯ããã°ã©ã ã§å¶åŸ¡ã§ãããéåžžã«äŸ¿å©ãªã¹ã¬ãŒãéžæãèŠãŠã¿ãŸãããã ã»ã¯ã·ã§ã³ 25.3.1 SPI ã®æŠèŠã®åãååã®æ®µèœãèªã¿ãŸãã
ãœãããŠã§ã¢å¶åŸ¡ NSS (SSM = 1) / ã¹ã¬ãŒãéžææ
å ±ã¯ãSPI_CR1 ã¬ãžã¹ã¿ã® SSI ãããã«å«ãŸããŸãã å€éš NSS ãã³ã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã®ããŒãºã®ããã«ç©ºãç¶æ
ã®ãŸãŸã«ãªããŸãã
ã¬ãžã¹ã¿ã«æžã蟌ãæãæ¥ãŸããã SPI2 ã䜿çšããããšã«ããããŒã¿ã·ãŒãã®ã»ã¯ã·ã§ã³ 3.3 ã¡ã¢ãª ãããã§ãã®ããŒã¹ ã¢ãã¬ã¹ãæ¢ããŸãã
ããŠãå§ããŸããã:
#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))
ããã¹ã¿ãŒ ã¢ãŒãã§ã® SPI ã®èšå®ããšããããããããã¿ã€ãã«ã®ã»ã¯ã·ã§ã³ 25.3.3 ãéããŸãã
1. SPI_CR2 ã¬ãžã¹ã¿ã®ããã BR[0:1] ã§ã·ãªã¢ã« ã¯ããã¯åšæ³¢æ°ãèšå®ããŸãã
ã¬ãžã¹ã¿ã¯ãåãååã®ãªãã¡ã¬ã³ã¹ ããã¥ã¢ã«ã®ã»ã¯ã·ã§ã³ã«ãŸãšããããŠããŸãã ã¢ãã¬ã¹ã·ãã(ã¢ãã¬ã¹ãªãã»ãã) CR1 â 0x00 ã®å Žåãããã©ã«ãã§ã¯ãã¹ãŠã®ããããã¯ãªã¢ãããŸã (ãªã»ããå€ 0x0000):
BR ãããã¯ã³ã³ãããŒã©ã®ã¯ããã¯ååšåšãèšå®ããSPI ãåäœããåšæ³¢æ°ã決å®ããŸãã STM32 ã®åšæ³¢æ°ã¯ 72 MHz ã«ãªããŸããããŒã¿ã·ãŒãã«ãããšãLED ãã©ã€ããŒã¯æ倧 25 MHz ã®åšæ³¢æ°ã§åäœããããã2 ã§å²ãå¿ èŠããããŸã (BR[0:001] = XNUMX)ã
#define _SPI_CR1 0x00
#define BR_0 0x0008
#define BR_1 0x0010
#define BR_2 0x0020
_SPI2_ (_SPI_CR1) |= BR_0;// pclk/4
2. CPOL ããããš CPHA ããããèšå®ããŠãããŒã¿è»¢éãšã·ãªã¢ã« ã¯ãã㯠ã¿ã€ãã³ã°ã®é¢ä¿ãå®çŸ©ããŸã (240 ããŒãžã®å³ãåç §)ã
ããã§ã¯åè·¯å³ã§ã¯ãªãããŒã¿ã·ãŒããèªãã§ããã®ã§ã704 ããŒãž (SPI ã®äžè¬çãªèª¬æ) ã«ãã CPOL ããã³ CPHA ãããã®ããã¹ã説æã詳ããèŠãŠã¿ãŸãããã
ã¯ããã¯ã®äœçžãšæ¥µæ§
SPI_CR1 ã¬ãžã¹ã¿ã® CPOL ããããš CPHA ãããã䜿çšãããšãXNUMX ã€ã®ã¿ã€ãã³ã°é¢ä¿ãããã°ã©ã ã§éžæã§ããŸãã CPOL (ã¯ããã¯æ¥µæ§) ãããã¯ãããŒã¿ãéä¿¡ãããŠããªããšãã®ã¯ããã¯ä¿¡å·ã®ç¶æ
ãå¶åŸ¡ããŸãã ãã®ãããã¯ãã¹ã¿ãŒ ã¢ãŒããšã¹ã¬ãŒã ã¢ãŒããå¶åŸ¡ããŸãã CPOL ããªã»ããããããšãSCK ãã³ã¯äŒæ¢ã¢ãŒã㧠Low ã«ãªããŸãã CPOL ããããã»ãããããŠããå ŽåãSCK ãã³ã¯äŒæ¢ã¢ãŒãäžã« High ã«ãªããŸãã
CPHA (ã¯ããã¯äœçž) ããããã»ãããããŠããå Žåãäžäœããã ãã©ãã ã¹ãããŒã㯠SCK ä¿¡å·ã® XNUMX çªç®ã®ãšããžã§ã (CPOL ãã¯ãªã¢ã®å Žåã¯ç«ã¡äžãããCPOL ãã»ãããããŠããå Žåã¯ç«ã¡äžãã)ã ããŒã¿ã¯ã¯ããã¯ä¿¡å·ã® XNUMX çªç®ã®å€åã«ãã£ãŠãã£ããã£ãããŸãã CPHA ããããã¯ãªã¢ãããŠããå Žåãäžäœããã ãã©ãã ã¹ãããŒã㯠SCK ä¿¡å·ã®ç«ã¡äžãããšããžã§ã (CPOL ãã»ãããããŠããå Žåã¯ç«ã¡äžãããšããžãCPOL ãã¯ãªã¢ãããŠããå Žåã¯ç«ã¡äžãããšããž)ã ããŒã¿ã¯ã¯ããã¯ä¿¡å·ã®æåã®å€åæã«ãã£ããã£ãããŸãã
ãã®ç¥èãåžåãããšãäž¡æ¹ã®ãããããŒãã®ãŸãŸã§ãªããã°ãªããªããšããçµè«ã«éããŸãã 䜿çšãããŠããªããšã㯠SCK ä¿¡å·ã Low ã®ãŸãŸã«ããŠãããŒã¿ããã«ã¹ã®ç«ã¡äžãããšããžã§éä¿¡ããããã«ããŸã (å³ãåç §)ã ã©ã€ãžã³ã°ãšããž DM634 ããŒã¿ã·ãŒãã«èšèŒãããŠããŸã)ã
ãšããã§ãããã§ç§ãã¡ã¯ ST ããŒã¿ã·ãŒãã®èªåœã®ç¹åŸŽã«åããŠééããŸãããããã«ã¯ããããããŒãã«ãªã»ããããããšãããã¬ãŒãºãæžãããŠããŸãã å°ããªã»ããããããã«ãšããªã å°ãã¯ãªã¢ããããã«ãäŸãã°ã¢ãã¡ã¬ã®ãããªã
3. DFF ããããèšå®ããŠãããŒã¿ ãããã¯ã 8 ããã圢åŒã§ããã 16 ããã圢åŒã§ãããã決å®ããŸãã
DM16 ã®ããã« 634 ããã PWM ããŒã¿ã®éä¿¡ã«ç ©ããããªãããã«ãç¹ã« 12 ããã DM633 ã䜿çšããŸããã DFF ã XNUMX ã«èšå®ããã®ã¯çã«ããªã£ãŠããŸãã
#define DFF 0x0800
_SPI2_ (_SPI_CR1) |= DFF; // 16-bit mode
4. SPI_CR1 ã¬ãžã¹ã¿ã® LSBFIRST ããããèšå®ããŠããã㯠ãã©ãŒãããã決å®ããŸã
LSBFIRST ã¯ããã®ååã瀺ãããã«ãæäžäœããããæåã«éä¿¡ãæ§æããŸãã ããããDM634 ã¯æäžäœãããããå§ãŸãããŒã¿ãåä¿¡ããããšèããŠããŸãã ãããã£ãŠããªã»ãããããŸãŸã«ããŸãã
5. ããŒããŠã§ã¢ ã¢ãŒãã§ãNSS ãã³ããã®å ¥åãå¿ èŠãªå Žåã¯ããã€ã転éã·ãŒã±ã³ã¹å šäœã§ NSS ãã³ã« High ä¿¡å·ãå°å ããŸãã NSS ãœãããŠã§ã¢ ã¢ãŒãã§ã¯ãSPI_CR1 ã¬ãžã¹ã¿ã® SSM ããããš SSI ããããèšå®ããŸãã NSS ãã³ãåºåãšããŠäœ¿çšããå Žåã¯ãSSOE ãããã®ã¿ãèšå®ããå¿ èŠããããŸãã
SSM ãš SSI ãã€ã³ã¹ããŒã«ããŠãNSS ããŒããŠã§ã¢ ã¢ãŒããå¿ããŸãã
#define SSI 0x0100
#define SSM 0x0200
_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high
6. MSTR ããããš SPE ããããã»ããããå¿ èŠããããŸã (NSS ä¿¡å·ã High ã®å Žåã«ã®ã¿ã»ããããããŸãŸã«ãªããŸã)ã
å®éã«ã¯ããããã®ãããã䜿çšã㊠SPI ããã¹ã¿ãŒãšããŠæå®ãããªã³ã«ããŸãã
#define MSTR 0x0004
#define SPE 0x0040
_SPI2_ (_SPI_CR1) |= MSTR; //SPI master
//кПгЎа вÑе гПÑПвП, вклÑÑаеЌ SPI
_SPI2_ (_SPI_CR1) |= SPE;
SPI ãæ§æãããã®ã§ããã©ã€ããŒã«ãã€ããéä¿¡ããé¢æ°ãããã«äœæããŸãããã 25.3.3ããã¹ã¿ãŒã¢ãŒãã§ã® SPI ã®èšå®ãã®ç¶ããèªã:
ããŒã¿è»¢éé åº
ãã€ãã Tx ãããã¡ã«æžã蟌ãŸãããšãéä¿¡ãéå§ãããŸãã
ããŒã¿ãã€ãã¯æ¬¡ã®äœçœ®ã§ã·ããã¬ãžã¹ã¿ã«ããŒããããŸãã å¹³è¡ æåã®ãããã®éä¿¡äžã« (å
éšãã¹ãã) ã¢ãŒãã«ç§»è¡ãããã®åŸãããããéä¿¡ãããŸãã äžé£ MOSI ãã³ ã¢ãŒããCPI_CR1 ã¬ãžã¹ã¿ã® LSBFIRST ãããã®èšå®ã«å¿ããŠãæåãŸãã¯æåŸã®ãããã転éãããŸãã TXEãã©ã°ã¯ããŒã¿éä¿¡åŸã«ã»ãããããŸãã Txãããã¡ããã·ããã¬ãžã¹ã¿ãŸã§ãŸããCPI_CR1 ã¬ãžã¹ã¿ã® TXEIE ããããã»ãããããŠããå Žåã¯å²ã蟌ã¿ãçæããŸãã
STM ã³ã³ãããŒã©ã® SPI å®è£ ã® XNUMX ã€ã®æ©èœã«æ³šç®ããŠããã ãããã«ã翻蚳ã®äžã§ããã€ãã®åèªã匷調ããŸããã Atmega ã§ã¯ TXE ãã©ã° (éä¿¡ã空ã§ããTx ã¯ç©ºã§ãããããŒã¿ãåä¿¡ããæºåãã§ããŠããŸã) ã¯ããã€ãå šäœãéä¿¡ãããåŸã«ã®ã¿èšå®ãããŸãã ã¢ãŠãã ããã§ããã®ãã©ã°ã¯ãã€ããå éšã·ãã ã¬ãžã¹ã¿ã«æ¿å ¥ãããåŸã«èšå®ãããŸãã ãã¹ãŠã®ããããåæã« (䞊åã«) ããã·ã¥ããŠããŒã¿ãé 次éä¿¡ããããããã€ããå®å šã«éä¿¡ãããåã« TXE ãã»ãããããŸãã ããã¯éèŠãªçç±ã§ãã LED ãã©ã€ããŒã®å Žåãéä¿¡åŸã« LAT ãã³ããã«ããå¿ èŠããããŸãã ãã¹ãŠ ããŒã¿ãã€ãŸãTXE ãã©ã°ã ãã§ã¯ååã§ã¯ãããŸããã
ããã¯ãå¥ã®ãã©ã°ãå¿ èŠã§ããããšãæå³ããŸãã 25.3.7 - ãã¹ããŒã¿ã¹ ãã©ã°ããèŠãŠã¿ãŸãããã
<âŠ>
ããžãŒãã©ã°
BSY ãã©ã°ã¯ããŒããŠã§ã¢ã«ãã£ãŠã»ããããã³ã¯ãªã¢ãããŸã (æžã蟌ã¿ã¯å¹æããããŸãã)ã BSY ãã©ã°ã¯ SPI éä¿¡å±€ã®ç¶æ
ã瀺ããŸãã
ãªã»ãããããŸã:
転éãå®äºãããšãïŒè»¢éãé£ç¶ããŠãããã¹ã¿ãŒã¢ãŒããé€ãïŒ
SPIãç¡å¹ãªå Žå
ãã¹ã¿ãŒã¢ãŒããšã©ãŒçºçæïŒMODF=1ïŒ
転éãé£ç¶ããŠããªãå ŽåãBSY ãã©ã°ã¯ããŒã¿è»¢éããšã«ã¯ãªã¢ãããŸãã
ãããããã¯äŸ¿å©ã ã Tx ãããã¡ãŒãã©ãã«ããã®ã調ã¹ãŠã¿ãŸãããã ãããè¡ãã«ã¯ããSPI ããŒã¿ ã¬ãžã¹ã¿ããèªãã§ãã ããã
ããã 15:0 DR[15:0] ããŒã¿ ã¬ãžã¹ã¿
åä¿¡ããããŒã¿ããŸãã¯éä¿¡ããããŒã¿ã
ããŒã¿ ã¬ãžã¹ã¿ã¯ XNUMX ã€ã®ãããã¡ã«åå²ãããŠãããXNUMX ã€ã¯æžã蟌ã¿çš (éä¿¡ãããã¡)ããã XNUMX ã€ã¯èªã¿åãçš (åä¿¡ãããã¡) ã§ãã ããŒã¿ ã¬ãžã¹ã¿ã«æžã蟌ããš Tx ãããã¡ã«æžã蟌ã¿ãããŒã¿ ã¬ãžã¹ã¿ããèªã¿åããš Rx ãããã¡ã«å«ãŸããå€ãè¿ãããŸãã
ããŠãã¹ããŒã¿ã¹ ã¬ãžã¹ã¿ã«ã¯ TXE ãã©ã°ãš BSY ãã©ã°ããããŸãã
ç§ãã¡ã¯æžãïŒ
#define _SPI_DR 0x0C
#define _SPI_SR 0x08
#define BSY 0x0080
#define TXE 0x0002
void dm_shift16(uint16_t value)
{
_SPI2_(_SPI_DR) = value; //send 2 bytes
while (!(_SPI2_(_SPI_SR) & TXE)); //wait until they're sent
}
LED ãã©ã€ããŒã®åºåæ°ã«å¿ããŠã16 ãã€ãã® XNUMX åãéä¿¡ããå¿ èŠãããããã次ã®ããã«ãªããŸãã
void sendLEDdata()
{
LAT_low();
uint8_t k = 16;
do
{ k--;
dm_shift16(leds[k]);
} while (k);
while (_SPI2_(_SPI_SR) & BSY); // finish transmission
LAT_pulse();
}
ãã ããLAT ãã³ãåŒãåºãæ¹æ³ããŸã ããããªãã®ã§ãI/O ã«æ»ããŸãã
ãã³ã®å²ãåœãŠ
STM32F1 ã§ã¯ããã³ã®ç¶æ ãæ åœããã¬ãžã¹ã¿ãéåžžã«ç¹æ®ã§ãã Atmega ãããå€ãã®ããããããããšã¯æããã§ãããä»ã® STM ããããšãç°ãªããŸãã ã»ã¯ã·ã§ã³ 9.1 GPIO ã®æŠèŠ:
åæ±çš I/O ããŒã (GPIO) 32 ã€ã® 32 ããã ã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ ã¬ãžã¹ã¿ (GPIOx_CRL ããã³ GPIOx_CRH)ã32 ã€ã® 16 ããã ããŒã¿ ã¬ãžã¹ã¿ (GPIOx_IDR ããã³ GPIOx_ODR)ã32 ããã ã»ãã/ãªã»ãã ã¬ãžã¹ã¿ (GPIOx_BSRR)ãXNUMX ããã ãªã»ãã ã¬ãžã¹ã¿ (GPIOx_BRR) ããã³ XNUMX ããã ã¬ãžã¹ã¿ãåããŠããŸããããã ããããã³ã° ã¬ãžã¹ã¿ (GPIOx_LCKR)ã
æåã® 16 ã€ã®ã¬ãžã¹ã¿ã¯ç¹æ®ã§ãããXNUMX åã®ããŒã ãã³ããå åŒããšã« XNUMX ãããã圢åŒã§ã¬ãžã¹ã¿å šäœã«åæ£ãããŠãããããéåžžã«äžäŸ¿ã§ãã ãããã®ã ãã³ XNUMX ïœ XNUMX 㯠CRL ã«ãããæ®ã㯠CRH ã«ãããŸãã åæã«ãæ®ãã®ã¬ãžã¹ã¿ã«ã¯ããŒãã®ãã¹ãŠã®ãã³ã®ããããæ£åžžã«å«ãŸããŸããå€ãã®å Žåãååã¯ãäºçŽãã®ãŸãŸã§ãã
ç°¡åã«ããããã«ããªã¹ãã®æåŸããå§ããŸãããã
ããããã³ã°ã¬ãžã¹ã¿ã¯å¿ èŠãããŸããã
ã»ãã ã¬ãžã¹ã¿ãšãªã»ãã ã¬ãžã¹ã¿ã¯ãéšåçã«çžäºã«éè€ããŠãããšããç¹ã§éåžžã«èå³æ·±ããã®ã§ããBSRR ã§ã®ã¿ãã¹ãŠãæžã蟌ãããšãã§ããŸããäžäœ 16 ãããã¯ãã³ã 1 ã«ãªã»ããããäžäœ 16 ããã㯠XNUMX ã«èšå®ãããŸãããããã¯ã次ã®ããšãã§ããŸãã BRR ã䜿çšããŸããäžäœ XNUMX ãããã¯ãã³ããªã»ããããã ãã§ãã ç§ã¯ XNUMX çªç®ã®ãªãã·ã§ã³ã奜ãã§ãã ãããã®ã¬ãžã¹ã¿ã¯ãã³ãžã®ã¢ããã㯠ã¢ã¯ã»ã¹ãæäŸããããéèŠã§ãã
ã¢ãããã¯ã»ãããŸãã¯ãªã»ãã
GPIOx_ODR ãããã ã¬ãã«ã§ããã°ã©ã ãããšãã«å²ã蟌ã¿ãç¡å¹ã«ããå¿
èŠã¯ãããŸããã2 åã®ã¢ãããã¯æžã蟌ã¿æäœ APB1 㧠XNUMX ã€ä»¥äžã®ããããå€æŽã§ããŸãã ããã¯ãå€æŽããå¿
èŠããããããã®ã»ãã/ãªã»ãã ã¬ãžã¹ã¿ (GPIOx_BSRRããŸãã¯ãªã»ããã®ã¿ã®å Žå㯠GPIOx_BRR) ã«ãXNUMXããæžã蟌ãããšã«ãã£ãŠå®çŸãããŸãã ä»ã®ãããã¯å€æŽãããŸããã
ããŒã¿ ã¬ãžã¹ã¿ã«ã¯éåžžã«ããããããååãä»ããããŠããŸã - IDR = å ¥å æ¹åã¬ãžã¹ã¿ãå ¥åã¬ãžã¹ã¿ã ODR = åºå æ¹åã¬ãžã¹ã¿ãåºåã¬ãžã¹ã¿ã çŸåšã®ãããžã§ã¯ãã§ã¯ãããã¯å¿ èŠãããŸããã
ãããŠæåŸã«å¶åŸ¡ã¬ãžã¹ã¿ã§ãã 13 çªç®ã® SPI ãã³ãã€ãŸã PB14ãPB15ãããã³ PBXNUMX ã«èå³ããããããããã« CRH ã調ã¹ãŸãã
ãããŠã20 ãã 31 ãŸã§ã®ãããã§äœããæžã蟌ãå¿ èŠãããããšãããããŸãã
ãã³ã«äœãæ±ãããã¯äžã§ãã§ã«ç解ããŠããŸãã®ã§ãããã§ã¯ã¹ã¯ãªãŒã³ã·ã§ããã¯äœ¿ããã«èª¬æããŸããMODE ã¯æ¹å (äž¡æ¹ã®ãããã 0 ã«èšå®ãããŠããå Žåã¯å ¥å) ãšãã³ã®é床 (50MHz ãå¿ èŠã§ããã€ãŸããäž¡æ¹ã®ãã³ãã1ãã«èšå®ãããCNF ã¯ã¢ãŒããéåžžã®ãããã·ã¥ãã«ã â 00ãã代æ¿ã â 10 ã«èšå®ããŸãã ããã©ã«ãã§ã¯ãäžã§ç€ºããããã«ããã¹ãŠã®ãã³ã«ã¯äžãã 0 çªç®ã®ããã (CNFXNUMX) ããããŸããã¢ãŒãã«èšå®ããŸã ãããŒãã£ã³ã°å ¥å.
ãã®ãããã§äœãä»ã®ããšãè¡ãäºå®ãªã®ã§ãç°¡åã«ããããã«ãäžäœãšäžäœã®äž¡æ¹ã®å¶åŸ¡ã¬ãžã¹ã¿ã«å¯ŸããŠå¯èœãªãã¹ãŠã® MODE å€ãš CNF å€ãå®çŸ©ããŸããã
ãŸãããã®ãããªãã®
#define CNF0_0 0x00000004
#define CNF0_1 0x00000008
#define CNF1_0 0x00000040
#define CNF1_1 0x00000080
#define CNF2_0 0x00000400
#define CNF2_1 0x00000800
#define CNF3_0 0x00004000
#define CNF3_1 0x00008000
#define CNF4_0 0x00040000
#define CNF4_1 0x00080000
#define CNF5_0 0x00400000
#define CNF5_1 0x00800000
#define CNF6_0 0x04000000
#define CNF6_1 0x08000000
#define CNF7_0 0x40000000
#define CNF7_1 0x80000000
#define CNF8_0 0x00000004
#define CNF8_1 0x00000008
#define CNF9_0 0x00000040
#define CNF9_1 0x00000080
#define CNF10_0 0x00000400
#define CNF10_1 0x00000800
#define CNF11_0 0x00004000
#define CNF11_1 0x00008000
#define CNF12_0 0x00040000
#define CNF12_1 0x00080000
#define CNF13_0 0x00400000
#define CNF13_1 0x00800000
#define CNF14_0 0x04000000
#define CNF14_1 0x08000000
#define CNF15_0 0x40000000
#define CNF15_1 0x80000000
#define MODE0_0 0x00000001
#define MODE0_1 0x00000002
#define MODE1_0 0x00000010
#define MODE1_1 0x00000020
#define MODE2_0 0x00000100
#define MODE2_1 0x00000200
#define MODE3_0 0x00001000
#define MODE3_1 0x00002000
#define MODE4_0 0x00010000
#define MODE4_1 0x00020000
#define MODE5_0 0x00100000
#define MODE5_1 0x00200000
#define MODE6_0 0x01000000
#define MODE6_1 0x02000000
#define MODE7_0 0x10000000
#define MODE7_1 0x20000000
#define MODE8_0 0x00000001
#define MODE8_1 0x00000002
#define MODE9_0 0x00000010
#define MODE9_1 0x00000020
#define MODE10_0 0x00000100
#define MODE10_1 0x00000200
#define MODE11_0 0x00001000
#define MODE11_1 0x00002000
#define MODE12_0 0x00010000
#define MODE12_1 0x00020000
#define MODE13_0 0x00100000
#define MODE13_1 0x00200000
#define MODE14_0 0x01000000
#define MODE14_1 0x02000000
#define MODE15_0 0x10000000
#define MODE15_1 0x20000000
ç§ãã¡ã®ãã³ã¯ããŒã B (ããŒã¹ ã¢ãã¬ã¹ â 0x40010C00) ã«ãããã³ãŒãã¯æ¬¡ã®ãšããã§ãã
#define _PORTB_(mem_offset) (*(volatile uint32_t *)(0x40010C00 + (mem_offset)))
#define _BRR 0x14
#define _BSRR 0x10
#define _CRL 0x00
#define _CRH 0x04
//ОÑпПлÑзÑеЌ ÑÑаМЎаÑÑÐœÑй SPI2: MOSI Ма B15, CLK Ма B13
//LAT пÑÑÑÑ Ð±ÑÐŽÐµÑ ÐœÐ° МеОÑпПлÑзÑеЌПЌ MISO â B14
//ПÑОÑаеЌ ЎеÑПлÑÐœÑй бОÑ, ПМ МаЌ ÑПÑМП Ме ÐœÑжеМ
_PORTB_ (_CRH) &= ~(CNF15_0 | CNF14_0 | CNF13_0 | CNF12_0);
//алÑÑеÑМаÑОвМÑе ÑÑМкÑОО ÐŽÐ»Ñ MOSI О SCK
_PORTB_ (_CRH) |= CNF15_1 | CNF13_1;
//50 ÐÐÑ, MODE = 11
_PORTB_ (_CRH) |= MODE15_1 | MODE15_0 | MODE14_1 | MODE14_0 | MODE13_1 | MODE13_0;
ããã«å¿ããŠãBRR ããã³ BSRR ã¬ãžã¹ã¿ã«ãã£ãŠåãæ¿ãããã LAT ã®å®çŸ©ãæžãããšãã§ããŸãã
/*** LAT pulse â high, then low */
#define LAT_pulse() _PORTB_(_BSRR) = (1<<14); _PORTB_(_BRR) = (1<<14)
#define LAT_low() _PORTB_(_BRR) = (1<<14)
(æ°æ§ã§LAT_lowããã€ããããªã®ã§ãã®ãŸãŸã«ããŠãããŸã)
ä»ã§ã¯ãã¹ãŠãããŸããããŸããããããŸããããŸããã ãã㯠STM32 ã§ãããããé»åãç¯çŽãããŸããã€ãŸããå¿ èŠãªåšèŸºæ©åšã®ã¯ããã¯ãæå¹ã«ããå¿ èŠããããŸãã
ã¯ããã¯ããªã³ã«ãã
æèšã¯ã¯ããã¯ãšãåŒã°ããèšæãæ åœããŸãã ãããŠããã§ã« RCC ãšããç¥èªã«æ°ã¥ãããšãã§ããŸããã ããã¥ã¡ã³ãã§ãããæ¢ããŸããããã¯ãªã»ãããšã¯ããã¯å¶åŸ¡ã§ãã
äžã§è¿°ã¹ãããã«ã幞ããªããšã«ãã¯ããã¯ã«é¢ãããããã¯ã®æãé£ããéšå㯠STM ã®äººã
ã«ãã£ãŠç§ãã¡ã®ããã«è¡ãããç§ãã¡ã¯åœŒãã«éåžžã«æè¬ããŠããŸã (ããäžåºŠãªã³ã¯ã貌ã£ãŠãããŸã)
#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))
次ã«ããã¬ãŒãå ã§äœããèŠã€ããããšãããªã³ã¯ãã¯ãªãã¯ããããããè¯ãæ¹æ³ãšããŠãããã»ã¯ã·ã§ã³ã®æå¹åã¬ãžã¹ã¿ã®èª¬æãåç §ããŠãã ããã ã¬ãžã¹ã¿ãæå¹ã«ããã RCC_APB1ENR ãš RCC_APB2ENR ã¯æ¬¡ã®å Žæã«ãããŸãã
ãããã£ãŠããããã«ã¯ãSPI2ãIOPB (I/O ããŒã B)ãããã³ä»£æ¿æ©èœ (AFIO) ã®ã¯ãããã³ã°ãå«ãããããå«ãŸããŠããŸãã
#define _APB2ENR 0x18
#define _APB1ENR 0x1C
#define IOPBEN 0x0008
#define SPI2EN 0x4000
#define AFIOEN 0x0001
//вклÑÑаеЌ ÑакÑОÑПваМОе пПÑÑа B О алÑÑ. ÑÑМкÑОй
_RCC_(_APB2ENR) |= IOPBEN | AFIOEN;
//вклÑÑаеЌ ÑакÑОÑПваМОе SPI2
_RCC_(_APB1ENR) |= SPI2EN;
æçµçãªã³ãŒããèŠã€ãããŸã
ãã¹ãããæ©äŒãããããã¹ããããå Žåã¯ãDM634 ã次ã®ããã«æ¥ç¶ããŸã: DAI ã PB15 ã«ãDCK ã PB13 ã«ãLAT ã PB14 ã«æ¥ç¶ããŸãã ãã©ã€ããŒã«5ãã«ãããé»åãäŸçµŠããŸããã¢ãŒã¹ãæ¥ç¶ããããšãå¿ããªãã§ãã ããã
STM8 PWM
STM8 ã® PWM
ãã®èšäºãèšç»ããŠãããšããäŸãšããŠãããŒãã®ãªãéŽå±ã«ãªããªãããã«ãããŒã¿ã·ãŒãã ãã䜿çšããŠããªãã¿ã®ãªããããã®ããã€ãã®æ©èœãç¿åŸããŠã¿ãããšã«ããŸããã STM8 ã¯ãã®åœ¹å²ã«æé©ã§ããã第äžã«ãç§ã¯ STM8S103 ãæèŒããäžåœè£œããŒããããã€ãæã£ãŠããŸããã第äºã«ãSTMXNUMX ã¯ããŸã人æ°ããããŸããããã®ãããã€ã³ã¿ãŒãããã§è§£æ±ºçãèªãã§èŠã€ããããšããèªæã¯ããŸãã«ãããã®è§£æ±ºçãæ¬ åŠããŠããããšã«ããã£ãŠããŸãã
ãããã«ã¯ãŸãã
ã¯ãããã³ã°ãšI/O
ããã©ã«ãã§ã¯ãSTM8 㯠2 MHz ã®åšæ³¢æ°ã§åäœããŸããããã¯çŽã¡ã«ä¿®æ£ããå¿ èŠããããŸãã
HSI (é«éå
éš) ã¯ããã¯
HSI ã¯ããã¯ä¿¡å·ã¯ãããã°ã©ã å¯èœãªååšåš (16 ïœ 1) ãåããå
éš 8 MHz RC çºæ¯åšããåŸãããŸãã ããã¯ã¯ããã¯ååšåšã¬ãžã¹ã¿ (CLK_CKDIVR) ã§èšå®ãããŸãã
泚: éå§æã«ãååšåšã 8 ã® HSI RC çºæ¯åšãã¯ããã¯ä¿¡å·ã®å
é ãœãŒã¹ãšããŠéžæãããŸãã
ããŒã¿ã·ãŒãå ã®ã¬ãžã¹ã¿ ã¢ãã¬ã¹ãš refman å ã®èª¬æãèŠã€ããŠãã¬ãžã¹ã¿ãã¯ãªã¢ããå¿ èŠãããããšãããããŸãã
#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6
CLK_CKDIVR &= ~(0x18);
PWM ãå®è¡ã㊠LED ãæ¥ç¶ããã®ã§ããã³é 眮ãèŠãŠã¿ãŸãããã
ãããã¯å°ãããå€ãã®æ©èœãåããã³äžã§äžæãããŸãã è§æ¬åŒ§å ã¯ã代æ¿æ©èœãã§ãããããªãã·ã§ã³ãã€ããã«ããåãæ¿ããããŸãïŒãªãã·ã§ã³ãã€ãïŒ â ã¢ãã¡ã¬ãã¥ãŒãºã®ãããªãã®ã ããã°ã©ã ã§å€ãå€æŽã§ããŸããããã®å¿ èŠã¯ãããŸããã æ°ããæ©èœã¯åèµ·ååŸã«ã®ã¿æå¹ã«ãªããŸãã ãããã®ãã€ããå€æŽã§ãã ST Visual Programmer (Visual Develop ãšãšãã«ããŠã³ããŒã) ã䜿çšããæ¹ãç°¡åã§ãã ãã³é 眮ã¯ãæåã®ã¿ã€ããŒã® CH1 ãã³ãš CH2 ãã³ãè§ãã£ãã§å²ãŸããŠããããšã瀺ããŠããŸãã STVP ã® AFR1 ããããš AFR0 ããããèšå®ããå¿ èŠãããã1 çªç®ã®ãããã 4 çªç®ã®ã¿ã€ãã® CH5 åºåã PDXNUMX ãã PCXNUMX ã«è»¢éããŸãã
ãããã£ãŠã6 ã€ã®ãã³ã§ LED ãå¶åŸ¡ãããŸããPC6ãPC7ãPC3 ãæåã®ã¿ã€ããŒãPC5ãPD3ãPA3 ã XNUMX çªç®ã®ã¿ã€ããŒã§ãã
STM8 ã§ã® I/O ãã³èªäœã®èšå®ã¯ãSTM32 ãããç°¡åã§è«ççã§ãã
- Atmega DDR ããŒã¿æ¹åã¬ãžã¹ã¿ã§ããªãã¿ (ããŒã¿æ¹åã¬ãžã¹ã¿): 1 = åºåã
- æåã®å¶åŸ¡ã¬ãžã¹ã¿ CR1 ã¯ãåºåæã«ããã·ã¥ãã« ã¢ãŒã (1) ãŸãã¯ãªãŒãã³ ãã¬ã€ã³ (0) ãèšå®ããŸãã LED ãã«ãœãŒãã§ãããã«æ¥ç¶ããã®ã§ãããã§ã¯ãŒãã®ãŸãŸã«ããŸãã
- 2 çªç®ã®å¶åŸ¡ã¬ãžã¹ã¿ CR1 ã¯ãåºåæã«ã¯ããã¯é床ãèšå®ããŸã: 10 = XNUMX MHz
#define PA_DDR *(volatile uint8_t *)0x005002
#define PA_CR2 *(volatile uint8_t *)0x005004
#define PD_DDR *(volatile uint8_t *)0x005011
#define PD_CR2 *(volatile uint8_t *)0x005013
#define PC_DDR *(volatile uint8_t *)0x00500C
#define PC_CR2 *(volatile uint8_t *)0x00500E
PA_DDR = (1<<3); //output
PA_CR2 |= (1<<3); //fast
PD_DDR = (1<<3); //output
PD_CR2 |= (1<<3); //fast
PC_DDR = ((1<<3) | (1<<5) | (1<<6) | (1<<7)); //output
PC_CR2 |= ((1<<3) | (1<<5) | (1<<6) | (1<<7)); //fast
PWMèšå®
ãŸããçšèªãå®çŸ©ããŸãããã
- PWMåšæ³¢æ° â ã¿ã€ããŒãäœåããé »åºŠã
- ãªãŒããªããŒããAR â ã¿ã€ããŒãã«ãŠã³ãããèªåããŒãå¯èœãªå€ (ãã«ã¹åšæ)ã
- ã¢ããããŒãã€ãã³ããUEV â ã¿ã€ããŒã AR ãŸã§ã«ãŠã³ããããšãã«çºçããã€ãã³ãã
- PWM ãã¥ãŒã㣠ãµã€ã¯ã« â PWM ãã¥ãŒã㣠ãµã€ã¯ã«ãããã¥ãŒã㣠ãã¡ã¯ã¿ããšãåŒã°ããŸãã
- å€ã®ãã£ããã£/æ¯èŒ â ã¿ã€ããŒãã«ãŠã³ããããã£ããã£/æ¯èŒã®å€ äœããããã ãã (PWMã®å Žåãåºåä¿¡å·ãå転ããŸã);
- ããªããŒãå€ â ããªããŒããããå€ã æ¯èŒå€ ã¿ã€ããŒãäœåããŠããéã¯å€æŽã§ããŸãããããããªããšãPWM ãµã€ã¯ã«ãäžæãããŸãã ãããã£ãŠãæ°ããéä¿¡ãããå€ã¯ãããã¡ã«çœ®ãããã¿ã€ããŒãã«ãŠã³ãããŠã³ã®çµããã«éããŠãªã»ããããããšåãåºãããŸãã
- ãšããžæã О äžå€®æãã¢ãŒã â Atmel ãšåããå¢çç·ãšäžå€®ã«æ²¿ã£ãé 眮 é«éPWM О äœçžè£æ£PWM.
- OCiREFãåºåæ¯èŒåºæºä¿¡å· â ãªãã¡ã¬ã³ã¹åºåä¿¡å·ãå®éã«ã¯ãPWM ã¢ãŒãã§å¯Ÿå¿ãããã³ã«è¡šç€ºãããä¿¡å·ã
ãã³é 眮ãããã§ã«æãããªããã«ã16 ã€ç®ãš 17.5.7 ã€ç®ã® XNUMX ã€ã®ã¿ã€ããŒã«ã¯ PWM æ©èœããããŸãã ã©ã¡ãã XNUMX ãããã§ãåè ã«ã¯å€ãã®è¿œå æ©èœããããŸã (ç¹ã«ãã«ãŠã³ãã¢ãããšã«ãŠã³ãããŠã³ã®äž¡æ¹ãå¯èœ)ã äž¡æ¹ãåçã«æ©èœããå¿ èŠããããããååšããªããã®ã誀ã£ãŠäœ¿çšããªãããã«ãæããã«æ§èœã®æªã XNUMX çªç®ã®ãã®ããå§ããããšã«ããŸããã åé¡ã¯ããªãã¡ã¬ã³ã¹ ããã¥ã¢ã«ã®ãã¹ãŠã®ã¿ã€ããŒã® PWM æ©èœã®èª¬æãæåã®ã¿ã€ã㌠(XNUMX PWM ã¢ãŒã) ã«é¢ããç« ã«ãããããããã¥ã¡ã³ãå šäœãåžžã«è¡ã£ããæ¥ããããªããã°ãªããªãããšã§ãã
STM8 ã® PWM ã«ã¯ãAtmega ã® PWM ã«æ¯ã¹ãŠéèŠãªå©ç¹ããããŸãã
å¢ç調æŽããã PWM
ã¢ã«ãŠã³ãæ§æã¯äžããäžãž
TIM_CR1 ã¬ãžã¹ã¿ã® DIR ããããã¯ãªã¢ããããšãããã ã¢ãã ã«ãŠã³ããã¢ã¯ãã£ãã«ãªããŸãã
äŸ
ãã®äŸã§ã¯ãæåã® PWM ã¢ãŒãã䜿çšããŸãã PWM åºæºä¿¡å· OCiREF ã¯ãTIM1_CNT < TIM1_CCRi ã§ããéã High ã«ä¿æãããŸãã ãã以å€ã®å Žåã¯ãäœãã¬ãã«ãå¿
èŠã«ãªããŸãã TIM1_CCRi ã¬ãžã¹ã¿ã®æ¯èŒå€ããªãŒãããŒãå€ (TIM1_ARR ã¬ãžã¹ã¿) ãã倧ããå ŽåãOCiREF ä¿¡å·ã¯ 1 ã«ä¿æãããŸãã æ¯èŒå€ã 0 ã®å ŽåãOCiREF 㯠XNUMX ã«ä¿æãããŸãã...
STM8ã¿ã€ããŒäž ã¢ããããŒãã€ãã³ã æåã«ãã§ãã¯ããŸã æ¯èŒå€ããããŠãã®ãšãã®ã¿åºæºä¿¡å·ãçæããŸãã Atmega ã®ã¿ã€ããŒã¯æåã«å€±æããŠããæ¯èŒãããã®çµæã compare value == 0
åºåã¯éã§ãããäœããã®æ¹æ³ã§åŠçããå¿
èŠããããŸã (ããšãã°ãããã°ã©ã ã§ããžãã¯ãå転ãããªã©)ã
ããã§ç§ãã¡ãããããã®ã¯ 8 ããã PWM (AR == 255
)ãäžããäžã«æ°ããŠãå¢çç·ã«æ²¿ã£ãŠé
眮ããŸãã é»çã¯ã«ãœãŒãã«ãã£ãŠãããã«æ¥ç¶ãããŠãããããPWM 㯠0 (LED ãªã³) ãåºåããå¿
èŠããããŸãã æ¯èŒå€ ãããŠãã®åŸ1ã
ããã€ãã«ã€ããŠã¯ãã§ã«èªã¿ãŸãã PWMã¢ãŒããããã£ãŠããªãã¡ã¬ã³ã¹ ããã¥ã¢ã«ã§ãã®ãã¬ãŒãº (18.6.8 - TIMx_CCMR1) ãæ€çŽ¢ããŠãXNUMX çªç®ã®ã¿ã€ããŒã«å¿ èŠãªã¬ãžã¹ã¿ãèŠã€ããŸãã
110: æåã® PWM ã¢ãŒã â äžããäžã«ã«ãŠã³ããããšãTIMx_CNT < TIMx_CCR1 ã®éãæåã®ãã£ãã«ãã¢ã¯ãã£ãã«ãªããŸãã ãã以å€ã®å Žåãæåã®ãã£ãã«ã¯éã¢ã¯ãã£ãã«ãªããŸãã [ææžã®ããã«å
ã«ã¯ãã¿ã€ã㌠1 ããã®èª€ã£ãã³ããŒã¢ã³ãããŒã¹ãããããŸã] 111: 1 çªç®ã® PWM ã¢ãŒã - äžããäžã«ã«ãŠã³ããããšãTIMx_CNT < TIMx_CCRXNUMX ã®éãæåã®ãã£ãã«ã¯éã¢ã¯ãã£ãã«ãªããŸãã ãã以å€ã®å Žåã¯ãæåã®ãã£ãã«ãã¢ã¯ãã£ãã«ãªããŸãã
LED ã¯ã«ãœãŒãã«ãã£ãŠ MK ã«æ¥ç¶ãããŠãããããXNUMX çªç®ã®ã¢ãŒããé©ããŠããŸã (æåã®ã¢ãŒããåæ§ã§ãããããã¯ãŸã ããããŸãã)ã
ããã 3 OC1PE: ãã³ 1 ã®ããªããŒããæå¹ã«ãã
0: TIMx_CCR1 ã®ããªããŒã ã¬ãžã¹ã¿ã¯ç¡å¹ã«ãªããŸãã TIMx_CCR1 ã«ã¯ããã€ã§ãæžã蟌ãããšãã§ããŸãã æ°ããå€ã¯ããã«æ©èœããŸãã
1: TIMx_CCR1 ã®ããªããŒã ã¬ãžã¹ã¿ãæå¹ã«ãªããŸãã èªã¿åã/æžã蟌ã¿æäœã¯ããªããŒã ã¬ãžã¹ã¿ã«ã¢ã¯ã»ã¹ããŸãã ããªããŒãå€ TIMx_CCR1 ã¯ãåæŽæ°ã€ãã³ãäžã«ã·ã£ã㊠ã¬ãžã¹ã¿ã«ããŒããããŸãã
*泚æ: PWM ã¢ãŒããæ£ããåäœããã«ã¯ãããªããŒã ã¬ãžã¹ã¿ãæå¹ã«ããå¿
èŠããããŸãã ããã¯ã·ã³ã°ã«ä¿¡å·ã¢ãŒãã§ã¯å¿
èŠãããŸãã (OPM ãããã TIMx_CR1 ã¬ãžã¹ã¿ã§èšå®ãããŸã)ã
ããŠãXNUMX çªç®ã®ã¿ã€ããŒã® XNUMX ã€ã®ãã£ã³ãã«ã«å¿ èŠãªãã®ããã¹ãŠãªã³ã«ããŸãããã
#define TIM2_CCMR1 *(volatile uint8_t *)0x005307
#define TIM2_CCMR2 *(volatile uint8_t *)0x005308
#define TIM2_CCMR3 *(volatile uint8_t *)0x005309
#define PWM_MODE2 0x70 //PWM mode 2, 0b01110000
#define OCxPE 0x08 //preload enable
TIM2_CCMR1 = (PWM_MODE2 | OCxPE);
TIM2_CCMR2 = (PWM_MODE2 | OCxPE);
TIM2_CCMR3 = (PWM_MODE2 | OCxPE);
AR 㯠XNUMX ã€ã® XNUMX ããã ã¬ãžã¹ã¿ã§æ§æãããŠããããã¹ãŠãåçŽã§ãã
#define TIM2_ARRH *(volatile uint8_t *)0x00530F
#define TIM2_ARRL *(volatile uint8_t *)0x005310
TIM2_ARRH = 0;
TIM2_ARRL = 255;
256 çªç®ã®ã¿ã€ããŒã¯äžããäžã«ã®ã¿ã«ãŠã³ãã§ããå¢çç·ã«æ²¿ã£ãŠé 眮ãããŠãããäœãå€æŽããå¿ èŠã¯ãããŸããã ããšãã°ãååšåšã 2 ã«èšå®ããŸããããXNUMX çªç®ã®ã¿ã€ããŒã®å Žåãååšåšã¯ TIMXNUMX_PSCR ã¬ãžã¹ã¿ã«èšå®ãããXNUMX ã®çŽ¯ä¹ã«ãªããŸãã
#define TIM2_PSCR *(volatile uint8_t *)0x00530E
TIM2_PSCR = 8;
æ®ã£ãŠããã®ã¯ãçµè«ãš XNUMX çªç®ã®ã¿ã€ããŒèªäœããªã³ã«ããããšã ãã§ãã æåã®åé¡ã¯ã¬ãžã¹ã¿ã«ãã£ãŠè§£æ±ºãããŸã ãã£ããã£/æ¯èŒ æå¹ã«ããŸã: 1ãXNUMX ã€ã®ãã£ãã«ãé察称ã«æ£åšããŠããŸãã ããã§ãä¿¡å·ã®æ¥µæ§ãå€æŽã§ããããšãããããŸãã åççã«ã¯ãPWM ã¢ãŒã XNUMX ã䜿çšããããšãå¯èœã§ããã次ã®ããã«æžããŸãã
#define TIM2_CCER1 *(volatile uint8_t *)0x00530A
#define TIM2_CCER2 *(volatile uint8_t *)0x00530B
#define CC1E (1<<0) // CCER1
#define CC2E (1<<4) // CCER1
#define CC3E (1<<0) // CCER2
TIM2_CCER1 = (CC1E | CC2E);
TIM2_CCER2 = CC3E;
æåŸã«ãTIMx_CR1 ã¬ãžã¹ã¿ã§ã¿ã€ããŒãéå§ããŸãã
#define TIM2_CR1 *(volatile uint8_t *)0x005300
TIM2_CR1 |= 1;
å®éã®å€ãæ¯èŒã®ããã«ã¿ã€ããŒã«è»¢éãããAnalogWrite() ã®åçŽãªé¡äŒŒç©ãäœæããŸãããã ã¬ãžã¹ã¿ã«ã¯äºæ³éãã®ååãä»ããããŠããŸã ã¬ãžã¹ã¿ã®ãã£ããã£/æ¯èŒãåãã£ãã«ã« 8 ã€ãããŸããTIM2_CCRxL ã®äžäœ 2 ããããš TIM8_CCRxH ã®äžäœ XNUMX ãããã§ãã XNUMX ããã PWM ãäœæããã®ã§ãæäžäœãããã®ã¿ãæžã蟌ãã ãã§ååã§ãã
#define TIM2_CCR1L *(volatile uint8_t *)0x005312
#define TIM2_CCR2L *(volatile uint8_t *)0x005314
#define TIM2_CCR3L *(volatile uint8_t *)0x005316
void setRGBled(uint8_t r, uint8_t g, uint8_t b)
{
TIM2_CCR1L = r;
TIM2_CCR2L = g;
TIM2_CCR3L = b;
}
泚ææ·±ãèªè ã¯ãPWM ã«ãããã«æ¬ é¥ãããã100% ã®ãã£ã«ãçæã§ããªãããšã«æ°ã¥ãã§ããã (æå€§å€ 255 ã§ã¯ãä¿¡å·ã¯ XNUMX ã¿ã€ã㌠ãµã€ã¯ã«ã®éå転ããŸã)ã LED ã®å Žåãããã¯åé¡ã§ã¯ãããŸããã泚ææ·±ãèªè ã§ããã°ããããä¿®æ£ããæ¹æ³ããã§ã«æšæž¬ã§ããã§ãããã
XNUMX çªç®ã®ã¿ã€ããŒã® PWM ãæ©èœããã®ã§ãæåã®ã¿ã€ããŒã«é²ã¿ãŸãããã
æåã®ã¿ã€ããŒã«ã¯åãã¬ãžã¹ã¿å ã«ãŸã£ããåããããããããŸã (16 çªç®ã®ã¿ã€ããŒã§ãäºçŽãããããŸãŸã«ãªã£ãŠãããããããããããçš®é¡ã®é«åºŠãªåŠçã®ããã«æåã®ã¿ã€ããŒã§ç©æ¥µçã«äœ¿çšãããŠããã ãã§ã)ã ãããã£ãŠãããŒã¿ã·ãŒãã§åãã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ãèŠã€ããŠã³ãŒããã³ããŒããã ãã§ååã§ãã ããŠãååšåšã®å€ãå€æŽããŸãããªããªã... æåã®ã¿ã€ããŒã¯ XNUMX ã®ã¹ãä¹ã§ã¯ãªããXNUMX ã€ã®ã¬ãžã¹ã¿å ã®æ£ç¢ºãª XNUMX ãããå€ãåãåããããšèããŠããŸãã ããªã¹ã±ãŒã©é« О ããŒã ãã¹ãŠãå®è¡ããŸããã...æåã®ã¿ã€ããŒã¯æ©èœããŸããã ã©ãããã®ïŒ
ãã®åé¡ã¯ãã¿ã€ã㌠1 ã®å¶åŸ¡ã¬ãžã¹ã¿ã«é¢ããã»ã¯ã·ã§ã³å šäœã調ã¹ãŠãXNUMX çªç®ã®ã¿ã€ããŒã«ãªãå¶åŸ¡ã¬ãžã¹ã¿ãæ¢ãããšã«ãã£ãŠã®ã¿è§£æ±ºã§ããŸãã ããã ãã 17.7.30 ãã¬ãŒã¯ã¬ãžã¹ã¿(TIM1_BKR)ãããã«ã¯æ¬¡ã®ãããããããŸãã
ã¡ã€ã³åºåãæå¹ã«ãã
#define TIM1_BKR *(volatile uint8_t *)0x00526D
TIM1_BKR = (1<<7);
ã³ãŒãã¯ããã§ãã¹ãŠå®äºã§ã
STM8 ãã«ããã¬ãã¯ã¹
STM8 ã§ã®å€éå
XNUMX çªç®ã®ãããããžã§ã¯ãã¯ãXNUMX ã€ã® RGB LED ã PWM ã¢ãŒã㧠XNUMX çªç®ã®ã¿ã€ããŒã«æ¥ç¶ããç°ãªãè²ã衚瀺ããããšã§ãã ãã㯠LED å€éåã®æŠå¿µã«åºã¥ããŠããŸããã€ãŸããLED ãéåžžã«çŽ æ©ããªã³/ãªããããšãLED ãåžžã«ãªã³ã«ãªã£ãŠããããã«èŠããŸã (ããžã§ã³ã®æç¶ãèŠèŠç¥èŠã®æ
£æ§ïŒã ãã€ãŠãã£ãããšããã
äœæ¥ã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããã«ãªããŸãã
- æåã® RGB LED ã®ã¢ããŒããæ¥ç¶ããŸãã
- ç¹ç¯ããŠãå¿ èŠãªä¿¡å·ãé°æ¥µã«éä¿¡ããŸãã
- PWM ãµã€ã¯ã«ãçµäºãããŸã§åŸ æ©ããŸããã
- XNUMX çªç®ã® RGB LED ã®ã¢ããŒããæ¥ç¶ããŸãã
- ç¹ç¯ããŸãã...
ãŸãããªã©ã ãã¡ãããçŸããåäœãããããã«ã¯ãã¢ããŒããæ¥ç¶ãããåæã« LED ããç¹ç¯ãããå¿ èŠããããŸãã ãŸãããããã¯ã»ãšãã©ã§ãã ãããã®å ŽåããXNUMX çªç®ã®ã¿ã€ããŒã® XNUMX ã€ã®ãã£ãã«ã«å€ãåºåããUEV ã«éãããšãã«å€ãå€æŽããåæã«çŸåšã¢ã¯ãã£ã㪠RGB LED ãå€æŽããã³ãŒããèšè¿°ããå¿ èŠããããŸãã
LED ã®åãæ¿ãã¯èªåçã«è¡ããããããå²ã蟌ã¿ãã³ãã©ãŒãããŒã¿ãåãåãããã㪠ã¡ã¢ãªããäœæããå¿ èŠããããŸãã ããã¯åçŽãªé åã§ãã
uint8_t colors[8][3];
ç¹å®ã® LED ã®è²ãå€æŽããã«ã¯ããã®é åã«å¿ èŠãªå€ãæžã蟌ãã ãã§ååã§ãã ãããŠãå€æ°ã¯ã¢ã¯ãã£ã㪠LED ã®æ°ãæ åœããŸãã
uint8_t cnt;
ããã«ããã¬ã¯ãµ
é©åãªå€éåãè¡ãã«ã¯ãå¥åŠãªããšã«ãCD74HC238 ããã«ããã¬ã¯ãµãå¿
èŠã§ãã ããã«ããã¬ã¯ãµ - ããŒããŠã§ã¢ã«ãªãã¬ãŒã¿ãå®è£
ããããã <<
ã 0 ã€ã®å
¥åãã³ (ããã 1ã2ãXNUMX) ãä»ã㊠XNUMX ãããã®æ°å€ X ãå
¥åãããšãããã«å¿çããŠåºåçªå· (1<<X
ïŒã ãããã®æ®ãã®å
¥åã¯ãèšèšå
šäœãã¹ã±ãŒã«ããããã«äœ¿çšãããŸãã ãã®ãããã¯ãå æããããã€ã¯ãã³ã³ãããŒã©ãŒã®ãã³ã®æ°ãæžããããã ãã§ãªããå®å
šã®ããã«ãå¿
èŠã§ãã誀ã£ãŠå¯èœãªéãå€ãã® LED ãç¹ç¯ãããããMK ãçŒãããããªãããã«ããããã§ãã ãããã®äŸ¡æ Œã¯ XNUMX ãããŒã§ãåžžã«å®¶åºã®è¬ç®±ã«ä¿ç®¡ããå¿
èŠããããŸãã
åœç€Ÿã® CD74HC238 ã¯ãç®çã® LED ã®ã¢ããŒãã«é»å§ãäŸçµŠããŸãã æ¬æ Œçãªãã«ããã¬ãã¯ã¹ã§ã¯ãP-MOSFET ãéããŠåã«é»å§ãäŸçµŠããŸããããã®ãã¢ã§ã¯çŽæ¥å¯èœã§ãã ã«ããã°ãããã¯20 mAãæ¶è²»ããŸã 絶察æ倧å®æ Œ ããŒã¿ã·ãŒãã«èšèŒãããŠããŸãã ãã
H = é«é»å§ã¬ãã«ãL = äœé»å§ã¬ãã«ãX â ãã³ãã±ã¢
E2 ãš E1 ãã°ã©ã³ãã«æ¥ç¶ããE3ãA0ãA1ãA3 ã STM5 ã®ãã³ PD3ãPC4ãPC5ãPC8 ã«æ¥ç¶ããŸãã äžã®è¡šã«ã¯ããŒã¬ãã«ãšãã€ã¬ãã«ã®äž¡æ¹ãå«ãŸããŠããããããããã®ãã³ãããã·ã¥ãã«ãã³ãšããŠæ§æããŸãã
PWM
XNUMX çªç®ã®ã¿ã€ããŒã® PWM ã¯åã®ã¹ããŒãªãŒãšåãæ¹æ³ã§èšå®ãããŸããã次㮠XNUMX ã€ã®éãããããŸãã
ãŸããå²ã蟌ã¿ãæå¹ã«ããå¿ èŠããããŸãã ã¢ããããŒãã€ãã³ã (UEV) ã¢ã¯ãã£ã LED ãåãæ¿ããé¢æ°ãåŒã³åºããŸãã ããã¯ããããå€æŽããããšã§è¡ãããŸã æŽæ°å²ã蟌ã¿ã€ããŒãã« ããããããååã®ç»é²ç°¿ã«
å²ã蟌ã¿ã€ããŒãã«ã¬ãžã¹ã¿
#define TIM2_IER *(volatile uint8_t *)0x005303
//enable interrupt
TIM2_IER = 1;
XNUMX çªç®ã®éãã¯ã次ã®ãããªå€éåã®çŸè±¡ã«é¢é£ããŠããŸãã ãŽãŒã¹ã â ãã€ãªãŒãã®å¯çã°ããŒã ç§ãã¡ã®å ŽåãUEV ã§å²ã蟌ã¿ãåŒãèµ·ãããã¿ã€ããŒãåäœãç¶ããã¿ã€ããŒããã³ã«äœããæžã蟌ã¿å§ããåã«å²ã蟌ã¿ãã³ãã©ãŒã LED ãåãæ¿ããæéããªããšããäºå®ãåå ã§çºçããå¯èœæ§ããããŸãã ããã«å¯ŸåŠããã«ã¯ãããžãã¯ãå転ã (0 = æ倧èŒåºŠã255 = äœãç¹ç¯ããªã)ã極端ãªãã¥ãŒã㣠ãµã€ã¯ã«å€ãé¿ããå¿ èŠããããŸãã ãããã®ã UEV ã®åŸãLED ã XNUMX ã€ã® PWM ãµã€ã¯ã«ã®éå®å šã«æ¶ç¯ããããšã確èªããŸãã
極æ§ã®å€æŽ:
//set polarity
TIM2_CCER1 |= (CC1P | CC2P);
TIM2_CCER2 |= CC3P;
rãgãb ã 255 ã«èšå®ããããšã¯é¿ãã䜿çšãããšãã¯å¿ ãå転ããŠãã ããã
å²ã蟌ã¿
å²ã蟌ã¿ã®æ¬è³ªã¯ãç¹å®ã®ç¶æ³äžã§ããããã¡ã€ã³ ããã°ã©ã ã®å®è¡ãåæ¢ããäœããã®å€éšé¢æ°ãåŒã³åºãããšã§ãã å²ã蟌ã¿ã¯ãã¿ã€ããŒãªã©ã®å€éšãŸãã¯å éšã®åœ±é¿ã«ãã£ãŠçºçããŸãã
ST Visual Develop ã§æåã«ãããžã§ã¯ããäœæãããšããããã« main.c
è¬ã®ãã¡ã€ã«ãå
¥ã£ããŠã£ã³ããŠãåãåããŸãã stm8_interrupt_vector.c
ããããžã§ã¯ãã«èªåçã«å«ãŸããŸãã ãã®ãã¡ã€ã«ã§ã¯ãåå²ã蟌ã¿ã«é¢æ°ãå²ãåœãŠãããŠããŸãã NonHandledInterrupt
ã é¢æ°ãç®çã®å²ã蟌ã¿ã«ãã€ã³ãããå¿
èŠããããŸãã
ããŒã¿ã·ãŒãã«ã¯å²ã蟌ã¿ãã¯ãã«ã®è¡šããããå¿ èŠãªå²ã蟌ã¿ãã¯ãã«ãããã«ãããŸãã
13 TIM2 æŽæ°/ãªãŒããŒãããŒ
14 TIM2 ãã£ããã£/æ¯èŒ
UEV 㧠LED ãå€æŽããå¿ èŠããããããå²ã蟌㿠#13 ãå¿ èŠã§ãã
ãããã£ãŠããŸããã¡ã€ã«å
㧠stm8_interrupt_vector.c
å²ã蟌ã¿çªå· 13 (IRQ13) ãæ
åœããé¢æ°ã®ããã©ã«ãåãç¬èªã®ååã«å€æŽããŸãã
{0x82, TIM2_Overflow}, /* irq13 */
次ã«ããã¡ã€ã«ãäœæããå¿
èŠããããŸã main.h
次ã®å
容ã§:
#ifndef __MAIN_H
#define __MAIN_H
@far @interrupt void TIM2_Overflow (void);
#endif
ãããŠæåŸã«ããã®é¢æ°ã main.c
:
@far @interrupt void TIM2_Overflow (void)
{
PD_ODR &= ~(1<<5); // вÑÑÑбаеЌ ЎеЌÑлÑÑОплекÑПÑ
PC_ODR = (cnt<<3); // запОÑÑваеЌ в ЎеЌÑлÑÑОплекÑÐŸÑ ÐœÐŸÐ²ÐŸÐµ зМаÑеМОе
PD_ODR |= (1<<5); // вклÑÑаеЌ ЎеЌÑлÑÑОплекÑПÑ
TIM2_SR1 = 0; // ÑбÑаÑÑваеЌ Ñлаг Update Interrupt Pending
cnt++;
cnt &= 7; // ЎвОгаеЌ ÑÑеÑÑОк LED
TIM2_CCR1L = ~colors[cnt][0]; // пеÑеЎаеЌ в бÑÑÐµÑ ÐžÐœÐ²ÐµÑÑОÑПваММÑе зМаÑеМОÑ
TIM2_CCR2L = ~colors[cnt][1]; // ÐŽÐ»Ñ ÑлеЎÑÑÑегП ÑОкла КÐÐ
TIM2_CCR3L = ~colors[cnt][2]; //
return;
}
ããšã¯å²ã蟌ã¿ãæå¹ã«ããã ãã§ãã ããã¯ã¢ã»ã³ãã©ã³ãã³ãã䜿çšããŠè¡ãããŸã rim
- ã§æ¢ãå¿
èŠããããŸã
//enable interrupts
_asm("rim");
å¥ã®ã¢ã»ã³ãã© ã³ãã³ãã¯æ¬¡ã®ãšããã§ãã sim
â å²ã蟌ã¿ããªãã«ããŸãã æ°ããå€ãããã㪠ã¡ã¢ãªãã«æžã蟌ãŸããŠããéã¯ãééã£ãç¬éã«çºçããå²ã蟌ã¿ã«ãã£ãŠã¢ã¬ã€ãæãªãããªãããã«ããããããªãã«ããå¿
èŠããããŸãã
ãã¹ãŠã®ã³ãŒã -
å°ãªããšã誰ãããã®èšäºã圹ã«ç«ã€ãšæã£ãŠãããã°ãç§ãæžããã®ã¯ç¡é§ã§ã¯ãªãã£ããšããããšã«ãªããŸãã ã³ã¡ã³ãããææããåŸ ã¡ããŠãããŸãããã¹ãŠã«ãçãããããåªããŸãã
åºæïŒ habr.com