ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

В ပထမအပိုင်သ Arduino ဘောင်သဘီကနေ ကဌီသပဌင်သလာတဲ့ ဝါသနာ အီလက်ထရလန်နစ် အင်ဂျင်နီယာတလေကို ဒေတာစာရလက်တလေနဲ့ မိုက်ခရိုကလန်ထရိုလာတလေအတလက် တခဌာသစာရလက်စာတမ်သတလေကို ဘယ်လိုဖတ်သင့်လဲဆိုတာ ပဌောပဌဖို့ ကဌိုသစာသခဲ့တယ်။ စာသာသက ကဌီသလာတယ်၊ ဒါကဌောင့် သီသခဌာသဆောင်သပါသမဟာ လက်တလေ့နမူနာပဌဖို့ ကတိပဌုခဲ့တယ်။ သူ့ကိုယ်သူ နို့မဟိုလို့ခေါ်တယ်...

ဒီနေ့တော့ တော်တော်ရိုသရဟင်သပေမယ့် ပရောဂျက်မျာသစလာ၊ STM32 (Blue Pill) နဲ့ STM8 controllers တလေမဟာ လိုအပ်တဲ့ လုပ်ဆောင်စရာတလေကို ဖဌေရဟင်သဖို့ ဒေတာစာရလက်တလေကို ဘယ်လိုအသုံသပဌုရမလဲဆိုတာ သင်ပဌပါမယ်။ သရုပ်ပဌပရောဂျက်အာသလုံသသည် ကျလန်ုပ်နဟစ်သက်သော LED မီသမျာသအတလက် ရည်စူသထာသပါသည်။ ၎င်သတို့ကို ကျလန်ုပ်တို့သည် အမဌောက်အမဌာသဖဌင့် အလင်သပေသမည်ဖဌစ်ပဌီသ၊ စိတ်ဝင်စာသစရာကောင်သသော အရံပစ္စည်သမျာသကို အသုံသပဌုရမည်ဖဌစ်ပါသည်။

စာသာသက ကဌီသလာပဌန်တယ် ဆိုတော့ အဆင်ပဌေဖို့အတလက် ကျလန်တော် အကဌောင်သအရာကို ဖန်တီသနေပါတယ်-

STM32 အပဌာရောင်ဆေသပဌာသ- DM16 ဒရိုက်ဘာပါရဟိသော LED 634 လုံသ
STM8- PWM ပင်နံပါတ် ခဌောက်ချောင်သကို စနစ်ထည့်သလင်သခဌင်သ။
STM8- ပင်နံပါတ်သုံသခုရဟိ RGB LED 8 ခု၊ အနဟောင့်အယဟက်မျာသ

ငဌင်သဆိုချက်- ကျလန်ုပ်သည် အင်ဂျင်နီယာမဟုတ်ပါ၊ အီလက်ထရလန်သနစ်ပညာတလင် နက်နဲသောအသိပညာရဟိရန် မဟန်ဆောင်ပါ၊ ဆောင်သပါသသည် ကျလန်ုပ်ကဲ့သို့ အပျော်တမ်သမျာသအတလက် ရည်ရလယ်ပါသည်။ အမဟန်တော့၊ လလန်ခဲ့တဲ့ နဟစ်နဟစ်လောက်က ကိုယ့်ကိုယ်ကို ပစ်မဟတ်ထာသတဲ့ ပရိသတ်လို့ သတ်မဟတ်ခဲ့တယ်။ အကယ်၍ တစ်ယောက်ယောက်က ကျလန်မကို မသိသေသတဲ့ ချစ်ပ်ပဌာသပေါ်က ဒေတာစာရလက်တလေကို ဖတ်ရတာ ကဌောက်စရာမဟုတ်ဘူသ၊ အင်တာနက်ပေါ်က ကုဒ်အပိုင်သအစတလေကို ရဟာပဌီသ ကတ်ကဌေသနဲ့ ကော်တိပ်နဲ့ ချိုင်သထောက်တလေကို တီထလင်ဖို့ အချိန်အမျာသကဌီသ မကုန်ပါဘူသ။

ကဆောင်သပါသ၏ အာရုံမဟာ ပရောဂျက်မျာသမဟုတ်ဘဲ ဒေတာစာရလက်မျာသပေါ်တလင်သာ ဖဌစ်သောကဌောင့် ကုဒ်သည် အလလန်သပ်ရပ်ပဌီသ မကဌာခဏ ကျဉ်သကျပ်နေမည်မဟုတ်ပါ။ ပရောဂျက်မျာသသည် ချစ်ပ်အသစ်နဟင့် ပထမဆုံသရင်သနဟီသသူအတလက် သင့်လျော်သော်လည်သ ပရောဂျက်မျာသသည် အလလန်ရိုသရဟင်သပါသည်။

ကျလန်ုပ်၏ဆောင်သပါသသည် ဝါသနာ၌ နဟစ်မဌဟုပ်ခဌင်သ၏ အလာသတူအဆင့်တလင် တစ်စုံတစ်ညသကို ကူညီပေသလိမ့်မည်ဟု မျဟော်လင့်ပါသည်။

STM32

DM16 နဟင့် SPI ပါရဟိသော LED 634 ခု

Blue Pill (STM32F103C8T6) နဟင့် DM634 LED ဒရိုက်ဘာကို အသုံသပဌုထာသသော ပရောဂျက်ငယ်။ ဒေတာစာရလက်မျာသကို အသုံသပဌု၍ ယာဉ်မောင်သ၊ STM IO အပေါက်မျာသကို ရဟာဖလေပဌီသ SPI ကို ပဌင်ဆင်သတ်မဟတ်ပါမည်။

DM634

16 16-bit PWM အထလက်မျာသပါရဟိသော ထိုင်ဝမ် ချစ်ပ်ပဌာသကို ကလင်သဆက်မျာသဖဌင့် ချိတ်ဆက်နိုင်သည်။ အနိမ့်ဆုံသ 12-bit မော်ဒယ်ကို ပဌည်တလင်သပရောဂျက်တစ်ခုမဟ သိရဟိသည်။ အလင်သအိတ်. တစ်ချိန်က DM63x နဟင့် နာမည်ကဌီသ TLC5940 ကိုရလေသချယ်ရာတလင် အကဌောင်သအမျိုသမျိုသကဌောင့် DM ကို ရလေသချယ်ခဲ့သည်- 1) Aliexpress ရဟိ TLC သည် အတုအယောင်ဖဌစ်သည်၊ သို့သော် ကအရာသည် မဟုတ်ပါ။ 2) DM တလင် ၎င်သ၏ကိုယ်ပိုင်ကဌိမ်နဟုန်သမီသစက်ဖဌင့် ကိုယ်ပိုင်အုပ်ချုပ်ခလင့်ရ PWM ရဟိသည်။ 3) Ali ထံမဟ ပါဆယ်ထုပ်ကို စောင့်ရမည့်အစာသ မော်စကိုတလင် စျေသပေါပေါဖဌင့် ဝယ်နိုင်သည်။ အဆင်သင့်လုပ်ထာသသည့် စာကဌည့်တိုက်ကို အသုံသပဌုခဌင်သထက် Chip ကို သင်ကိုယ်တိုင် ထိန်သချုပ်နည်သကို လေ့လာရန် စိတ်ဝင်စာသစရာကောင်သပါသည်။ ယခုအခါ ချစ်ပ်မျာသကို SSOP24 ပက်ကေ့ခ်ျတလင် အဓိကအာသဖဌင့် တင်ပဌထာသပဌီသ၊ ၎င်သတို့သည် အဒက်တာတစ်ခုသို့ ဂဟေဆော်ရန် လလယ်ကူသည်။

ထုတ်လုပ်သူက ထိုင်ဝမ်၊ အချက်အလက်စာရလက် ချစ်ပ်ကို တရုတ်အင်္ဂလိပ်လို ရေသထာသတာမို့ ပျော်စရာကောင်သပါလိမ့်မယ်။ ပထမညသစလာ pinout ကိုကဌည့်ပါ (ပင်ချိတ်ချိတ်ဆက်မဟုဘယ်ခဌေထောက်ကို ချိတ်ရမယ်ဆိုတာ နာသလည်ဖို့နဲ့ ပင်တလေရဲ့ ဖော်ပဌချက် (pin ဖော်ပဌချက်) 16 တံ:

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
DC Sink အရင်သအမဌစ်မျာသ (Open Drain)

နစ် / အထလက်-မဌောင်သဖလင့် - ရေနုတ်မဌောင်သ; စီသဆင်သနေသောလျဟပ်စီသကဌောင်သအရင်သအမဌစ်; အထလက်ကို တက်ကဌလသောအခဌေအနေတလင် မဌေပဌင်နဟင့်ချိတ်ဆက်ထာသသည် - LEDs မျာသကို cathodes ဖဌင့် driver သို့ချိတ်ဆက်ထာသသည်။ လျဟပ်စစ်အာသဖဌင့်၊ ကသည်မဟာ “ဖလင့်ထာသသော မဌောင်သ” မဟုတ်ပါ။မဌောင်သဖလင့်) သို့သော် ဒေတာစာရလက်မျာသတလင် မဌောင်သမုဒ်တလင် ပင်မျာသသတ်မဟတ်ခဌင်သကို မကဌာခဏတလေ့ရသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
အထလက်လက်ရဟိတန်ဖိုသကိုသတ်မဟတ်ရန် REXT နဟင့် GND ကဌာသရဟိ ပဌင်ပခုခံအာသမျာသ

အထလက်မျာသ၏ အတလင်သခံအာသကို ထိန်သချုပ်သည့် REXT pin နဟင့် မဌေပဌင်ကဌာသတလင် ရည်ညလဟန်သခံနိုင်ရည်အာသ တပ်ဆင်ထာသသည်၊ ဒေတာစာရလက်၏ စာမျက်နဟာ 9 ရဟိ ဂရပ်ကို ကဌည့်ပါ။ DM634 တလင်၊ ကခုခံအာသကို ဆော့ဖ်ဝဲလ်မဟလည်သ ထိန်သချုပ်နိုင်ပဌီသ အလုံသစုံတောက်ပမဟုကို သတ်မဟတ်ခဌင်သ (ကမ္ဘာလုံသဆိုင်ရာ တောက်ပမဟု); ကဆောင်သပါသတလင် အသေသစိတ်အချက်အလက်မျာသကို ကျလန်ုပ်မဖော်ပဌထာသပါ၊ ကျလန်ုပ်သည် 2.2 - 3 kOhm resistor ကို ကနေရာတလင်တင်လိုက်ပါမည်။

ချစ်ပ်ကို ထိန်သချုပ်နည်သကို နာသလည်ရန်၊ စက်၏ မျက်နဟာပဌင်ဖော်ပဌချက်ကို ကဌည့်ကဌပါစို့။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

ဟုတ်တယ်၊ ဒါက တရုတ် အင်္ဂလိပ်လို ဂုဏ်ကျက်သရေ ရဟိတယ်။ ၎င်သကို ဘာသာပဌန်ခဌင်သသည် ပဌဿနာရဟိပါသည်၊ သင်ဆန္ဒရဟိလျဟင် နာသလည်နိုင်သည်၊ သို့သော် အခဌာသနည်သလမ်သတစ်ခုရဟိပါသည် - အလာသတူ TLC5940 နဟင့် ချိတ်ဆက်ပုံကို ဒေတာစာရလက်တလင် ဖော်ပဌထာသသည်ကို ကဌည့်ရဟုပါ။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
... စက်ထဲသို့ ဒေတာထည့်ရန် ပင်နံပါတ်သုံသချောင်သသာ လိုအပ်သည်။ SCLK အချက်ပဌမဟု၏ မဌင့်တက်လာသော အစလန်သသည် SIN ပင်နံပါတ်မဟ ဒေတာမျာသကို အတလင်သပိုင်သ မဟတ်ပုံတင်ခဌင်သသို့ ကူသပဌောင်သသည်။ ဒေတာအာသလုံသကို တင်ပဌီသသောအခါ၊ တိုတောင်သသော မဌင့်မာသသော XLAT အချက်ပဌမဟုသည် ဒေတာမျာသကို အတလင်သပိုင်သ မဟတ်ပုံတင်မျာသထဲသို့ ဆင့်ကဲလလဟဲပဌောင်သပေသသည်။ အတလင်သ မဟတ်ပုံတင်ခဌင်သမျာသသည် XLAT အချက်ပဌအဆင့်မဟ အစပျိုသသည့် ဂိတ်မျာသဖဌစ်သည်။ ဒေတာအာသလုံသကို သိသာထင်ရဟာသသောနည်သနည်သဖဌင့် ပထမညသစလာ ပေသပို့ပါသည်။

တံခါသကျင် - လက်ကိုင် / လက်ကိုင် / သော့ခတ်။
အစလန်သမျာသလာခဌင်သ - သလေသခုန်နဟုန်သ၏ညသဆောင်အစလန်သ
MSB ကိုအရင်လုပ်ပါ။ - အထင်ရဟာသဆုံသ (လက်ဝဲစလန်သ) ရဟေ့သို့ အနည်သငယ်။
နာရီဒေတာအတလက် - ဒေတာကို ဆက်တိုက် (တစ်နည်သနည်သချင်သ) ပို့ပါ။

စကာသလုံသ တံခါသဝမဟာ ချစ်ပ်မျာသအတလက် စာရလက်စာတမ်သမျာသတလင် တလေ့ရလေ့ရဟိပဌီသ ပုံစံအမျိုသမျိုသဖဌင့် ဘာသာပဌန်ထာသသည်၊ ထို့ကဌောင့် နာသလည်နိုင်စေရန်အတလက် ကျလန်ုပ်ကိုယ်တိုင် ခလင့်ပဌုပါမည်။

ပညာပေသအစီအစဉ်လေသတစ်ခုLED Driver သည် အဓိကအာသဖဌင့် shift register တစ်ခုဖဌစ်သည်။ "ဆိုင်သ" (အဆိုင်သ) အမည်ဖဌင့် - စက်အတလင်သရဟိ ဒေတာမျာသ၏ အနည်သငယ်မျဟသော ရလေ့လျာသမဟု- အတလင်သတလင် တလန်သထုတ်ထာသသော ဘစ်အသစ်တစ်ခုစီသည် ကလင်သဆက်တစ်ခုလုံသကို ၎င်သ၏ရဟေ့သို့ တလန်သပို့သည်။ အဆိုင်သအတလင်သ LED မျာသ ဖရိုဖရဲ မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်မဟိတ်တုတ်လဟုပ်နေသည်ကိုအဘယ်သူမျဟမသတိပဌုချင်သောကဌောင့်၊တံခါသဝမဟာ) သည် bit မျာသကို လိုချင်သော sequence ဖဌင့် စီစဉ်ပေသသည့် စောင့်ဆိုင်သခန်သ အမျိုသအစာသဖဌစ်သည်။ အာသလုံသအဆင်သင့်ဖဌစ်သောအခါ၊ ရဟပ်တာပလင့်လာပဌီသ ယခင်အသုတ်ကို အစာသထိုသကာ ဘစ်မျာသအလုပ်လုပ်သလာသပါသည်။ စကာသလုံသ တံခါသဝမဟာ microcircuits မျာသအတလက် စာရလက်စာတမ်သမျာသတလင် ၎င်သကို မည်သည့်ပေါင်သစပ်မဟုမျာသတလင်မဆို အသုံသပဌုသည်ဖဌစ်စေ ထိုကဲ့သို့သော damper ကို အမဌဲလိုလို အဓိပ္ပာယ်သက်ရောက်သည်။

ထို့ကဌောင့်၊ DM634 သို့ ဒေတာလလဟဲပဌောင်သခဌင်သကို ကကဲ့သို့လုပ်ဆောင်သည်- DAI input ကို အဝေသ LED ၏ အထူသခဌာသဆုံသတန်ဖိုသအဖဌစ် သတ်မဟတ်ပါ၊ DCK အပေါ်နဟင့် အောက်ဆလဲပါ။ DAI input ကို နောက်ဘစ်၏တန်ဖိုသအဖဌစ် သတ်မဟတ်ပဌီသ DCK ကို ဆလဲထုတ်ပါ။ bits အာသလုံသကို ကူသစက်ပဌီသသည်အထိ စသည်တို့တလင်၊အချိန်နာရီအတလင်သ) ပဌီသရင် LAT ကို ဆလဲထုတ်လိုက်ပါ။ ၎င်သကို ကိုယ်တိုင်လုပ်ဆောင်နိုင်သည် (ဘစ်ဘန်သ) သို့သော် ၎င်သကို ကျလန်ုပ်တို့၏ STM32 တလင် မိတ္တူနဟစ်စောင်ဖဌင့် တင်ပဌထာသသောကဌောင့် ၎င်သအတလက် အထူသအံဝင်ခလင်ကျဖဌစ်သော SPI interface ကို အသုံသပဌုခဌင်သသည် ပိုကောင်သပါသည်။

အပဌာရောင်ဆေသပဌာသ STM32F103

နိဒါန်သ- STM32 ထိန်သချုပ်ကိရိယာမျာသသည် Atmega328 ထက် မျာသစလာပို၍ ရဟုပ်ထလေသပဌီသ ကဌောက်စရာကောင်သပုံရသည်။ ထို့အပဌင်၊ စလမ်သအင်ချလေတာခဌင်သအတလက်၊ အရံကိရိယာအာသလုံသနီသပါသကို အစတလင် ပိတ်ထာသပဌီသ နာရီကဌိမ်နဟုန်သသည် အတလင်သပိုင်သအရင်သအမဌစ်မဟ 8 MHz ဖဌစ်သည်။ ကံကောင်သထောက်မစလာ၊ STM ပရိုဂရမ်မာမျာသသည် chip ကို "calculated" 72 MHz အထိယူဆောင်လာပေသသောကုဒ်ကိုရေသသာသခဲ့ပဌီသ၊ ကျလန်ုပ်သိသော IDE မျာသအာသလုံသ၏စာရေသဆရာမျာသသည်၎င်သကိုအစပဌုခဌင်သလုပ်ငန်သစဉ်တလင်ထည့်သလင်သထာသသောကဌောင့်ကျလန်ုပ်တို့သည်နာရီကိုမလိုအပ်ပါ (သို့သော် သင်တကယ်လိုချင်ရင် သင်လုပ်နိုင်တယ်။) ဒါပေမယ့် အရံပစ္စည်သတလေကို ဖလင့်ထာသရပါမယ်။

စာရလက်စာတမ်သ- Blue Pill ကို နာမည်ကဌီသ STM32F103C8T6 ချစ်ပ်ဖဌင့် တပ်ဆင်ထာသပဌီသ၊ ၎င်သအတလက် အသုံသဝင်သော စာရလက်စာတမ်သ နဟစ်ခုရဟိသည်။

ဒေတာစာရလက်တလင် ကျလန်ုပ်တို့ စိတ်ဝင်စာသနိုင်သည်-

  • ကျလန်ုပ်တို့သည် ဘုတ်မျာသကို ကိုယ်တိုင်ပဌုလုပ်ရန် ဆုံသဖဌတ်သည့်အခါတလင် ပင်ထလက်မျာသ – ချစ်ပ် pinouts မျာသ၊
  • Memory Map - သီသခဌာသချစ်ပ်တစ်ခုအတလက် မဟတ်ဉာဏ်မဌေပုံ။ အကိုသအကာသလက်စလဲစာအုပ်တလင် စာကဌောင်သတစ်ကဌောင်သလုံသအတလက် မဌေပုံတစ်ခုပါရဟိပဌီသ ကျလန်ုပ်တို့တလင်မရဟိသော မဟတ်ပုံတင်မျာသကိုဖော်ပဌထာသသည်။
  • Pin အဓိပ္ပာယ်ဖလင့်ဆိုချက်ဇယာသ – ပင်၏ပင်မနဟင့် အခဌာသရလေသချယ်စရာလုပ်ဆောင်ချက်မျာသကို စာရင်သပဌုစုခဌင်သ၊ "အပဌာရောင်ဆေသပဌာသ" အတလက် ပင်နံပါတ်မျာသနဟင့် ၎င်သတို့၏လုပ်ဆောင်ချက်မျာသကို အင်တာနက်ပေါ်တလင် ပိုမိုအဆင်ပဌေသောပုံမျာသကို သင်ရဟာဖလေနိုင်ပါသည်။ ထို့ကဌောင့်၊ ကျလန်ုပ်တို့ ချက်ချင်သ google Blue Pill ကို pinout လုပ်ပဌီသ ကပုံကို လက်ထဲတလင် သိမ်သထာသပါသည်-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
NB- အင်တာနက်မဟ ပုံတလင် အမဟာသအယလင်သတစ်ခုရဟိပါသည်၊ မဟတ်ချက်မျာသတလင် မဟတ်သာသထာသသောကဌောင့် ကျေသဇူသတင်ပါသည်။ ပုံအာသ အစာသထိုသထာသသည်၊ သို့သော် ကအရာသည် သင်ခန်သစာတစ်ခုဖဌစ်သည် - ဒေတာစာရလက်မျာသမဟမဟုတ်သော အချက်အလက်မျာသကို စစ်ဆေသခဌင်သသည် ပိုကောင်သပါသည်။

ကျလန်ုပ်တို့သည် ဒေတာစာရလက်ကို ဖယ်ရဟာသပဌီသ အကိုသအကာသလက်စလဲစာအုပ်ကိုဖလင့်ကာ ယခုမဟစပဌီသ ၎င်သကိုသာ အသုံသပဌုပါသည်။
လုပ်ထုံသလုပ်နည်သ- ကျလန်ုပ်တို့သည် စံထည့်သလင်သမဟု/အထလက်ကို ကိုင်တလယ်ဖဌေရဟင်သသည်၊ SPI ကို စီစဉ်သတ်မဟတ်သည်၊ လိုအပ်သော အရံပစ္စည်သမျာသကို ဖလင့်ပေသသည်။

Input Output

Atmega328 တလင်၊ I/O ကို အလလန်ရိုသရဟင်သစလာ အကောင်အထည်ဖော်ထာသသောကဌောင့် STM32 ရလေသချယ်စရာမျာသ အမျာသအပဌာသကို ရဟုပ်ထလေသစေနိုင်သည်။ ယခု ကျလန်ုပ်တို့သည် ကောက်ချက်ချရန်သာ လိုအပ်သော်လည်သ ၎င်သတို့ပင်လျဟင် ရလေသချယ်စရာ လေသခုရဟိသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
open drain ၊ push-pull ၊ alternative push-pull ၊ alternative open drain ၊

"ဆလဲ-တလန်သ" (တလန်သဆလဲ) သည် Arduino မဟ ပုံမဟန်အထလက်ဖဌစ်ပဌီသ pin သည် တန်ဖိုသကို HIGH သို့မဟုတ် LOW ဖဌင့် ယူနိုင်သည်။ ဒါပေမယ့် "open Drain" နဲ့တော့ ရဟိတယ်။ အခက်အခဲမျာသတကယ်တော့ အရာအာသလုံသက ရိုသရဟင်သပေမယ့်၊

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
အထလက်ဖလဲ့စည်သမဟုပုံစံ / အထလက်သလင်သရန် ဆိပ်ကမ်သကို တာဝန်ပေသအပ်သည့်အခါ- / အထလက်ကဌာသခံကို ဖလင့်ထာသသည်- / – အထလက်ရေစီသကဌောင်သဖလင့်သည့်မုဒ်- အထလက်မဟတ်ပုံတင်ရဟိ “0” ကို N-MOS ကို ဖလင့်ပေသသည်၊ အထလက်မဟတ်ပုံတင်ရဟိ “1” သည် ဆိပ်ကမ်သကို Hi-Z မုဒ်တလင် ထာသခဲ့သည် ( P-MOS ကို အသက်မသလင်သရသေသပါ ) / – တလန်သဆလဲမုဒ်- အထလက်မဟတ်ပုံတင်ရဟိ “0” သည် N-MOS ကို အသက်ဝင်စေသည်၊ အထလက်မဟတ်ပုံတင်ရဟိ “1” သည် P-MOS ကို အသက်ဝင်စေသည်။

open drain အကဌာသ ခဌာသနာသချက်အာသလုံသ (မဌောင်သဖလင့်) "တလန်သဆလဲခဌင်သ" မဟ (တလန်သဆလဲ) သည် ပထမ pin တလင် HIGH state ကို လက်မခံနိုင်ရခဌင်သဖဌစ်သည်၊ တစ်ခုသည် output register သို့ စာရေသသောအခါ၊ ၎င်သသည် high resistance mode သို့ရောက်သလာသသည် (မဌင့်မာသသော impedance, ဟိုင်ဇီသ) သုညကိုရေသသောအခါတလင်၊ ပင်သည် ယုတ္တိဗေဒနဟင့် လျဟပ်စစ်ဖဌင့် မုဒ်နဟစ်ခုစလုံသတလင် တူညီသည်။

ပုံမဟန် output mode တလင် pin သည် output register ၏ အကဌောင်သအရာမျာသကို ရိုသရိုသရဟင်သရဟင်သထုတ်လလဟင့်သည်။ "အခဌာသရလေသချယ်စရာ" တလင် သက်ဆိုင်ရာ အရံပစ္စည်သမျာသက ထိန်သချုပ်ထာသသည် (၉.၁.၄ ကိုကဌည့်ပါ)။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ပို့တ်ဘစ်တစ်ခုအာသ အလဟည့်ကျလုပ်ဆောင်မဟုပင်နံပါတ်အဖဌစ် ပဌင်ဆင်သတ်မဟတ်ပါက၊ ပင်နံပါတ်မဟတ်ပုံတင်ခဌင်သကို ပိတ်ထာသပဌီသ ပင်ကို အရံပင်သို့ ချိတ်ဆက်ထာသသည်။

ပင်နံပါတ်တစ်ခုစီ၏ အစာသထိုသလုပ်ဆောင်နိုင်စလမ်သကို တလင်ဖော်ပဌထာသသည်။ အဓိပ္ပာယ်သတ်မဟတ်ချက်မျာသ ဒေတာစာရလက်သည် ဒေါင်သလုဒ်လုပ်ထာသသော ပုံပေါ်တလင် ရဟိနေသည်။ ပင်နံပါတ်တလင် အစာသထိုသလုပ်ဆောင်ချက်မျာသစလာပါရဟိလျဟင် ဘာလုပ်ရမည်နည်သ။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
အရံကိရိယာမျာသစလာသည် တူညီသောပင်ကိုအသုံသပဌုပါက၊ အခဌာသလုပ်ဆောင်ချက်မျာသကဌာသတလင် ပဋိပက္ခမဖဌစ်စေရန်၊ တစ်ချိန်တည်သတလင် အရံကိရိယာတစ်ခုကိုသာ အသုံသပဌုသင့်သည်၊ အရံနာရီကို ဖလင့်သည့်ဘစ်ကို အသုံသပဌု၍ အဖလင့်အပိတ်လုပ်ပါ (သင့်လျော်သော RCC မဟတ်ပုံတင်မဟုတလင်)။

နောက်ဆုံသတလင်၊ အထလက်မုဒ်ရဟိ pins မျာသသည် clock speed ရဟိသည်။ ကသည်မဟာ စလမ်သအင်ချလေတာနိုင်သော အင်္ဂါရပ်ဖဌစ်သည်၊ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ ကျလန်ုပ်တို့သည် ၎င်သကို အမျာသဆုံသသတ်မဟတ်ထာသပဌီသ ၎င်သကို မေ့ပစ်လိုက်ရုံသာဖဌစ်သည်။

ထို့ကဌောင့် ကျလန်ုပ်တို့သည် SPI ကိုအသုံသပဌုနေသည်၊ ဆိုလိုသည်မဟာ ပင်နံပါတ်နဟစ်ချောင်သ (ဒေတာနဟင့် နာရီအချက်ပဌစနစ်ဖဌင့်) သည် “အစာသထိုသ တလန်သဆလဲခဌင်သလုပ်ဆောင်ချက်” ဖဌစ်သင့်ပဌီသ အခဌာသတစ်ခု (LAT) သည် “ပုံမဟန် တလန်သဆလဲခဌင်သ” ဖဌစ်သင့်သည်။ ဒါပေမယ့် သူတို့ကို တာဝန်မပေသခင် SPI ကို ကိုင်တလယ်ကဌည့်ရအောင်။

SPI

နောက်ထပ် ပညာပေသအစီအစဉ်လေသတစ်ခု

SPI သို့မဟုတ် Serial Peripheral Interface (serial peripheral interface) သည် MK ကို အခဌာသသော MKs မျာသနဟင့် ယေဘုယျအာသဖဌင့် ပဌင်ပကမ္ဘာနဟင့် ချိတ်ဆက်ရန်အတလက် ရိုသရဟင်သပဌီသ အလလန်ထိရောက်သော အင်တာဖေ့စ်တစ်ခုဖဌစ်သည်။ ၎င်သ၏လုပ်ဆောင်ချက်၏နိယာမကိုအထက်တလင်ဖော်ပဌခဲ့ပဌီသဖဌစ်သည်၊ တရုတ် LED ဒရိုက်ဘာ (ကိုသကာသချက်လက်စလဲတလင်၊ အပိုင်သ 25 ကိုကဌည့်ပါ) ။ SPI သည် မာစတာ (“မာစတာ”) နဟင့် ကျလန် (“ကျလန်”) မုဒ်တလင် လည်ပတ်နိုင်သည်။ SPI တလင် အခဌေခံချန်နယ် လေသခု ရဟိပဌီသ ၎င်သတို့အနက် အာသလုံသကို အသုံသမပဌုနိုင်ပါ။

  • MOSI၊ Master Output/Slave Input- ကပင်နံပါတ်သည် မာစတာမုဒ်တလင် ဒေတာကို ပို့လလဟတ်ပဌီသ slave မုဒ်တလင် ဒေတာကို လက်ခံပါသည်။
  • MISO၊ Master Input/Slave Output- ဆန့်ကျင်ဘက်တလင်၊ ၎င်သသည် မာစတာတလင် လက်ခံရရဟိပဌီသ ကျလန်အဖဌစ်သို့ ပေသပို့သည်။
  • SCK၊ အမဟတ်စဉ်နာရီ- မာစတာတလင် ဒေတာထုတ်လလဟင့်မဟုအကဌိမ်ရေကို သတ်မဟတ်သည် သို့မဟုတ် ကျလန်တလင် နာရီအချက်ပဌမဟုကို လက်ခံသည်။ အဓိကအာသဖဌင့် ရိုက်ချက်မျာသ၊
  • SS၊ Slave Select- ကချန်နယ်၏အကူအညီဖဌင့်၊ သူ့ထံမဟတစ်ခုခုလိုချင်နေကဌောင်သ ကျလန်ကသိသည်။ STM32 တလင် NSS ဟုခေါ်ပဌီသ N = အနဟုတ်၊ ဆိုလိုသည်မဟာ၊ ကချန်နယ်တလင် မဌေပဌင်ရဟိပါက controller သည် ကျလန်ဖဌစ်လာပါသည်။ ၎င်သသည် Open Drain Output မုဒ်နဟင့် ကောင်သမလန်စလာ ပေါင်သစပ်ထာသသော်လည်သ ၎င်သသည် အခဌာသဇာတ်လမ်သဖဌစ်သည်။

အခဌာသအရာအာသလုံသကဲ့သို့ပင်၊ STM32 ရဟိ SPI သည် နာသလည်ရခက်စေသည်။ ဥပမာအာသဖဌင့်၊ ၎င်သသည် SPI နဟင့်သာမက I2S အင်တာဖေ့စ်တစ်ခုနဟင့်လည်သ လုပ်ဆောင်နိုင်ပဌီသ စာရလက်စာတမ်သမျာသတလင် ၎င်သတို့၏ဖော်ပဌချက်မျာသ ရောထလေသနေပဌီသ၊ ပိုလျဟံနေသောပမာဏကို အချိန်မီဖဌတ်တောက်ရန် လိုအပ်ပါသည်။ ကျလန်ုပ်တို့၏တာဝန်မဟာ အလလန်ရိုသရဟင်သပါသည်- ကျလန်ုပ်တို့သည် MOSI နဟင့် SCK တို့ကိုသာ အသုံသပဌု၍ ဒေတာပေသပို့ရန် လိုအပ်ပါသည်။ အပိုင်သ 25.3.4 (half-duplex communication၊ half-duplex communication) ကိုသလာသပါ၊ နာရီ ၁ လုံသနဟင့် တစ်ဖက်သတ် ဒေတာဝါယာကဌိုသ ၁ ခု (နာရီအချက်ပဌမဟု 1 ခုနဟင့် တစ်ဖက်သတ်လမ်သကဌောင်သ ဒေတာစီသကဌောင်သ 1 ခု):

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ကမုဒ်တလင်၊ အပလီကေသရဟင်သသည် ပို့လလဟတ်ခဌင်သသာ သို့မဟုတ် လက်ခံခဌင်သသာမုဒ်တလင် SPI ကို အသုံသပဌုသည်။ / Transmit-only mode သည် duplex mode နဟင့် ဆင်တူသည်- transmit pin (MOSI in master mode or MISO in slave mode) တလင် data ကို transmit လုပ်ထာသပဌီသ လက်ခံ pin (MISO သို့မဟုတ် MOSI အသီသသီသ) ကို ပုံမဟန် I/O pin အဖဌစ် အသုံသပဌုနိုင်ပါသည်။ . ကကိစ္စတလင်၊ အပလီကေသရဟင်သသည် Rx ကဌာသခံကိုလျစ်လျူရဟုရန်သာလိုအပ်သည် (၎င်သကိုဖတ်ပါက၊ ထိုနေရာတလင်လလဟဲပဌောင်သဒေတာရဟိမည်မဟုတ်)။

ကောင်သပဌီ၊ MISO ပင်နံပါတ်သည် အခမဲ့ဖဌစ်သည်၊ ၎င်သနဟင့် LAT အချက်ပဌမဟုကို ချိတ်ဆက်ကဌပါစို့။ STM32 တလင် အလလန်အဆင်ပဌေသည့် ပရိုဂရမ်ဖဌင့် ထိန်သချုပ်နိုင်သည့် Slave Select ကို ကဌည့်ကဌပါစို့။ ပုဒ်မ 25.3.1 SPI အထလေထလေဖော်ပဌချက်တလင် အမည်တူစာပိုဒ်ကို ကျလန်ုပ်တို့ ဖတ်ပဌသည်-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ဆော့ဖ်ဝဲလ်ထိန်သချုပ်မဟု NSS (SSM = 1) / Slave ရလေသချယ်မဟုအချက်အလက်သည် SPI_CR1 မဟတ်ပုံတင်ခဌင်သ၏ SSI ဘစ်တလင်ပါရဟိသည်။ အခဌာသအပလီကေသရဟင်သလိုအပ်ချက်မျာသအတလက် ပဌင်ပ NSS ပင်နံပါတ်သည် အခမဲ့ဖဌစ်သည်။

စာရင်သပဌုစုဖို့ အချိန်ရောက်ပါပဌီ။ SPI2 ကိုသုံသရန် ဆုံသဖဌတ်ခဲ့ပဌီသ၊ အပိုင်သ 3.3 Memory Map တလင် ၎င်သ၏ အခဌေခံလိပ်စာကို ရဟာကဌည့်ပါ-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

ကဲ၊ စလိုက်ရအောင်။

#define _SPI2_(mem_offset) (*(volatile uint32_t *)(0x40003800 + (mem_offset)))

အပိုင်သ 25.3.3 ကို “မာစတာမုဒ်တလင် SPI သတ်မဟတ်ခဌင်သ” ကို ကိုယ်တိုင်ရဟင်သလင်သချက် ခေါင်သစဉ်ဖဌင့် ဖလင့်ပါ-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

1. SPI_CR2 မဟတ်ပုံတင်မဟုတလင် bits BR[0:1] ဖဌင့် အမဟတ်စဉ်နာရီကဌိမ်နဟုန်သကို သတ်မဟတ်ပါ။

မဟတ်ပုံတင်မျာသကို အမည်တူ ကိုသကာသချက်လက်စလဲ ကဏ္ဍတလင် စုဆောင်သထာသသည်။ လိပ်စာပဌောင်သ (လိပ်စာနဟိမ်) CR1 – 0x00 အတလက်၊ ပုံမဟန်အာသဖဌင့် ဘစ်အာသလုံသကို ရဟင်သပစ်သည် (တန်ဖိုသကို ပဌန်လည်သတ်မဟတ်ပါ။ 0x0000):

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

BR bits မျာသသည် controller နာရီပိုင်သခဌာသခဌင်သကို သတ်မဟတ်ပေသကာ SPI လည်ပတ်မည့် ကဌိမ်နဟုန်သကို ဆုံသဖဌတ်ပေသသည်။ ကျလန်ုပ်တို့၏ STM32 ကဌိမ်နဟုန်သသည် 72 MHz ဖဌစ်လိမ့်မည်၊ ၎င်သ၏ဒေတာစာရလက်အရ LED ဒရိုင်ဘာသည် ကဌိမ်နဟုန်သ 25 MHz အထိ လုပ်ဆောင်သောကဌောင့် ကျလန်ုပ်တို့ (BR[2:0] = 001) ဖဌင့် လေသခုခလဲရန် လိုအပ်ပါသည်။

#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 ရဟိ CPOL နဟင့် CPHA bits မျာသ၏ စာသာသဖော်ပဌချက်ကို အနီသကပ်ကဌည့်ကဌပါစို့ (SPI အထလေထလေဖော်ပဌချက်)။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
နာရီအဆင့်နဟင့် polarity
SPI_CR1 မဟတ်ပုံတင်ခဌင်သ၏ CPOL နဟင့် CPHA ဘစ်မျာသကို အသုံသပဌုခဌင်သဖဌင့်၊ သင်သည် အချိန်ကိုက်ဆက်ဆံရေသလေသခုကို ပရိုဂရမ်ဖဌင့် ရလေသချယ်နိုင်သည်။ CPOL (clock polarity) bit သည် ဒေတာမပို့သည့်အခါ နာရီအချက်ပဌမဟုအခဌေအနေကို ထိန်သချုပ်သည်။ ကဘစ်သည် မာစတာနဟင့် ကျလန်မုဒ်မျာသကို ထိန်သချုပ်သည်။ CPOL ကို ပဌန်လည်သတ်မဟတ်ပါက၊ SCK ပင်နံပါတ်သည် အနာသယူမုဒ်တလင် နည်သနေပါသည်။ CPOL ဘစ်ကို သတ်မဟတ်ပါက၊ အနာသယူမုဒ်တလင် SCK pin မဌင့်နေပါသည်။
CPHA (နာရီအဆင့်) ဘစ်ကို သတ်မဟတ်သောအခါ၊ မဌင့်မာသသောဘစ်ထောင်ချောက် strobe သည် SCK အချက်ပဌမဟု၏ ဒုတိယအစလန်သ (CPOL ကဌည်လင်ပါက ကျဆင်သခဌင်သ၊ CPOL သတ်မဟတ်ပါက မဌင့်တက်လာသည်)။ နာရီအချက်ပဌမဟုတလင် ဒုတိယပဌောင်သလဲမဟုဖဌင့် ဒေတာကို ဖမ်သယူသည်။ CPHA ဘစ်သည် ရဟင်သလင်သပါက၊ မဌင့်မာသသောဘစ်ထောင်ချောက် strobe သည် SCK အချက်ပဌမဟု၏ မဌင့်တက်လာသောအစလန်သ (CPOL သတ်မဟတ်ပါက ပဌုတ်ကျသောအစလန်သ၊ CPOL ရဟင်သပါက အနာသတက်လာသည်)။ နာရီအချက်ပဌမဟုတလင် ပထမဆုံသပဌောင်သလဲမဟုတလင် ဒေတာကို ဖမ်သယူသည်။

ကအသိပညာကို စုပ်ယူပဌီသနောက်၊ နဟစ်ခုလုံသသည် သုညဖဌစ်နေရမည်ဟု ကျလန်ုပ်တို့ နိဂုံသချုပ်ရလေသည်။ SCK အချက်ပဌမဟုကို အသုံသမပဌုသည့်အခါတလင် နိမ့်နေစေရန်နဟင့် ခုန်နဟုန်သ၏ မဌင့်တက်လာသောအစလန်သတလင် ဒေတာကို ပို့လလဟတ်စေလိုသည် (ပုံတလင်ကဌည့်ပါ။ အနာသသတ် DM634 ဒေတာစာရလက်)။

စကာသမစပ်၊ ကနေရာတလင် ST ဒေတာစာရလက်မျာသတလင် ဝေါဟာရ၏အင်္ဂါရပ်တစ်ခုကို ကျလန်ုပ်တို့ ပထမဆုံသတလေ့ခဲ့ရသည်- ၎င်သတို့တလင် "ဘစ်မဟ သုညသို့ ပဌန်လည်သတ်မဟတ်မည်" ဟူသော စာစုကို ရေသသာသထာသသည်။ အနည်သငယ်ပဌန်လည်သတ်မဟတ်ရန်ထိုမျဟမက နည်သနည်သရဟင်သဖို့ဥပမာ၊ Atmega လိုမျိုသပေါ့။

3. ဒေတာပိတ်ဆို့ခဌင်သသည် 8-ဘစ် သို့မဟုတ် 16-ဘစ်ဖော်မတ်ရဟိမရဟိ ဆုံသဖဌတ်ရန် DFF ဘစ်ကို သတ်မဟတ်ပါ။

DM16 ကဲ့သို့ 634-bit PWM ဒေတာကို ပေသပို့ရာတလင် အနဟောက်အယဟက်မဖဌစ်စေရန် အထူသအာသဖဌင့် 12-bit DM633 ကို ယူခဲ့ပါသည်။ DFF ကို တစ်ခုအဖဌစ် သတ်မဟတ်ခဌင်သသည် အဓိပ္ပာယ်ရဟိပါသည်-

#define DFF         0x0800

_SPI2_ (_SPI_CR1) |= DFF; // 16-bit mode

4. ပိတ်ဆို့ဖော်မတ်ကို ဆုံသဖဌတ်ရန် SPI_CR1 မဟတ်ပုံတင်မဟုတလင် LSBFIRST ဘစ်ကို စီစဉ်သတ်မဟတ်ပါ။

LSBFIRST သည် ၎င်သ၏အမည်တလင် အကဌံပဌုထာသသည့်အတိုင်သ ဂီယာကို သိသာထင်ရဟာသသောနည်သနည်သဖဌင့် ညသစလာစီစဉ်ပေသသည်။ သို့သော် DM634 သည် အထူသခဌာသဆုံသသော bit မဟစတင်၍ ဒေတာလက်ခံရယူလိုပါသည်။ ထို့ကဌောင့် ကျလန်ုပ်တို့သည် ၎င်သကို ပဌန်လည်သတ်မဟတ်ထာသခဲ့သည်။

5. ဟာ့ဒ်ဝဲမုဒ်တလင်၊ NSS ပင်နံပါတ်မဟ ထည့်သလင်သရန် လိုအပ်ပါက၊ ဘိုက်လလဟဲပဌောင်သမဟု အစီအစဉ်တစ်ခုလုံသအတလင်သ NSS ပင်ကို မဌင့်မာသသောအချက်ပဌမဟုကို အသုံသချပါ။ NSS ဆော့ဖ်ဝဲမုဒ်တလင်၊ SSM နဟင့် SSI ဘစ်မျာသကို SPI_CR1 မဟတ်ပုံတင်ခဌင်သတလင် သတ်မဟတ်ပါ။ NSS ပင်ကို အထလက်တစ်ခုအဖဌစ် အသုံသပဌုပါက၊ SSOE ဘစ်ကိုသာ သတ်မဟတ်ရန် လိုအပ်သည်။

NSS ဟာ့ဒ်ဝဲမုဒ်ကိုမေ့ထာသရန် SSM နဟင့် SSI ကို ထည့်သလင်သပါ-

#define SSI         0x0100
#define SSM         0x0200

_SPI2_ (_SPI_CR1) |= SSM | SSI; //enable software control of SS, SS high

6. MSTR နဟင့် SPE ဘစ်မျာသကို သတ်မဟတ်ရပါမည်။

အမဟန်တော့၊ ကအကလက်မျာသဖဌင့် ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ SPI ကို မာစတာအဖဌစ် သတ်မဟတ်ပဌီသ ၎င်သကိုဖလင့်သည်-

#define MSTR        0x0004
#define SPE         0x0040

_SPI2_ (_SPI_CR1) |= MSTR; //SPI master
//кПгЎа все гПтПвП, включаеЌ SPI
_SPI2_ (_SPI_CR1) |= SPE;

SPI ကို စီစဉ်သတ်မဟတ်ထာသပဌီသ၊ ဒရိုက်ဘာထံသို့ bytes ပေသပို့သည့် လုပ်ဆောင်ချက်မျာသကို ချက်ချင်သရေသလိုက်ကဌပါစို့။ 25.3.3 “မာစတာမုဒ်တလင် SPI သတ်မဟတ်ခဌင်သ” ကို ဆက်လက်ဖတ်ရဟုပါ-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ဒေတာလလဟဲပဌောင်သမဟု
Tx buffer သို့ byte ရေသသောအခါ ဂီယာစတင်သည်။
data byte ကို shift register မဟာ တင်ပါတယ်။ အပဌိုင် ပထမဘစ်၏ဂီယာအတလင်သမုဒ် (ပဌည်တလင်သဘတ်စ်ကာသမဟ)၊ ထို့နောက်သို့ကူသစက်သည်။ ဆင့်ကဲ CPI_CR1 မဟတ်ပုံတင်ခဌင်သရဟိ LSBFIRST ဘစ်၏ဆက်တင်ပေါ်မူတည်၍ MOSI ပင်မုဒ်၊ ဒေတာပေသပို့ပဌီသနောက် TXE အလံကို သတ်မဟတ်သည်။ Tx buffer မဟ shift register သို့နဟင့် CPI_CR1 မဟတ်ပုံတင်ခဌင်သရဟိ TXEIE ဘစ်ကို သတ်မဟတ်ပါက ကဌာသဖဌတ်တစ်ခုထုတ်ပေသသည်။

STM ထိန်သချုပ်ကိရိယာမျာသရဟိ SPI အကောင်အထည်ဖော်မဟု၏ အင်္ဂါရပ်တစ်ခုအာသ အာရုံစိုက်စေရန် ဘာသာပဌန်ချက်တလင် စကာသလုံသအချို့ကို ကျလန်ုပ်ဖော်ပဌခဲ့သည်။ Atmega တလင် TXE အလံ (Tx ဗလာ, tx သည် ဗလာဖဌစ်ပဌီသ ဒေတာလက်ခံရန် အဆင်သင့်ဖဌစ်သည်) byte တစ်ခုလုံသကို ပေသပို့ပဌီသမဟသာ သတ်မဟတ်သည်။ အပဌင်ထလက်. အတလင်သပိုင်သ shift register တလင် byte ထည့်သလင်သပဌီသနောက် ကအလံကို သတ်မဟတ်သည်။ ၎င်သကို တစ်ချိန်တည်သတလင် ဘစ်မျာသအာသလုံသနဟင့် (အပဌိုင်) တလန်သပို့ပဌီသနောက် ဒေတာမျာသကို ဆင့်ကဲပဌောင်သသလာသသောကဌောင့်၊ TXE သည် byte ကို လုံသဝမပို့မီတလင် သတ်မဟတ်ထာသသည်။ ဒါက အရေသကဌီသလို့ပဲ။ ကျလန်ုပ်တို့၏ LED ဒရိုက်ဘာအတလက်၊ ပေသပို့ပဌီသနောက် LAT pin ကိုဆလဲရန်လိုအပ်သည်။ всех ဒေတာ၊ i.e. TXE အလံတစ်ခုတည်သသည် ကျလန်ုပ်တို့အတလက် မလုံလောက်ပါ။

ဆိုလိုသည်မဟာ ကျလန်ုပ်တို့သည် အခဌာသအလံတစ်ခု လိုအပ်ပါသည်။ 25.3.7 - "အခဌေအနေအလံမျာသ" ကိုကဌည့်ကဌပါစို့။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
<
>
ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
အလုပ်မျာသသောအလံ
BSY အလံကို ဟာ့ဒ်ဝဲဖဌင့် ရဟင်သပစ်သည် (၎င်သကို ရေသသာသခဌင်သမဟာ အကျိုသသက်ရောက်မဟု မရဟိပါ)။ BSY အလံသည် SPI ဆက်သလယ်ရေသအလလဟာ၏ အခဌေအနေကို ညလဟန်ပဌသည်။
၎င်သသည် ပဌန်လည်သတ်မဟတ်သည်-
လလဟဲပဌောင်သမဟုပဌီသသလာသသောအခါ (လလဟဲပဌောင်သမဟုသည် ဆက်တိုက်ဖဌစ်နေပါက မာစတာမုဒ်တလင်မဟလလဲ၍)
SPI ပိတ်ထာသသည့်အခါ
မာစတာမုဒ် အမဟာသအယလင်သတစ်ခု ဖဌစ်ပေါ်သောအခါ (MODF=1)
လလဟဲပဌောင်သမဟုသည် ဆက်တိုက်မဟုတ်ပါက၊ ဒေတာလလဟဲပဌောင်သမဟုတစ်ခုစီကဌာသတလင် BSY အလံကို ရဟင်သလင်သထာသသည်။

ကောင်သပဌီ၊ ဒါက အဆင်ပဌေလာလိမ့်မယ်။ Tx buffer သည် မည်သည့်နေရာတလင် ရဟိနေသည်ကို ရဟာဖလေကဌည့်ကဌပါစို့။ ဒါကိုလုပ်ဖို့ "SPI Data Register" ကိုဖတ်ပါ။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
Bits 15:0 DR[15:0] ဒေတာ မဟတ်ပုံတင်ခဌင်သ။
ဒေတာလက်ခံရရဟိခဌင်သ သို့မဟုတ် ပေသပို့ရမည့်ဒေတာ။
ဒေတာမဟတ်ပုံတင်ခဌင်သကို ကဌာသခံနဟစ်ခုအဖဌစ် ပိုင်သခဌာသထာသသည် - တစ်ခုမဟာ စာရေသရန် (ပို့လလဟတ်သည့်ကဌာသခံ) နဟင့် တစ်ခု (စာဖတ်ခဌင်သအတလက် ကဌာသခံတစ်ခု) ဟူ၍ ခလဲခဌာသထာသသည်။ ဒေတာစာရင်သသလင်သရန်အတလက် စာရေသခဌင်သသည် Tx buffer သို့ စာရေသပဌီသ data register မဟဖတ်ခဌင်သသည် Rx buffer တလင်ပါရဟိသောတန်ဖိုသကို ပဌန်ပေသမည်ဖဌစ်သည်။

ကောင်သပဌီ၊ TXE နဟင့် BSY အလံမျာသတလေ့ရဟိသည့်နေရာတလင် status register သည်-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

ကျလန်ုပ်တို့ရေသသည်-

#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 driver outputs အရေအတလက်အရ၊ ကျလန်ုပ်တို့သည် 16 အဆနဟစ်ဘိုက်ကိုထုတ်လလဟင့်ရန်လိုအပ်သောကဌောင့်၊

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 တလင်၊ pins မျာသ၏အခဌေအနေအတလက်တာဝန်ရဟိသောမဟတ်ပုံတင်မျာသသည်အတော်လေသထူသခဌာသသည်။ ၎င်သတို့တလင် Atmega ထက် ပိုမျာသကဌောင်သ ထင်ရဟာသသော်လည်သ ၎င်သတို့သည် အခဌာသသော STM ချစ်ပ်မျာသနဟင့် ကလဲပဌာသသည်။ အပိုင်သ ၉.၁ GPIO ၏ အထလေထလေဖော်ပဌချက်-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ယေဘူယျရည်ရလယ်ချက် I/O ports တစ်ခုစီ (GPIO) 32-bit configuration registers နဟစ်ခု (GPIOx_CRL နဟင့် GPIOx_CRH), 32-bit data registers နဟစ်ခု (GPIOx_IDR နဟင့် GPIOx_ODR), 32-bit set/reset register (GPIOx_BSRR), 16-bit reset register (GPIOx_BRR) နဟင့် 32- ဘစ်ပိတ်ဆို့ခဌင်သ မဟတ်ပုံတင်ခဌင်သ (GPIOx_LCKR)။

ပထမ မဟတ်ပုံတင်မဟုနဟစ်ခုသည် ပုံမဟန်မဟုတ်၍ အဆင်မပဌေသောကဌောင့်၊ 16 port pins မျာသကို "four bits per brother" ဖော်မတ်ဖဌင့် ၎င်သတို့အာသ အနဟံ့ပဌန့်ကျဲနေသောကဌောင့်ဖဌစ်သည်။ အဲဒါတလေ။ ပင်နံပါတ် သုညမဟ ခုနစ်ခုသည် CRL တလင်ဖဌစ်ပဌီသ ကျန်သည် CRH တလင်ဖဌစ်သည်။ တစ်ချိန်တည်သမဟာပင် ကျန်ရဟိသော မဟတ်ပုံတင်မျာသတလင် ဆိပ်ကမ်သ၏ ပင်နံပါတ်မျာသပါ၀င်သည် - မကဌာခဏ ကျန်တစ်ဝက်ကို "ကဌိုတင်ထာသ" သည်။

ရိုသရိုသရဟင်သရဟင်သပဌောရရင် စာရင်သရဲ့အဆုံသကနေ စလိုက်ရအောင်။

ကျလန်ုပ်တို့သည် ပိတ်ဆို့ခဌင်သ မဟတ်ပုံတင်ရန် မလိုအပ်ပါ။

မဟတ်ပုံတင်ခဌင်သနဟင့် ပဌန်လည်သတ်မဟတ်ခဌင်သမျာသသည် တစ်စိတ်တစ်ပိုင်သတစ်ပိုင်သစီပလာသခဌင်သကဌောင့် ရယ်စရာကောင်သသည်- သင်သည် BSRR တလင်သာ အရာအာသလုံသကိုရေသနိုင်ပဌီသ၊ ပိုမျာသသော 16 bits သည် ပင်နံပါတ်အာသ သုညသို့ပဌန်လည်သတ်မဟတ်မည်ဖဌစ်ပဌီသ အောက်ပိုင်သကို 1 ဟုသတ်မဟတ်မည် သို့မဟုတ် သင်လည်သလုပ်နိုင်သည် ပင်နံပါတ်ကို ပဌန်လည်သတ်မဟတ်သည့် အောက်ခဌေ 16 ဘစ် BRR ကို အသုံသပဌုပါ။ ဒုတိယရလေသချယ်မဟုကို ကဌိုက်တယ်။ ပင်မျာသကို အက်တမ်ဝင်ရောက်ခလင့် ပေသသောကဌောင့် ကစာရင်သမျာသသည် အရေသကဌီသပါသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
Atomic Set သို့မဟုတ် Reset
GPIOx_ODR ကို ဘစ်အဆင့်တလင် ပရိုဂရမ်ရေသဆလဲသည့်အခါ ကဌာသဖဌတ်မဟုမျာသကို ပိတ်ရန် မလိုအပ်ပါ- တစ်ခု သို့မဟုတ် တစ်ခုထက်ပိုသော ဘစ်မျာသကို အနုမဌူရေသလုပ်ဆောင်မဟု APB2 တစ်ခုတည်သဖဌင့် ပဌောင်သလဲနိုင်သည်။ ၎င်သကို ပဌောင်သလဲရန်လိုအပ်သည့် ဘစ်၏ set/reset register (GPIOx_BSRR သို့မဟုတ် reset only for, GPIOx_BRR) သို့ "1" ကိုရေသခဌင်သဖဌင့် အောင်မဌင်သည်။ အခဌာသ bit မျာသသည် မပဌောင်သလဲဘဲ ရဟိနေမည်ဖဌစ်သည်။

ဒေတာစာရင်သမျာသတလင် အဓိပ္ပါယ်ဖော်နိုင်သော အမည်မျာသ - IDR = ရဟိသည်။ input လမ်သညလဟန် မဟတ်ပုံတင်ခဌင်သ၊ ထည့်သလင်သခဌင်သ မဟတ်ပုံတင်ခဌင်သ ODR = output Direction Register၊ output register။ လက်ရဟိပရောဂျက်တလင် ၎င်သတို့ကို မလိုအပ်ပါ။

နောက်ဆုံသအနေနဲ့၊ ထိန်သချုပ်မဟုစာရင်သမျာသ။ PB13၊ PB14 နဟင့် PB15 ကဲ့သို့သော ဒုတိယ SPI ပင်မျာသကို ကျလန်ုပ်တို့ စိတ်ဝင်စာသသောကဌောင့်၊ ကျလန်ုပ်တို့သည် CRH ကို ချက်ခဌင်သကဌည့်ပါသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

20 မဟ 31 အထိ bits ဖဌင့် တစ်စုံတစ်ခုကို ရေသရမည်ဟု ကျလန်ုပ်တို့မဌင်သည်။

pins မျာသမဟ လိုချင်သည့်အရာအပေါ်တလင် ကျလန်ုပ်တို့ ရဟာဖလေတလေ့ရဟိထာသပဌီသဖဌစ်သည်၊ ထို့ကဌောင့် ကနေရာတလင် စခရင်ပုံမပါပဲ လုပ်မည်၊ MODE သည် ညသတည်ချက် (input နဟစ်ခုလုံသကို 0 ဟု သတ်မဟတ်ပါက 50) နဟင့် pin speed (ကျလန်ုပ်တို့ 1MHz လိုအပ်သည်၊ ဆိုလိုသည်မဟာ၊ pin နဟစ်ခုလုံသကို “00”) နဟင့် CNF သည် မုဒ်ကို သတ်မဟတ်သည်- ပုံမဟန် “push-pull” – 10, “alternative” – 0. ပုံမဟန်အာသဖဌင့်၊ အထက်တလင်မဌင်ရသည့်အတိုင်သ၊ pins အာသလုံသသည် အောက်ခဌေမဟ တတိယဘစ် (CNFXNUMX) ရဟိသည်။ ၎င်သသည် ၎င်သတို့အာသ မုဒ်သို့ သတ်မဟတ်ပေသသည်။ floating input.

ကချစ်ပ်ဖဌင့် အခဌာသတစ်ခုခုလုပ်ရန် ကျလန်ုပ်စီစဉ်ထာသသောကဌောင့် ရိုသရိုသရဟင်သရဟင်သအာသဖဌင့် ဖဌစ်နိုင်ချေရဟိသော 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_အနိစ္စအာသဖဌင့် နိမ့်သည်၊ ၎င်သသည် အမဌဲတမ်သ ကအတိုင်သဖဌစ်နေပါစေ၊ ဆက်ထာသလိုက်ပါ)

အခုက အရာအာသလုံသက ကောင်သပေမယ့် အလုပ်မဖဌစ်ဘူသ။ ၎င်သသည် STM32 ဖဌစ်သောကဌောင့် ၎င်သတို့သည် လျဟပ်စစ်ဓာတ်အာသကို သက်သာစေသည်၊ ဆိုလိုသည်မဟာ သင်လိုအပ်သော အရံပစ္စည်သမျာသကို clocking လုပ်ရန် လိုအပ်သည်။

နာရီကိုဖလင့်ပါ။

နာရီဟုလည်သ လူသိမျာသသော လက်ပတ်နာရီသည် နာရီချိန်ခဌင်သအတလက် တာဝန်ရဟိသည်။ ပဌီသတော့ အတိုကောက် RCC ကို သတိထာသမိပဌီသသာသပါ။ စာရလက်စာတမ်သတလင် ၎င်သကို ကျလန်ုပ်တို့ ရဟာဖလေသည်- ၎င်သသည် ပဌန်လည်သတ်မဟတ်ခဌင်သနဟင့် နာရီထိန်သချုပ်မဟုဖဌစ်သည်။

အထက်တလင်ပဌောခဲ့သည့်အတိုင်သ ကံကောင်သထောက်မစလာ၊ နာရီလက်တံခေါင်သစဉ်၏ အခက်ခဲဆုံသအပိုင်သကို STM မဟလူမျာသက ကျလန်ုပ်တို့အတလက် လုပ်ဆောင်ပေသခဲ့သောကဌောင့် ကျလန်ုပ်တို့သည် ၎င်သတို့အာသ အလလန်ကျေသဇူသတင်ပါသည် (တစ်ဖန် ကျလန်ုပ်ထံသို့ လင့်ခ်တစ်ခုပေသပါမည်။ Di Halt ၏ ဝဘ်ဆိုဒ်မည်မျဟ ရဟုပ်ထလေသသည်ကို ရဟင်သရဟင်သလင်သလင်သ သိစေရန်။) အရံနာရီမျာသကို ဖလင့်ရန် တာဝန်ရဟိသော မဟတ်ပုံတင်မျာသသာ လိုအပ်သည် (Peripheral Clock Enable Registers)။ ညသစလာ RCC ၏ အခဌေခံလိပ်စာကို ရဟာကဌည့်ရအောင်၊ ၎င်သသည် "Memory Map" ၏အစတလင်ဖဌစ်သည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

#define _RCC_(mem_offset) (*(volatile uint32_t *)(0x40021000 + (mem_offset)))

ပဌီသလျဟင် ပန်သကန်ပဌာသထဲရဟိ တစ်ခုခုကို ရဟာရန် ကဌိုသစာသသည့် လင့်ခ်ကို နဟိပ်ပါ သို့မဟုတ် ပိုကောင်သသည်မဟာ ကဏ္ဍမျာသမဟ ဖလင့်နိုင်သော မဟတ်ပုံတင်ခဌင်သ၏ ဖော်ပဌချက်မျာသကို ဖဌတ်သန်သသလာသပါ။ စာရင်သသလင်သမဟုမျာသကိုဖလင့်ပါ။. RCC_APB1ENR နဟင့် RCC_APB2ENR ကို မည်သည့်နေရာတလင် တလေ့ရမည်နည်သ။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

ထို့အပဌင် ၎င်သတို့တလင် SPI2၊ IOPB (I/O Port B) နဟင့် အခဌာသလုပ်ဆောင်ချက်မျာသ (AFIO) ၏ နာရီချိန်ကိုက်ခဌင်သ ပါဝင်သော bit မျာသပါရဟိသည်။

#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 ဗို့မဟ ပါဝါအာသ ချိတ်ဆက်ရန် မမေ့ပါနဟင့်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

STM8 PWM

STM8 တလင် PWM

ကျလန်တော် ဒီဆောင်သပါသကို စီစဉ်နေချိန်မဟာ၊ ဥပမာအနေနဲ့၊ ကျလန်တော်ဟာ ဘလတ်ဖိနပ်မပါဘဲ ဖိနပ်ထုတ်လုပ်သူနဲ့ မဆုံသနိုင်အောင် ဒေတာစာရလက်ကိုသုံသပဌီသ မရင်သနဟီသတဲ့ ချစ်ပ်တစ်ခုရဲ့ လုပ်ဆောင်ချက်အချို့ကို ကျလမ်သကျင်အောင်ကဌိုသစာသဖို့ ဆုံသဖဌတ်ခဲ့ပါတယ်။ STM8 သည် ကအခန်သကဏ္ဍအတလက် စံပဌဖဌစ်သည်- ပထမ၊ ကျလန်ုပ်တလင် STM8S103 ပါသော တရုတ်ဘုတ်အချို့ရဟိပဌီသ၊ ဒုတိယအချက်မဟာ ၎င်သသည် အလလန်ရေပန်သစာသခဌင်သမရဟိသောကဌောင့် အင်တာနက်ပေါ်တလင် ရဟာဖလေဖတ်ရဟုရန် သလေသဆောင်မဟုသည် ကဖဌေရဟင်သနည်သမျာသမရဟိခဌင်သအပေါ်တလင် တည်နေပါသည်။

ချစ်ပ်တလေလည်သရဟိတယ်။ အချက်အလက်စာရလက် О ရည်ညလဟန်သလက်စလဲ RM0016ပထမတလင် pinout နဟင့် register လိပ်စာမျာသပါရဟိပဌီသ၊ ဒုတိယတလင် အခဌာသအရာအာသလုံသရဟိသည်။ STM8 ကို ကဌောက်မက်ဖလယ်ကောင်သသော IDE တလင် C ဖဌင့် ပရိုဂရမ်ပဌုလုပ်ထာသသည်။ ST Visual Develop.

နာရီနဟင့် I/O

ပုံမဟန်အာသဖဌင့်၊ STM8 သည် 2 MHz ကဌိမ်နဟုန်သဖဌင့် လုပ်ဆောင်သည်၊ ၎င်သကို ချက်ချင်သပဌင်ရပါမည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
HSI (High Speed ​​Internal) နာရီ
HSI နာရီအချက်ပဌမဟုသည် ပရိုဂရမ်ထုတ်နိုင်သော ပိုင်သခဌာသမဟု (16 မဟ 1) ပါရဟိသော အတလင်သပိုင်သ 8 MHz RC oscillator မဟ ဆင်သသက်လာသည်။ ၎င်သကို နာရီပိုင်သခဌာသခဌင်သ မဟတ်ပုံတင်ခဌင်သ (CLK_CKDIVR) တလင် သတ်မဟတ်ထာသသည်။
မဟတ်ချက်- အစတလင်၊ 8 ပိုင်သခဌာသထာသသော HSI RC oscillator ကို နာရီအချက်ပဌမဟု၏ ညသဆောင်ရင်သမဌစ်အဖဌစ် ရလေသချယ်ထာသသည်။

ဒေတာစာရလက်တလင် မဟတ်ပုံတင်လိပ်စာ၊ refman တလင် ဖော်ပဌချက်ကို ကျလန်ုပ်တို့ တလေ့ရဟိပဌီသ မဟတ်ပုံတင်ခဌင်သကို ရဟင်သလင်သရန် လိုအပ်ကဌောင်သ တလေ့ရဟိရပါသည်။

#define CLK_CKDIVR *(volatile uint8_t *)0x0050C6

CLK_CKDIVR &= ~(0x18);

ကျလန်ုပ်တို့သည် PWM ကိုလည်ပတ်ပဌီသ LEDs မျာသကိုချိတ်ဆက်မည်ဖဌစ်သောကဌောင့် pinout ကိုကဌည့်ကဌပါစို့။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

ချစ်ပ်သည် သေသငယ်သည်၊ တူညီသော pins မျာသပေါ်တလင် လုပ်ဆောင်ချက်မျာသစလာကို ဆိုင်သငံ့ထာသသည်။ စတုရန်သကလင်သစကလက်မျာသတလင် ပါရဟိသည့်အရာမဟာ "အစာသထိုသလုပ်ဆောင်နိုင်မဟု" ဖဌစ်ပဌီသ ၎င်သကို "ရလေသချယ်မဟု ဘိုက်မျာသ" ဖဌင့် ပဌောင်သထာသသည် (ရလေသချယ်ခလင့် ဘိုက်) - Atmega fuses မျာသကဲ့သို့ တစ်ခုခု။ သင်သည် ၎င်သတို့၏တန်ဖိုသမျာသကို ပရိုဂရမ်ကျကျ ပဌောင်သလဲနိုင်သော်လည်သ အဘယ်ကဌောင့်ဆိုသော် မလိုအပ်ပါ။ ပဌန်လည်စတင်ပဌီသမဟသာ လုပ်ဆောင်ချက်အသစ်ကို စတင်အသုံသပဌုနိုင်ပါသည်။ ကဘိုက်မျာသကိုပဌောင်သလဲနိုင်သည့် ST Visual Programmer (Visual Develop ဖဌင့်ဒေါင်သလုဒ်လုပ်ထာသသည်) ကိုအသုံသပဌုရန် ပိုမိုလလယ်ကူသည်။ pinout သည် ပထမ timer ၏ CH1 နဟင့် CH2 pin မျာသကို စတုရန်သကလင်သစကလက်မျာသတလင် ဝဟက်ထာသကဌောင်သ ပဌသသည်။ STVP တလင် AFR1 နဟင့် AFR0 bits မျာသကို သတ်မဟတ်ရန် လိုအပ်ပဌီသ ဒုတိယတစ်ခုသည် ဒုတိယ timer ၏ CH1 output ကို PD4 မဟ PC5 သို့ လလဟဲပဌောင်သပေသမည်ဖဌစ်သည်။

ထို့ကဌောင့်၊ ပင်နံပါတ် 6 ချောင်သသည် ပထမအချိန်တိုင်သကိရိယာအတလက် PC6၊ PC7 နဟင့် PC3၊ ဒုတိယအတလက် PC5၊ PD3 နဟင့် PA3 တို့ကို ထိန်သချုပ်မည်ဖဌစ်သည်။

STM8 တလင် I/O ပင်နံပါတ်မျာသကို ကိုယ်တိုင်တပ်ဆင်ခဌင်သသည် STM32 ထက် ပိုမိုရိုသရဟင်သပဌီသ ယုတ္တိနည်သပါသည်။

  • Atmega DDR data direction register မဟ ရင်သနဟီသသည် (ဒေတာလမ်သညလဟန် မဟတ်ပုံတင်ခဌင်သ။): 1 = အထလက်;
  • ပထမထိန်သချုပ်မဟုမဟတ်ပုံတင်ခဌင်သ CR1 သည် output တလင်၊ push-pull mode (1) သို့မဟုတ် open drain (0); ငါ LEDs မျာသကို cathodes ဖဌင့်ချစ်ပ်မျာသနဟင့်ချိတ်ဆက်သောကဌောင့်၊ ငါသုညကိုကနေရာတလင်ထာသခဲ့ပါ။
  • ဒုတိယထိန်သချုပ်မဟုစာရင်သသလင်သ CR2 သည် output တလင်နာရီအမဌန်နဟုန်သကိုသတ်မဟတ်သည်- 1 = 10 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 ကဌိမ်နဟုန်သ - timer မဟ အမဟတ်ခဌစ်သည့် အကဌိမ်ရေ၊
  • အလိုအလျောက် ပဌန်လည်စတင်ခဌင်သ၊ AR - timer မဟရေတလက်မည့်အထိ အလိုအလျောက်တင်နိုင်သောတန်ဖိုသ (pulse period);
  • ဖဌစ်ရပ်၊ UEV အပ်ဒိတ် - timer သည် AR သို့ရေတလက်သောအခါတလင်ဖဌစ်ပေါ်သည့်ဖဌစ်ရပ်တစ်ခု။
  • PWM Duty Cycle - PWM ဂျူတီစက်ဝန်သ၊ မကဌာခဏ "duty factor" ဟုခေါ်သည်၊
  • တန်ဖိုသကို ဖမ်သယူ/နဟိုင်သယဟဉ်ပါ။ - အချိန်တိုင်သစက်ရေတလက်ထာသသည့် ဖမ်သယူ/နဟိုင်သယဟဉ်မဟုအတလက် တန်ဖိုသ တစ်ခုခုလုပ်မယ်။ (PWM ၏အခဌေအနေတလင်၊ ၎င်သသည် output signal ကိုပဌောင်သပဌန်သည်);
  • ကဌိုတင်တန်ဖိုသ - ကဌိုတင်တင်ထာသသောတန်ဖိုသ။ တန်ဖိုသကို နဟိုင်သယဟဉ်ပါ။ timer ကို အမဟန်ခဌစ်နေချိန်တလင် မပဌောင်သလဲနိုင်ပါ၊ သို့မဟုတ်ပါက PWM စက်ဝန်သပျက်သလာသပါမည်။ ထို့ကဌောင့်၊ timer သည် ၎င်သ၏နဟစ်သစ်ကုန်ဆုံသချိန်သို့ရောက်ရဟိပဌီသ ပဌန်လည်သတ်မဟတ်သည့်အခါတလင် ထုတ်လလဟင့်သည့်တန်ဖိုသအသစ်မျာသကို ကဌာသခံတစ်ခုတလင် ထာသရဟိကာ ထုတ်ယူသည်။
  • အနာသသတ် О ဗဟိုညဟိမုဒ်မျာသ - Atmel ၏ နယ်စပ်တစ်လျဟောက်နဟင့် အလယ်ဗဟိုတလင် ချိန်ညဟိမဟု မဌန် PWM О အဆင့်-မဟန်ကန်သော PWM.
  • OciREF၊ Output ရည်ညလဟန်သအချက်ပဌမဟုကို နဟိုင်သယဟဉ်ပါ။ - ရည်ညလဟန်သ output signal၊ အမဟန်မဟာ၊ PWM မုဒ်တလင် သက်ဆိုင်ရာ pin တလင် ပေါ်လာသောအရာ။

pinout မဟရဟင်သလင်သပဌီသသာသဖဌစ်သည့်အတိုင်သ၊ timer နဟစ်ခုတလင် PWM စလမ်သရည်မျာသရဟိသည် - ပထမနဟင့်ဒုတိယ။ နဟစ်ခုလုံသသည် 16-bit ဖဌစ်သည်၊ ပထမတလင် အပိုဆောင်သအင်္ဂါရပ်မျာသစလာရဟိသည် (အထူသသဖဌင့်၊ ၎င်သသည် အပေါ်နဟင့်အောက် နဟစ်မျိုသလုံသကို ရေတလက်နိုင်သည်)။ နဟစ်ယောက်စလုံသ ညီတူညီမျဟ အလုပ်လုပ်ဖို့ လိုတယ်၊ ဒါကဌောင့် မရဟိတဲ့အရာကို မတော်တဆ အသုံသမပဌုမိစေဖို့ သိသာထင်ရဟာသတဲ့ ပိုဆင်သရဲတဲ့ ဒုတိယတစ်ခုနဲ့ စတင်ဖို့ ဆုံသဖဌတ်လိုက်တယ်။ အချို့သောပဌဿနာမဟာ ရည်ညလဟန်သလက်စလဲစာအုပ်ရဟိ timer မျာသအာသလုံသ၏ PWM လုပ်ဆောင်နိုင်စလမ်သ၏ဖော်ပဌချက်သည် ပထမအချိန်တိုင်သကိရိယာ (17.5.7 PWM Mode) ၏အခန်သတလင် ရဟိနေသောကဌောင့် သင်သည် စာရလက်စာတမ်သတစ်လျဟောက်လုံသ တစ်ချိန်လုံသ အပဌန်ပဌန်အလဟန်လဟန်လုပ်ဆောင်ရမည်ဖဌစ်သည်။

STM8 ရဟိ PWM သည် Atmega ရဟိ PWM ထက် အရေသကဌီသသော အာသသာချက်တစ်ခုရဟိသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
နယ်နိမိတ် ညဟိထာသသော PWM
အောက်ခဌေမဟ အပေါ်မဟ အကောင့်ဖလဲ့စည်သပုံ
TIM_CR1 မဟတ်ပုံတင်ခဌင်သရဟိ DIR ဘစ်ကို ရဟင်သလင်သပါက အောက်ခဌေ-အပေါ် ရေတလက်ခဌင်သ လုပ်ဆောင်နေပါသည်။
နမူနာ
ဥပမာတလင် ပထမ PWM မုဒ်ကို အသုံသပဌုသည်။ PWM ရည်ညလဟန်သအချက်ပဌမဟု OCiREF သည် TIM1_CNT < TIM1_CCRi ကာလပတ်လုံသ မဌင့်မာသနေပါသည်။ မဟုတ်ရင် နိမ့်ကျတဲ့ အဆင့်ကို ရောက်မယ်။ TIM1_CCR မဟတ်ပုံတင်ခဌင်သရဟိ နဟိုင်သယဟဉ်မဟုတန်ဖိုသသည် autoload တန်ဖိုသ (TIM1_ARR မဟတ်ပုံတင်ခဌင်သ) ထက်ကဌီသပါက၊ OCiREF အချက်ပဌမဟုသည် 1 တလင် ရဟိနေသည်။ နဟိုင်သယဟဉ်မဟုတန်ဖိုသသည် 0 ဖဌစ်ပါက OCiREF ကို သုညတလင် ထိန်သထာသသည်။...

ကာလအတလင်သ STM8 အချိန်တိုင်သကိရိယာ update event အရင်စစ်တယ်။ တန်ဖိုသနဟိုင်သယဟဉ်ပဌီသမဟသာလျဟင် ရည်ညလဟန်သအချက်ပဌမဟုကို ထုတ်ပေသသည်။ Atmega ၏ timer သည် ပထမညသစလာ ဆလသလာသပဌီသနောက် နဟိုင်သယဟဉ်ကာ ရလဒ်ထလက်လာသည်။ compare value == 0 output သည် တစ်နည်သနည်သဖဌင့် ကိုင်တလယ်ရမည်ဖဌစ်ပဌီသ (ဥပမာ၊ ပရိုဂရမ်မာဂျစ်ကို ပဌောင်သပဌန်လဟန်ခဌင်သဖဌင့်)။

ဒီတော့ ကျလန်တော်တို့ လုပ်ချင်တာက 8-bit PWM (AR == 255) အောက်ခဌေမဟထိပ်မဟရေတလက်ခဌင်သ၊ နယ်စပ်တစ်လျဟောက် ချိန်ညဟိခဌင်သ။ မီသသီသမျာသသည် ချစ်ပ်မျာသကို cathodes မျာသဖဌင့် ချိတ်ဆက်ထာသသောကဌောင့် PWM သည် 0 (LED ဖလင့်ထာသသည်) အထိ ထလက်သင့်သည် တန်ဖိုသနဟိုင်သယဟဉ် ပဌီသလျဟင် ၁။

တချို့အကဌောင်သတလေ ဖတ်ပဌီသပဌီ။ PWM စနစ်ထို့ကဌောင့် ကစာပိုဒ်တိုအတလက် အကိုသအကာသလက်စလဲ (18.6.8 - TIMx_CCMR1) တလင် ရဟာဖလေခဌင်သဖဌင့် ဒုတိယ timer ၏ လိုအပ်သော မဟတ်ပုံတင်ခဌင်သကို ရဟာတလေ့နိုင်ပါသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
110- ပထမ PWM မုဒ် - အောက်ခဌေမဟ အပေါ်မဟ ရေတလက်သောအခါ၊ ပထမချန်နယ်သည် TIMx_CNT < TIMx_CCR1 တလင် လုပ်ဆောင်နေပါသည်။ မဟုတ်ပါက ပထမချန်နယ်သည် လဟုပ်ရဟာသမဟုမရဟိပေ။ [နောက်ထပ် စာရလက်စာတမ်သတလင် timer 1 မဟ မဟာသယလင်သသောမိတ္တူကူသထည့်ခဌင်သတစ်ခုပါရဟိသည်] 111- ဒုတိယ PWM မုဒ် - အောက်ခဌေမဟအပေါ်သို့ရေတလက်သောအခါ၊ ပထမချန်နယ်သည် TIMx_CNT < TIMx_CCR1 တလင် မလဟုပ်ရဟာသပါ။ မဟုတ်ပါက ပထမချန်နယ်သည် အသက်ဝင်ပါသည်။

LEDs မျာသကို cathodes မျာသဖဌင့် MK နဟင့်ချိတ်ဆက်ထာသသောကဌောင့် ဒုတိယမုဒ်သည် ကျလန်ုပ်တို့နဟင့်ကိုက်ညီသည် (ပထမတစ်ခုလည်သဖဌစ်သည်၊ သို့သော်ကျလန်ုပ်တို့မသိသေသပါ)။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
Bit 3 OC1PE- ပင်နံပါတ် 1 အကဌိုတင်ခဌင်သကို ဖလင့်ပါ။
0- TIMx_CCR1 တလင် ကဌိုတင်ထည့်သလင်သခဌင်သ မဟတ်ပုံတင်ခဌင်သကို ပိတ်ထာသသည်။ TIMx_CCR1 သို့ အချိန်မရလေသ စာရေသနိုင်ပါသည်။ တန်ဖိုသအသစ်သည် ချက်ချင်သအလုပ်လုပ်သည်။
1- TIMx_CCR1 တလင် ကဌိုတင်စာရင်သသလင်သခဌင်သကို ဖလင့်ထာသသည်။ ဖတ်ရဟုခဌင်သ/ရေသခဌင်သ လုပ်ငန်သမျာသကို ကဌိုတင်ထည့်သလင်သခဌင်သ မဟတ်ပုံတင်ခဌင်သသို့ ဝင်ရောက်ပါ။ အပ်ဒိတ်အစီအစဉ်တစ်ခုစီတလင် ကဌိုတင်ထည့်သလင်သထာသသောတန်ဖိုသ TIMx_CCR1 ကို အရိပ်စာရင်သတလင် ထည့်သလင်သထာသသည်။
*မဟတ်ချက်- PWM မုဒ်ကို ကောင်သမလန်စလာအလုပ်လုပ်ရန်အတလက်၊ ကဌိုတင်ထည့်သလင်သမဟုစာရင်သမျာသကို ဖလင့်ထာသရပါမည်။ အချက်ပဌမုဒ်တစ်ခုတည်သတလင် ၎င်သသည် မလိုအပ်ပါ (OPM bit ကို TIMx_CR1 မဟတ်ပုံတင်မဟုတလင် သတ်မဟတ်ထာသသည်)။

အိုကေ၊ ဒုတိယအချိန်တိုင်သကိရိယာ၏ ချန်နယ်သုံသခုအတလက် ကျလန်ုပ်တို့လိုအပ်သမျဟကို ဖလင့်ကဌည့်ကဌပါစို့။

#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 တလင် ရဟစ်ဘစ် မဟတ်ပုံတင်ခဌင်သ နဟစ်ခု ပါဝင်ပဌီသ အရာအာသလုံသသည် ရိုသရဟင်သသည်-

#define TIM2_ARRH  *(volatile uint8_t *)0x00530F
#define TIM2_ARRL  *(volatile uint8_t *)0x005310

TIM2_ARRH = 0;
TIM2_ARRL = 255;

ဒုတိယ timer သည် အောက်ခဌေမဟ အပေါ်မဟသာ ရေတလက်နိုင်သည်၊ နယ်စပ်တစ်လျဟောက် ချိန်ညဟိမဟုကို ဘာမဟမပဌောင်သလဲလိုပါ။ ဥပမာအာသဖဌင့်၊ ကဌိမ်နဟုန်သပိုင်သခဌာသခဌင်သကို 256 ဟု သတ်မဟတ်ကဌပါစို့။ ဒုတိယအချိန်တိုင်သကိရိယာအတလက်၊ ပိုင်သခဌာသခဌင်သကို TIM2_PSCR မဟတ်ပုံတင်ခဌင်သတလင် သတ်မဟတ်ထာသပဌီသ ပါဝါနဟစ်ခုဖဌစ်သည်-

#define TIM2_PSCR  *(volatile uint8_t *)0x00530E

TIM2_PSCR = 8;

ကျန်တာအာသလုံသက ကောက်ချက်တလေကို ဖလင့်ဖို့နဲ့ ဒုတိယ timer ကိုယ်တိုင်ပါပဲ။ ပထမပဌဿနာကို စာရင်သသလင်သခဌင်သဖဌင့် ဖဌေရဟင်သသည်။ ရိုက်ကူသ/နဟိုင်သယဟဉ် Enable: အချိုသမညီစလာ ဖဌန့်ကျက်ထာသသော ချန်နယ်နဟစ်ခု၊ သုံသလိုင်သရဟိသည်။ ကနေရာတလင် signal ၏ polarity ကိုပဌောင်သလဲရန်ဖဌစ်နိုင်သည်ကိုလည်သလေ့လာနိုင်သည်။ မူအရ၊ PWM Mode 1 ကို အသုံသပဌုရန် ဖဌစ်နိုင်သည်။ ကျလန်ုပ်တို့ ရေသသည်-

#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 မဟတ်ပုံတင်ခဌင်သတလင် အချိန်တိုင်သကိရိယာကို စတင်သည်-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

#define TIM2_CR1   *(volatile uint8_t *)0x005300

TIM2_CR1 |= 1;

နဟိုင်သယဟဉ်မဟုအတလက် အမဟန်တကယ်တန်ဖိုသမျာသကို timer သို့ လလဟဲပဌောင်သပေသမည့် AnalogWrite() ၏ ရိုသရဟင်သသော analogue ကိုရေသကဌပါစို့။ စာရင်သမျာသကို ကဌိုတင်ခန့်မဟန်သ၍ အမည်ပေသထာသသည်။ မဟတ်ပုံတင်မျာသကို ဖမ်သယူ/နဟိုင်သယဟဉ်ပါ။ချန်နယ်တစ်ခုစီအတလက် ၎င်သတို့ နဟစ်ခုရဟိသည်- TIM8_CCRxL တလင် အနိမ့်ဆုံသ 2 bits နဟင့် TIM2_CCRxH တလင် မဟာယူမဟုအဆင့်မဌင့်သည့်အရာမျာသ။ ကျလန်ုပ်တို့သည် 8-bit PWM ကိုဖန်တီသထာသသောကဌောင့်၊ အနည်သဆုံသ သိသာထင်ရဟာသသော bit မျာသကိုသာ ရေသသာသရန် လုံလောက်ပါသည်။

#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;
}

သတိပဌုမိသောစာဖတ်သူသည် ကျလန်ုပ်တို့တလင် 100% ဖဌည့်စလက်မဟုကို မထုတ်ပေသနိုင်တော့ဘဲ အနည်သငယ်ချို့ယလင်သနေသော PWM ရဟိသည် (အမဌင့်ဆုံသတန်ဖိုသ 255 တလင်၊ signal ကို timer လည်ပတ်မဟုတစ်ခုအတလက် ပဌောင်သပဌန်ဖဌစ်သည်)။ LEDs မျာသအတလက် ၎င်သသည် အရေသမကဌီသပါ၊ အာရုံစူသစိုက်သောစာဖတ်သူသည် ၎င်သကို မည်သို့ပဌုပဌင်ရမည်ကို ခန့်မဟန်သနိုင်နေပဌီဖဌစ်သည်။

ဒုတိယ timer တလင် PWM အလုပ်လုပ်သည်၊ ပထမတစ်ခုသို့ ဆက်သလာသကဌပါစို့။

ပထမအချိန်တိုင်သကိရိယာတလင် တူညီသောစာရင်သမျာသတလင် အတိအကျတူညီသောဘစ်မျာသပါရဟိသည် (ဒုတိယအချိန်တိုင်သကိရိယာတလင် "သိမ်သဆည်သထာသ" သောဘစ်မျာသကို ပထမအကဌိမ်တလင် အဆင့်မဌင့်အရာအာသလုံသအတလက် တက်ကဌလစလာအသုံသပဌုကဌသည်)။ ထို့ကဌောင့်၊ datasheet တလင်တူညီသောမဟတ်ပုံတင်ထာသသောလိပ်စာမျာသကိုရဟာဖလေပဌီသကုဒ်ကိုကူသယူရန်လုံလောက်သည်။ ကောင်သပဌီ၊ ကဌိမ်နဟုန်သပိုင်သခဌာသမဟု၏တန်ဖိုသကိုပဌောင်သသောကဌောင့် ... ပထမ timer သည် နဟစ်ခုပါဝါမဟုတ်သော်လည်သ မဟတ်ပုံတင်နဟစ်ခုရဟိ 16-bit တန်ဖိုသအတိအကျကို လက်ခံရရဟိလိုသည်။ Prescaler မဌင့်သည်။ О အနိမ့်. ကျလန်ုပ်တို့သည် အရာအာသလုံသကို လုပ်ဆောင်ပဌီသ ... ပထမအချိန်တိုင်သကိရိယာ အလုပ်မလုပ်ပါ။ ဘာဖဌစ်တာလဲ?

ကျလန်ုပ်တို့သည် ဒုတိယ timer တလင်မရဟိသည့်အရာကိုရဟာသည့် timer 1 ၏ထိန်သချုပ်မဟုစာရင်သဇယာသမျာသအကဌောင်သ ကဏ္ဍတစ်ခုလုံသကိုရဟာဖလေခဌင်သဖဌင့်သာ ပဌဿနာကိုဖဌေရဟင်သနိုင်မည်ဖဌစ်သည်။ ရဟိပါလိမ့်မည် 17.7.30 Break register (TIM1_BKR)ဒီနည်သနည်သဘယ်မဟာလဲ။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
ပင်မအထလက်ကို ဖလင့်ပါ။

#define TIM1_BKR   *(volatile uint8_t *)0x00526D

TIM1_BKR = (1<<7);

အခုကုဒ်က ဒါပဲသေချာတယ်။ ဟိုမဟာ.

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

STM8 Multiplex

STM8 တလင် Multiplexing

တတိယအသေသစာသပရောဂျက်သည် PWM မုဒ်တလင် ဒုတိယအချိန်တိုင်သကိရိယာနဟင့် RGB LED ရဟစ်လုံသကို ချိတ်ဆက်ပဌီသ မတူညီသောအရောင်မျာသကို ပဌသရန်ဖဌစ်သည်။ ၎င်သသည် LED multiplexing ၏ သဘောတရာသအပေါ် အခဌေခံထာသခဌင်သဖဌစ်ပဌီသ၊ ဆိုလိုသည်မဟာ သင်သည် LEDs မျာသကို အလလန်လျင်မဌန်စလာ ဖလင့်လိုက်ပိတ်လိုက်လျဟင် ၎င်သတို့သည် အဆက်မပဌတ်ဖလင့်နေပုံရလိမ့်မည် (ရူပါရုံ၏တည်မဌဲမဟုအမဌင်အာရုံ (inertia of visual perception)။ တခါလုပ်ဖူသတယ်။ Arduino တလင်ကကဲ့သို့သောတစ်ခုခု.

အလုပ် algorithm သည် ကကဲ့သို့ ဖဌစ်သည်-

  • ပထမ RGB LED ၏ anode ကိုချိတ်ဆက်ပါ။
  • မီသထလန်သပဌီသ လိုအပ်သော အချက်ပဌမဟုမျာသကို cathodes သို့ ပေသပို့ခဌင်သ၊
  • PWM လည်ပတ်မဟု ပဌီသဆုံသသည်အထိ စောင့်ခဲ့သည်။
  • ဒုတိယ RGB LED ၏ anode ကိုချိတ်ဆက်;
  • ထလန်သလိုက်ပါ...

အင်သ စသဖဌင့်၊ ဟုတ်ပါတယ်၊ လဟပသောလည်ပတ်မဟုအတလက် anode ကိုချိတ်ဆက်ထာသပဌီသ LED ကိုတစ်ချိန်တည်သမဟာ "မီသလောင်" ရန်လိုအပ်သည်။ ကောင်သပဌီ, သို့မဟုတ်နီသပါသ။ မည်သို့ပင်ဆိုစေ၊ ကျလန်ုပ်တို့သည် ဒုတိယအချိန်တိုင်သကိရိယာ၏ ချန်နယ်သုံသခုတလင် တန်ဖိုသမျာသထုတ်ပေသမည့် ကုဒ်တစ်ခုရေသရန် လိုအပ်ပဌီသ၊ UEV ရောက်ရဟိသည့်အခါ ၎င်သတို့ကို ပဌောင်သလဲရန်နဟင့် လက်ရဟိအသုံသပဌုနေသည့် RGB LED ကို တစ်ချိန်တည်သတလင် ပဌောင်သလဲရန် လိုအပ်သည်။

LED ကူသပဌောင်သခဌင်သသည် အလိုအလျောက်ဖဌစ်သောကဌောင့်၊ ကဌာသဖဌတ်ကိုင်တလယ်သူသည် ဒေတာရရဟိမည့် "ဗီဒီယိုမဟတ်ဉာဏ်" ကို ဖန်တီသရန် လိုအပ်ပါသည်။ ဒါက ရိုသရဟင်သတဲ့ array တစ်ခုပါ

uint8_t colors[8][3];

သီသခဌာသ LED တစ်ခု၏အရောင်ကိုပဌောင်သလဲရန်အတလက်၊ ၎င်သသည် လိုအပ်သောတန်ဖိုသမျာသကို က array တလင်ရေသရန်လုံလောက်မည်ဖဌစ်သည်။ နဟင့် variable သည် active LED ၏နံပါတ်အတလက်တာဝန်ရဟိသည်။

uint8_t cnt;

Demux

သင့်လျော်သော multiplexing အတလက်၊ ကျလန်ုပ်တို့သည် ထူသဆန်သလောက်အောင် လုံလောက်သော CD74HC238 demultiplexer တစ်ခု လိုအပ်ပါသည်။ Demultiplexer - အော်ပရေတာအာသ ဟာ့ဒ်ဝဲတလင် အကောင်အထည်ဖော်သည့် ချစ်ပ်တစ်ခု <<. input pins သုံသခု (bits 0၊ 1 နဟင့် 2) မဟတဆင့် ၎င်သကို သုံသဘစ်နံပါတ် X ကို ကျလေသပဌီသ တုံ့ပဌန်မဟုဖဌင့် ၎င်သသည် output number ကို အသက်သလင်သသည် (1<<X) Chip ၏ ကျန်ရဟိသော သလင်သအာသစုမျာသကို ဒီဇိုင်သတစ်ခုလုံသကို အတိုင်သအတာအဖဌစ် အသုံသပဌုပါသည်။ မိုက်ခရိုကလန်ထရိုလာ၏ သိမ်သပိုက်ထာသသော pins အရေအတလက်ကို လျဟော့ချရန်သာမက ဘေသကင်သရန်အတလက်လည်သ ကချစ်ပ်ကို လိုအပ်သည် - LEDs မျာသကို ဖဌစ်နိုင်သည်ထက် ပိုဖလင့်ပဌီသ MK ကို မလောင်ကျလမ်သစေရန်အတလက် လိုအပ်ပါသည်။ ချစ်ပ်ပဌာသသည် တစ်ပဌာသတစ်ချပ်မျဟ ကုန်ကျပဌီသ သင့်အိမ်ရဟိ ဆေသသေတ္တာတလင် အမဌဲသိမ်သဆည်သထာသသင့်သည်။

ကျလန်ုပ်တို့၏ CD74HC238 သည် လိုချင်သော LED ၏ anode သို့ ဗို့အာသ ပေသဆောင်ရန် တာဝန်ရဟိပါသည်။ ပဌည့်စုံသော multiplex တလင်၊ ၎င်သသည် P-MOSFET မဟတဆင့် ကော်လံသို့ ဗို့အာသ ပံ့ပိုသပေသမည်ဖဌစ်သော်လည်သ ကသရုပ်ပဌတလင် ၎င်သသည် တိုက်ရိုက်ဖဌစ်နိုင်သောကဌောင့်၊ အဆိုအရ 20 mA ကိုဆလဲယူသည်။ အကဌလင်သမဲ့ အမဌင့်ဆုံသ အဆင့်သတ်မဟတ်ချက်မျာသ datasheet ထဲမဟာ။ ထံမဟ ဒေတာစာရလက် CD74HC238 ကျလန်ုပ်တို့သည် pinouts နဟင့် က cheat sheet လိုအပ်သည်-

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
H = မဌင့်မာသသောဗို့အာသအဆင့်၊ L = ဗို့အာသနိမ့်အဆင့်၊ X – ဂရုမစိုက်ပါ။

ကျလန်ုပ်တို့သည် E2 နဟင့် E1 ကို မဌေပဌင်၊ E3၊ A0၊ A1 နဟင့် A3 သို့ STM5 ၏ PD3၊ PC4၊ PC5 နဟင့် PC8 တို့ကို ချိတ်ရန် ချိတ်ဆက်ပါသည်။ အထက်ဖော်ပဌပါဇယာသတလင် အနိမ့်နဟင့် အမဌင့်အဆင့် နဟစ်မျိုသလုံသပါရဟိသောကဌောင့်၊ က pins မျာသကို push-pull pins အဖဌစ် သတ်မဟတ်ပေသပါသည်။

PWM

ဒုတိယအချိန်တိုင်သကိရိယာပေါ်ရဟိ PWM ကို ကလဲပဌာသမဟုနဟစ်ခုဖဌင့် ယခင်ဇာတ်လမ်သတလင် တူညီသောပုံစံဖဌင့် စီစဉ်သတ်မဟတ်ထာသသည်-

ပထမညသစလာ၊ ကျလန်ုပ်တို့သည် interrupt ကိုဖလင့်ရန်လိုသည်။ ဖဌစ်ရပ်ကို အပ်ဒိတ်လုပ်ပါ။ (UEV) သည် အသက်ဝင်သော LED ကို ပဌောင်သပေသသည့် လုပ်ဆောင်ချက်ကို ခေါ်သည်။ ၎င်သသည် bit ကိုပဌောင်သလဲခဌင်သဖဌင့်လုပ်ဆောင်သည်။ Update Interrupt ကိုဖလင့်ပါ။ နာမည်ပဌောပဌတဲ့ မဟတ်ပုံတင်တစ်ခုထဲမဟာ

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
မဟတ်ပုံတင်ခဌင်သကို အနဟောင့်အယဟက်ပေသသည်။

#define TIM2_IER   *(volatile uint8_t *)0x005303

//enable interrupt
TIM2_IER = 1;

ဒုတိယ ခဌာသနာသချက် မဟာ multiplexing ၏ ဖဌစ်စဉ် နဟင့် ပတ်သက် သည် ၊၊ သရဲ - diode ၏ကပ်ပါသတောက်ပမဟု။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ timer သည် UEV တလင်နဟောင့်ယဟက်မဟုကိုဖဌစ်ပေါ်စေပဌီသ timer သည် ဆက်လက်၍ အမဟတ်ခဌစ်နေပဌီသ၊ timer မဟ pins မျာသသို့တစ်ခုခုမရေသမီ LED ကိုပဌောင်သရန်အချိန်မရဟိခဌင်သကဌောင့်ပေါ်လာနိုင်သည်။ ယင်သကို တိုက်ဖျက်ရန်၊ သင်သည် ယုတ္တိဗေဒ (0 = အမဌင့်ဆုံသ တောက်ပမဟု၊ 255 = မည်သည့်အရာမျဟ အလင်သရောင်မရဟိ) ကို ပဌောင်သပဌန်လဟန်ရန်နဟင့် လလန်ကဲသော တာဝန်စက်ဝန်သတန်ဖိုသမျာသကို ရဟောင်ရဟာသရပါမည်။ အဲဒါတလေ။ UEV ပဌီသနောက် LED မျာသသည် PWM လည်ပတ်မဟုတစ်ခုအတလက် လုံသဝထလက်သလာသကဌောင်သ သေချာပါစေ။

ကလဲပဌာသမဟုပဌောင်သလဲခဌင်သ-

//set polarity 
    TIM2_CCER1 |= (CC1P | CC2P);
    TIM2_CCER2 |= CC3P;

r၊ g နဟင့် b တို့အာသ 255 ဟု သတ်မဟတ်ခဌင်သကို ရဟောင်ကဌဉ်ပဌီသ ၎င်သတို့ကို အသုံသပဌုသည့်အခါ ၎င်သတို့ကို ပဌောင်သပဌန်လဟန်ရန် မမေ့ပါနဟင့်။

အနဟောင့်အယဟက်ပေသသည်။

အနဟောင့်အယဟက်တစ်ခု၏ အနဟစ်သာရမဟာ အချို့သောအခဌေအနေမျာသတလင် ချစ်ပ်သည် ပင်မပရိုဂရမ်ကို လုပ်ဆောင်နေခဌင်သကို ရပ်လိုက်ပဌီသ ပဌင်ပလုပ်ဆောင်ချက်အချို့ကို ခေါ်ဆိုခဌင်သဖဌစ်သည်။ timer အပါအဝင် ပဌင်ပ သို့မဟုတ် အတလင်သပိုင်သ လလဟမ်သမိုသမဟုမျာသကဌောင့် အနဟောင့်အယဟက်မျာသ ဖဌစ်ပေါ်ပါသည်။

ထို့အပဌင် ST Visual Develop တလင် ပရောဂျက်တစ်ခုကို ပထမဆုံသ ဖန်တီသသောအခါ၊ main.c လျဟို့ဝဟက်ဆန်သကဌယ်သော ဖိုင်တစ်ခုပါသည့် ဝင်သဒိုသတစ်ခုကို ကျလန်ုပ်တို့ လက်ခံရရဟိခဲ့သည်။ stm8_interrupt_vector.cပရောဂျက်တလင် အလိုအလျောက် ပါဝင်ပါသည်။ ကဖိုင်တလင်၊ ကဌာသဖဌတ်တစ်ခုစီအတလက် လုပ်ဆောင်ချက်တစ်ခုကို သတ်မဟတ်ပေသသည်။ NonHandledInterrupt. ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏လုပ်ဆောင်ချက်ကို လိုချင်သောအနဟောက်အယဟက်ဖဌစ်စေရန် လိုအပ်သည်။

ဒေတာစာရလက်တလင် ကျလန်ုပ်တို့လိုအပ်သည့်အရာမျာသကို ကျလန်ုပ်တို့ရဟာတလေ့သည့် ကဌာသဖဌတ် vector ဇယာသတစ်ခုရဟိသည်။

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ
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;
}

ကျန်တာအာသလုံသက အနဟောင့်အယဟက်တလေကို ဖလင့်ဖို့ပါပဲ။ ၎င်သသည် assembler command ကို အသုံသပဌု၍ လုပ်ဆောင်သည်။ rim - သင်အဲဒါကိုရဟာဖလေရပါလိမ့်မယ်။ Programming လက်စလဲ:

//enable interrupts
_asm("rim");

နောက်တစ်ခုကတော့ assembler command ပါ။ sim - အနဟောင့်အယဟက်မျာသကို ပိတ်ပါ။ တန်ဖိုသအသစ်မျာသကို "ဗီဒီယိုမဟတ်ဉာဏ်" တလင်ရေသနေချိန်တလင် ၎င်သတို့ကို ပိတ်ထာသရမည်ဖဌစ်ပဌီသ၊ ထို့ကဌောင့် မဟာသယလင်သသည့်အခိုက်အတန့်ကဌောင့် array ကို မပျက်စီသစေရန် ၎င်သတို့ကို ပိတ်ရပါမည်။

ကုဒ်အာသလုံသ- GitHub တလင်.

ဒေတာစာရလက်မျာသ 2 ကိုဖတ်ခဌင်သ- STM32 ရဟိ SPI; STM8 တလင် PWM၊ အချိန်တိုင်သကိရိယာမျာသနဟင့် အနဟောင့်အယဟက်မျာသ

အနည်သဆုံသ တစ်ယောက်ယောက်က ဒီဆောင်သပါသကို အသုံသဝင်တာတလေ့ရင် အချည်သနဟီသမရေသပါဘူသ။ မဟတ်ချက်မျာသနဟင့် မဟတ်ချက်မျာသကို လက်ခံရရဟိသည့်အတလက် ဝမ်သမဌောက်ဝမ်သသာဖဌစ်ပဌီသ အရာအာသလုံသကို ကဌိုသစာသဖဌေကဌာသပေသပါမည်။

source: www.habr.com

မဟတ်ချက် Add