Layihəmdə STM32F103C8 mikrokontroller və stm32duino çərçivəsindən istifadə edirəm. Bu Arduino klonu ST-Link və ya USB-UART adapteri kimi xarici komponentlərdən istifadə etmədən USB vasitəsilə proqram təminatını yükləməyə imkan verən xüsusi yükləyici təklif edir.
Bu gün mənə CooCox altından və stm32duino olmadan çılpaq nəzarətçi ilə işləməli oldum. Amma problem buradadır. Bu yükləyicidən tökülən bir lampa ilə sadə bir flaşör belə işləmir.
Gəlin bunu anlayaq. Bəlkə də mənim hesablamalarım kiməsə bayağı görünəcək. Ancaq mən STM32 kontrollerlərini öyrənməyə yenicə başlayıram və problem tapmaq üçün ən azı yarım gün öldürdüm. Birdən bu məqalə kiminsə inkişaf vaxtını azaldacaq.
ST-Link və digər debuggerlərə qarşı heç bir şeyim yoxdur. Amma mənim hazır cihazımda bu olmayacaq, amma mütləq USB olacaq. Niyə USB vasitəsilə proqram təminatını yeniləmək imkanını dərhal qoymayasınız? Şəxsən mən bu üsulu rahat hesab edirəm. Xüsusilə məndə hələ də enerji və USB seriyasının təmin olunduğu bir kabel var.
Yükləyicinin necə işlədiyini görək. Başlamaq üçün, AVR nəzarətçiləri nümunəsində. Niyə onu xatırladım? Arduino-dan köçürdüm və bilinçaltı olaraq eyni davranışı gözləyirdim. Ancaq STM32-də hər şey fərqli oldu. Buna görə də bu iki mikrokontroller arasındakı fərq haqqında danışmaq istəyirəm.
Belə ki. AVR ATMega mikro nəzarət cihazlarında, flaşın sonuna yaxın yükləyici üçün müəyyən miqdarda yaddaş saxlanıla bilər. Qoruyucu bitlərdən istifadə edərək, proqramın hansı ünvandan başlayacağını idarə edə bilərsiniz. Bootloader yoxdursa, proqram 0x0000 ünvanından başlayır. Yükləyici varsa, o, başqa bir ünvandan başlayır (məsələn, 0x3C00 ilə ATMega32-də, yükləyicinin ölçüsü 2k-a təyin edilibsə).
STM32 mikro nəzarətçilərində hər şey fərqlidir. Bütün proqramlar 0x0800000 ünvanından başlayır. Bootloader xüsusi bir şey deyil. Bu, eyni başlanğıc ünvanından başlayan eyni proqramdır. Əməliyyat zamanı yükləyici proqram təminatını qəbul edə bilər (USB və ya UART vasitəsilə, USB flash sürücüsündən oxumaq, peykdən qəbul etmək, onu alt kosmosdan almaq, nə olursa olsun ...) və onu yükləyicinin özündən daha yüksək ünvanlara yaza bilər. Və təbii ki, işinizin sonunda nəzarəti əsas proqrama köçürün.
Bütün bunlar nəzəriyyə ilə bağlıdır. Gəlin məşqə keçək. Aşağıda USB yükləyicisini STM32F1xx seriyalı mikrokontrollerlərə və bəlkə də başqalarına necə bağlamaq barədə addım-addım təlimat verilmişdir.
Bununla belə, dövrə ilə bağlı bəzi məhdudiyyətlər var. Burada təəssüf ki, güclü deyiləm. YTP PA12 portu (aka USB D+) üçün 1,5k açılan rezistora ehtiyac duyur. Bu, yükləyiciyə lazımi vaxtda USB-yə qoşulub onu ayırmağa imkan verir.
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
"maple_upload.bat" COM20 2 1EAF:0003 "Path\To\Firmware.bin"
COM20 əvəzinə mikrokontrolörün qoşulduğu portu əvəz etməlisiniz.
Doldurucu çox incə bir şeydir, nisbi yolları sevmir. ona görə də proshivkaya gedən yol tam şəkildə göstərilməlidir.
1EAF: 0003 VID və PID-dir
2, AltID parametridir, bu, proqram təminatının 0x08002000 (oxu) ilə yüklənməsinin lazım olduğunu göstərir.
Bu, narahatlığa səbəb ola bilər. Mikrokontroller bağlanır və asılırsa, o, artıq portu dinləmir. Buna görə də, o, açar ardıcıllığını eşidə bilmir və yükləyiciyə yenidən başlaya bilmir. Sonra yalnız kömək etmək üçün sıfırlayın.
Hamısı budur. Ümid edirəm ki, məqaləm yükləyicinin STM32-də necə işlədiyinə və USB portu vasitəsilə proqram təminatının necə yüklənə biləcəyinə işıq salacaq. Təəssüf ki, giriş həddi hələ də yüksəkdir, amma birdən mənim məqaləm kiməsə onu dəf etməyə kömək edəcək.
Tez-tez verilən suallara cavablar:
Mikrokontrollerlər əsasında cihazları inkişaf etdirən əksər mütəxəssislər mikrokontroller proqramlarının qorunması mövzusu ilə artıq tanışdırlar, buna görə də bu bölmənin onlara yeni bir şey söyləməyəcəyini düşünə bilərik. Bununla belə, bu cür mühafizənin təfərrüatlı təşkili ilə tanış olmayan, lakin mövcud cihazın işinin təfərrüatlarını başa düşmək və ya belə bir cihaz yaratmaq istəyən böyük bir mühəndis ordusu və elektron cihazların adi istehlakçıları var, bu kolleksiya suallara cavablar onlar üçün nəzərdə tutulub.
Bir çox elektron cihaz istehsalçıları öz cihazlarını başqa bir istehsalçı tərəfindən asanlıqla kopyalanmaqdan qorumağa çalışırlar. Mikrokontroller istehsalçıları mikrokontrolörün yaddaşında olan proqramın (mikroproqramın) surətinin qorunmasını məhsullarının funksionallığına daxil etməklə onları yarı yolda qarşıladılar. Bu proqram təminatının oxunma mühafizəsindən istifadə edərək, elektron cihazların istehsalçıları məhsullarını başqa istehsalçı tərəfindən sadəcə olaraq kopyalanmaqdan qoruya bilərlər.
Adətən, mikrokontroller proqramlaşdırması zamanı surətin mühafizəsi xüsusi təyin edilməklə təyin edilir qoruyucu bit və ya mikrokontroller konfiqurasiya sözündə bir neçə bit. Fiziki olaraq bu bitlər mikrokontroller çipində xüsusi yaddaş hüceyrələrində yerləşir. Bəzən parolun qorunması kimi digər təhlükəsizlik üsullarından istifadə olunur, lakin prinsip eynidir. Qorunmanı aradan qaldırmaq üçün adətən bu bitin və ya bir neçə bitin dəyərini dəyişdirmək lazımdır, baxmayaraq ki, mikrokontroller proqramının yaddaşının məzmununu oxumağın digər üsulları tez-tez istifadə edilə bilər. Bir proqramçı kimi adi üsullar bunu edə bilməyəcək, elektron cihazların adi bir tərtibatçısında olmayan mürəkkəb bahalı avadanlıq tələb olunur. Buna görə də, lazımi avadanlıq, bilik və təcrübəyə malik olmaqla, biz bu növ xidmətin göstərilməsində ixtisaslaşmışıq.
Tutaq ki, sizin elektron cihaz istehsalçılarından birindən aldığınız bir cihazınız var və siz eyni, lakin dəyişdirilmiş cihazı istehsal etmək istəyirsiniz. Ancaq təbii ki, sizdə mikroproqramın mənbə kodları və ya hazır proqram təminatı yoxdur və siz sıfırdan proqram təminatını tamamilə inkişaf etdirməli və sazlamalı olacaqsınız. Bu, cihazın (sxem) elektron komponentinin surətinin çıxarılması ilə müqayisədə çoxlu pul və vaxt sərf etməli olacaq. Peşəkar xidmətlərimizdən istifadə edərək cihazın hazırlanması üçün həm pula, həm də vaxtınıza qənaət etmiş olacaqsınız. Qurğunun və ya onun elektrik dövrəsinin olması halında biz onun işinin alqoritmini və mikroproqramın mətnini C və ya Assembler proqramlaşdırma dilində tam bərpa edə bilərik.
Biz müştərinin tələbi ilə onun cihazını təmir etmək və ya mikroproqramın alqoritmi ilə tanış olmaq üçün bütün mikroproqramları (mikroproqramları) oxuyuruq. Mikroproqramın qeyri-qanuni yayılmasına və ya onunla və ya onun köməyi ilə edilən digər hərəkətlərə görə bütün sonrakı məsuliyyət tamamilə müştərinin üzərinə düşür.
Şirkətimiz Rusiya Federasiyasının ərazisində fəaliyyət göstərir, ona görə də aşağıda qanundan bir sitat verilmişdir. Digər ölkələrin qanunvericiliyi də oxşar mövqe bildirir.
Rusiya Federasiyasının Mülki Məcəlləsinin 1280-ci maddəsi. "Kompüter proqramlarının və verilənlər bazalarının sərbəst surətdə çıxarılması. Kompüter proqramlarının dekompilyasiyası".
2. Kompüter proqramının nüsxəsinə qanuni olaraq sahiblik edən şəxsin ideya və prinsiplərini müəyyən etmək üçün hüquq sahibinin razılığı olmadan və əlavə haqq ödəmədən belə proqramın fəaliyyətini öyrənmək, araşdırmaq və ya sınaqdan keçirmək hüququ vardır. kompüter proqramının hər hansı elementi əsasında bu maddənin 1-ci bəndinin 1-ci yarımbəndində nəzərdə tutulmuş hərəkətləri yerinə yetirməklə.
3. Kompüter proqramının nüsxəsinə qanuni olaraq malik olan şəxs hüquq sahibinin razılığı olmadan və əlavə haqq ödəmədən obyekt kodunu çoxaltmaq və mənbə mətnə çevirmək (kompüter proqramının nüsxəsini çıxarmaq) və ya başqasına göstəriş vermək hüququna malikdir. Bu şəxs tərəfindən müstəqil olaraq hazırlanmış kompüter proqramının dekompilyasiya olunan proqramla qarşılıqlı əlaqədə ola bilən digər proqramlarla qarşılıqlı fəaliyyətinə nail olmaq üçün lazım olduqda bu hərəkətləri yerinə yetirmək ...
Əlavə üç səviyyəli qorunma məlum üsullardan istifadə edərək mikroproqramın (firmware) oxunmasının mümkünsüzlüyü üçün şərait yaratmaq üçün nəzərdə tutulmuşdur. Buraya birdən üç səviyyəyə qədər qorunma daxil ola bilər: qutunun açılmasından qorunma, proqramçının oxumaq üçün istifadə etdiyi ayağın gizli sınması, oxumaq üçün istifadə edilən ayaq idarəetmə məntiqinin gizli çipdən çıxarılması.
Birinci səviyyə, kristala daxil olmağa imkan verməyən turşulara və həlledicilərə davamlı odadavamlı polimerdir.
İkinci səviyyə proqramçının xüsusi bahalı alətlər olmadan oxumasını qeyri-mümkün edir.
Üçüncü səviyyə ikinciyə bənzər bir funksiyanı yerinə yetirir, lakin eyni zamanda daxili təbəqələrdə idarəetmə məntiqinin çip üzərində bərpası praktiki olaraq mümkün deyil və ya çox bahalı avadanlıq tələb edir.
Nəzərə alsaq ki, əksər hallarda adi zavod mühafizəsi asanlıqla keçilir, bir çox bahalı və mürəkkəb qurğular üçün əlavə mühafizə intellektual fəaliyyətin bəhrələrinin üçüncü şəxslərin əlinə keçməsi ilə bağlı maddi itkilərin qarşısını almaq üçün son dərəcə zəruri tədbirdir.
Bu halda, bizim əlavə qorumamızı quraşdırmadan əvvəl, əsas proqram olmadan yalnız yükləyicini yandıra bilərsiniz. Əlavə qoruma quraşdırdıqdan sonra siz artıq əsas yaddaşı proqramlaşdıra bilərsiniz. Üstəlik, əsas proqramı yükləmək üçün yükləyici standart proqramlaşdırma üçün istifadə olunan əsas interfeysdən başqa hər hansı digər interfeysdən istifadə etməlidir, çünki əlavə qorumamızı quraşdırdıqdan sonra əsas interfeys deaktiv ediləcək. Adətən yükləyicinin özü kopyalamaq üçün maraqlı deyil. Bootloader olaraq siz özünüzdən istifadə edə və ya mikrokontroller istehsalçısının nümunələrindən dəyişdirə bilərsiniz.
Bu Arduino klonu ST-Link və ya USB-UART adapteri kimi xarici komponentlərdən istifadə etmədən USB vasitəsilə proqram təminatını yükləməyə imkan verən xüsusi yükləyici təklif edir.
Bu gün mənə CooCox altından və stm32duino olmadan çılpaq nəzarətçi ilə işləməli oldum. Amma problem buradadır. Bu yükləyicidən tökülən bir lampa ilə sadə bir flaşör belə işləmir.
Gəlin bunu anlayaq. Bəlkə də mənim hesablamalarım kiməsə bayağı görünəcək. Ancaq mən STM32 kontrollerlərini öyrənməyə yenicə başlayıram və problem tapmaq üçün ən azı yarım gün öldürdüm. Birdən bu məqalə kiminsə inkişaf vaxtını azaldacaq.
ST-Link və digər debuggerlərə qarşı heç bir şeyim yoxdur. Amma mənim hazır cihazımda bu olmayacaq, amma mütləq USB olacaq. Niyə USB vasitəsilə proqram təminatını yeniləmək imkanını dərhal qoymayasınız? Şəxsən mən bu üsulu rahat hesab edirəm. Xüsusilə məndə hələ də enerji və USB seriyasının təmin olunduğu bir kabel var.
Yükləyicinin necə işlədiyini görək. Başlamaq üçün, AVR nəzarətçiləri nümunəsində. Niyə onu xatırladım? Arduino-dan köçürdüm və bilinçaltı olaraq eyni davranışı gözləyirdim. Ancaq STM32-də hər şey fərqli oldu. Buna görə də bu iki mikrokontroller arasındakı fərq haqqında danışmaq istəyirəm.
Belə ki. AVR ATMega mikro nəzarət cihazlarında, flaşın sonuna yaxın yükləyici üçün müəyyən miqdarda yaddaş saxlanıla bilər. Qoruyucu bitlərdən istifadə edərək, proqramın hansı ünvandan başlayacağını idarə edə bilərsiniz. Bootloader yoxdursa, proqram 0x0000 ünvanından başlayır. Yükləyici varsa, o, başqa bir ünvandan başlayır (məsələn, 0x3C00 ilə ATMega32-də, yükləyicinin ölçüsü 2k-a təyin edilibsə).
Yükləyici öz işini gördükdən sonra 0x0000 ünvanından idarəetməni əsas proqrama ötürür. Bunlar. proqram həmişə 0x0000 ünvanından başlayır. Kompilyator və əlaqələndirici kodun ünvan sahəsinin əvvəlində yerləşəcəyi ehtimalı ilə işləyir.
STM32 mikro nəzarətçilərində hər şey fərqlidir. Bütün proqramlar 0x0800000 ünvanından başlayır. Bootloader xüsusi bir şey deyil. Bu, eyni başlanğıc ünvanından başlayan eyni proqramdır. Əməliyyat zamanı yükləyici proqram təminatını qəbul edə bilər (USB və ya UART vasitəsilə, USB flash sürücüsündən oxumaq, peykdən qəbul etmək, onu alt kosmosdan almaq, nə olursa olsun ...) və onu yükləyicinin özündən daha yüksək ünvanlara yaza bilər. Və təbii ki, işinizin sonunda nəzarəti əsas proqrama köçürün.
Bütün bunlar nəzəriyyə ilə bağlıdır. Gəlin məşqə keçək. Aşağıda USB yükləyicisini STM32F1xx seriyalı mikrokontrollerlərə və bəlkə də başqalarına necə bağlamaq barədə addım-addım təlimat verilmişdir.
Bununla belə, dövrə ilə bağlı bəzi məhdudiyyətlər var. Burada təəssüf ki, güclü deyiləm. YTP PA12 portu (aka USB D+) üçün 1,5k açılan rezistora ehtiyac duyur. Bu, yükləyiciyə lazımi vaxtda USB-yə qoşulub onu ayırmağa imkan verir.
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x2000);
YENİLƏNİB 05/17/2018: STM32Cube-un müasir versiyasında NVIC_SetVectorTable() funksiyası yoxdur. Bunun əvəzinə, system_stm32f1xx.c faylında VECT_TAB_OFFSET təyinini düzəldə bilərsiniz (və ya başqa mikro nəzarətçi üçün oxşar)
"maple_upload.bat" COM20 2 1EAF:0003 "Path\To\Firmware.bin"
COM20 əvəzinə mikrokontrolörün qoşulduğu portu əvəz etməlisiniz.
Doldurucu çox incə bir şeydir, nisbi yolları sevmir. ona görə də proshivkaya gedən yol tam şəkildə göstərilməlidir.
1EAF: 0003 VID və PID-dir
2, AltID parametridir, bu, proqram təminatının 0x08002000 (oxu) ilə yüklənməsinin lazım olduğunu göstərir.
Bu, narahatlığa səbəb ola bilər. Mikrokontroller bağlanır və asılırsa, o, artıq portu dinləmir. Buna görə də, o, açar ardıcıllığını eşidə bilmir və yükləyiciyə yenidən başlaya bilmir. Sonra yalnız kömək etmək üçün sıfırlayın.
Hamısı budur. Ümid edirəm ki, məqaləm yükləyicinin STM32-də necə işlədiyinə və USB portu vasitəsilə proqram təminatının necə yüklənə biləcəyinə işıq salacaq. Təəssüf ki, giriş həddi hələ də yüksəkdir, amma birdən mənim məqaləm kiməsə onu dəf etməyə kömək edəcək.
Bu gün biz stm32-də proqram təminatını sərin hakerlər tərəfindən oxunmaqdan qoruyacağıq. Rezin çəkməmək üçün burada bir kod parçası var:
#ifdef NDEBUG if (FLASH_GetReadOutProtectionStatus() == RESET) ( FLASH_Unlock(); FLASH_ReadOutProtection(ENABLE); FLASH_Lock(); ) #endif
Təxmin etdiyiniz kimi, parça stm kitabxanasından istifadə edir. Belə bir kod parçasından istifadə etmək çox rahatdır - nəzarətçi ilk başlanğıcda öz mühafizəsini təyin edir və ilk başlanğıcı proqram təminatından sonra təşkil etmək asandır. Budur, qoruyucuların zülmündən azadlıq!
Bəli, "kitabxana və registrlərə birbaşa giriş" haqqında holivor haqqında bilirəm. Burada mənim mövqeyim belədir - əgər sizə yüksək sürət lazımdırsa və ya yaddaş çox az qalıbsa, ancaq registrlərə birbaşa çıxış lazımdır. Sürət vacib deyilsə və çoxlu yaddaş varsa, kitabxanadan istifadə etmək daha yaxşıdır - bu şəkildə proqram daha sürətli və daha oxunaqlı yazılır.
Qorunmanı aradan qaldırmaq üçün bizə st-link yardım proqramı lazımdır. Siz onu yükləyə bilərsiniz.
Proqramı işə salın və bu elementi seçin və ya sadəcə ctrl-b düyməsini basın:
"Oxumaqdan qorunma vəziyyəti, off seçin" sahəsində. Və Tətbiq düyməsini basın:
Qoruma biti ilə birlikdə bütün yaddaş da silinir:
Özünüzü qoruyun, biz təhlükəsiz yerləşdirmə tərəfdarıyıq.
Yandırmağın ən asan və ən sərfəli yolu STM32- istifadə etməklə yükləyici, bu yazıda lövhənin nümunəsindən istifadə edərək bunu necə edəcəyimizi nəzərdən keçirəcəyik miniSTM32F103V.
Əvvəlcə nə olduğunu anlayaq yükləyici və ya nə adlanırsa yükləyici. Yükləyici- bu sadəcə yaddaşın müəyyən bölməsində saxlanılan və flaş mikrokontrolörün üzərinə yaza bilən proqramdır. Çipin istehsalı zamanı tikilir və heç bir şəkildə dəyişdirilə bilməz. Mikrokontrolörün yaddaşın bu bölməsinə daxil olması üçün siz çıxış etməlisiniz BOOT0 gücə qədər çəkin və çıxarın BOOT1 yerə. Lövhədə bu iki sancaq usb konnektorunun yaxınlığında yerləşir və çəkilmə jumpers istifadə edərək həyata keçirilir.
Aşağıda mikrokontrolörün resetdən sonra hansı yaddaş sahəsindən işə salınacağını təyin edən cədvəl var BOOT0 Və BOOT1.
Adapteri bağlayırıq usb uart kompüterə və hansı çipdə hazırlandığından asılı olaraq CP2120 və ya FT232, müvafiq sürücüləri quraşdırın. Bundan sonra sistemdə COM_PORT kimi müəyyən edilməlidir.