- СПИ у СТМ32Ф103Ц8
- СПИ игле у Ардуину
- Компоненте потребне
- Кружни дијаграм и везе за СТМ32 СПИ лекцију
- СТМ32 СПИ програмирање
- Објашњење мастер СТМ32 СПИ програмирања
- Објашњење програмирања за славе Ардуино СПИ
У нашим претходним водичима научили смо о СПИ и И2Ц комуникацији између две Ардуино плоче. У овом упутству ћемо заменити једну Ардуино плочу плочом Блуе Пилл која је СТМ32Ф103Ц8 и комуницираћемо са Ардуино плочом помоћу СПИ магистрале. У овом примеру СТМ32 СПИ, користићемо Ардуино УНО као славе и СТМ32Ф103Ц8 као мастер са два 16Кс2 ЛЦД дисплеја међусобно спојена засебно. Два потенциометра су такође повезана са СТМ32 (ПА0) и Ардуино (А0) да би се одредиле вредности слања (0 до 255) од мастер-славе-а и славе-мастер-а променом потенциометра.
СПИ у СТМ32Ф103Ц8
Упоређујући СПИ сабирницу у Ардуино и СТМ32Ф103Ц8 плочу Блуе Пилл, СТМ32 има 2 СПИ сабирнице, док Ардуино Уно има једну СПИ сабирницу. Ардуино Уно има АТМЕГА328 микроконтролер, а СТМ32Ф103Ц8 има АРМ Цортек-М3 што га чини бржим од Арудино плоче.
Да бисте сазнали више о СПИ комуникацији, погледајте наше претходне чланке
- Како се користи СПИ у Ардуину: Комуникација између две Ардуино плоче
- СПИ комуникација са ПИЦ микроконтролером ПИЦ16Ф877А
- СПИ комуникација путем Бит Бангинг-а
- Детектор цурења из резервоара за топлу воду Распберри Пи помоћу СПИ модула
- ЕСП32 сат у реалном времену помоћу модула ДС3231
СТМ32 СПИ пинови СТМ32Ф103Ц8
СПИ линија1 | Пин у СТМ32Ф103Ц8 |
МОСИ1 | ПА7 или ПБ5 |
МИСО1 | ПА6 или ПБ4 |
СЦК1 | ПА5 или ПБ3 |
СС1 | ПА4 или ПА15 |
СПИ Лине2 | |
МОСИ2 | ПБ15 |
МИСО2 | ПБ14 |
СЦК2 | ПБ13 |
СС2 | ПБ12 |
СПИ игле у Ардуину
СПИ линија |
Пин у Ардуину |
МОСИ |
11 или ИЦСП-4 |
МИСО |
12 или ИЦСП-1 |
СЦК |
13 или ИЦСП-3 |
СС |
10 |
Компоненте потребне
- СТМ32Ф103Ц8
- Ардуино
- ЛЦД 16к2 - 2
- 10к потенциометар - 4
- Бреадбоард
- Повезивање жица
Кружни дијаграм и везе за СТМ32 СПИ лекцију
Табела испод приказује прикључке за контакт за СТМ32 СПИ комуникацију са Ардуином.
СПИ Пин |
СТМ32Ф103Ц8 |
Ардуино |
МОСИ |
ПА7 |
11 |
МИСО |
ПА6 |
12 |
СЦК |
ПА5 |
13 |
СС1 |
ПА4 |
10 |
Табела у наставку приказује пинове повезане одвојено за два ЛЦД-а (16к2) са СТМ32Ф103Ц8 и Ардуино.
ЛЦД пин |
СТМ32Ф103Ц8 |
Ардуино |
ВСС |
ГНД |
ГНД |
ВДД |
+ 5В |
+ 5В |
В0 |
До центра за потенциометар ПИН за ЛЦД контраст |
До центра за потенциометар ПИН за ЛЦД контраст |
РС |
ПБ0 |
2 |
РВ |
ГНД |
ГНД |
Е. |
ПБ1 |
3 |
Д4 |
ПБ10 |
4 |
Д5 |
ПБ11 |
5 |
Д6 |
ПЦ13 |
6 |
Д7 |
ПЦ14 |
7 |
А. |
+ 5В |
+ 5В |
К. |
ГНД |
ГНД |
Важно:
- Не заборавите да повежете Ардуино ГНД и СТМ32Ф103Ц8 ГНД заједно.
СТМ32 СПИ програмирање
Програмирање је слично Ардуино коду. Исти
У овом примеру СТМ32 СПИ, користићемо Ардуино УНО као славе и СТМ32Ф103Ц8 као мастер са два 16Кс2 ЛЦД дисплеја међусобно спојена засебно. Два потенциометра су такође повезана са СТМ32 (ПА0) и Ардуино (А0) да би се одредиле вредности слања (0 до 255) од мастер-славе-а и славе-мастер-а променом потенциометра.
Аналогни улаз се врши на СТМ32Ф10Ц8 пину ПА0 (0 до 3,3 В) окретањем потенциометра. Тада се ова улазна вредност претвара у аналогну у дигиталну вредност (0 до 4096) и та дигитална вредност се даље пресликава на (0 до 255), јер одједном можемо послати само 8-битне (бајтне) податке путем СПИ комуникације.
Слично томе на Славе страни узимамо аналогну улазну вредност на Ардуино пин А0 од (0 до 5В) помоћу потенциометра. И поново се ова улазна вредност претвара у аналогну у дигиталну вредност (0 до 1023) и ова дигитална вредност се даље пресликава у (0 до 255)
Овај водич има два програма, један за мастер СТМ32 и други за славе Ардуино. Комплетни програми за обе стране дати су на крају овог пројекта са демонстрацијским видео записом.
Објашњење мастер СТМ32 СПИ програмирања
1. Пре свега морамо укључити СПИ библиотеку за коришћење СПИ комуникационих функција и ЛЦД библиотеку за употребу ЛЦД функција. Такође дефинишите ЛЦД пинове за ЛЦД 16к2. Овде сазнајте више о повезивању ЛЦД-а са СТМ32.
#инцлуде
2. У воид подешавању ()
- Покрените серијску комуникацију брзином преноса 9600.
Сериал.бегин (9600);
- Следећа започиње СПИ комуникација
СПИ.бегин ();
- Затим поставите разделник сата за СПИ комуникацију. Поставио сам разделник 16.
СПИ.сетЦлоцкДивидер (СПИ_ЦЛОЦК_ДИВ16);
- Следеће поставите СС пин ХИГХ пошто нисмо започели никакав пренос на славе ардуино.
дигиталВрите (СС, ХИГХ);
3. Ин воид лооп ()
- Пре слања било које вредности на славе потребно је да НИЖЕ вредност за одабир славе да започнемо пренос на славе са мастер-а.
дигиталВрите (СС, ЛОВ);
- Затим прочитајте аналогну вредност са матичног СТМ32Ф10Ц8 ПОТ-а причвршћеног на пин ПА0.
инт пот = аналогРеад (ПА0);
Затим претворите ову вредност у један бајт (0 до 255).
бајт МастерСенд = мапа (пот, 0,4096,0,255);
- Ево важног корака, у следећој изјави шаљемо претворену вредност ПОТ-а ускладиштену у Мастерсенд променљиву на славе Ардуино, а такође примамо вредност од славе Ардуино-а и чувамо је у мастер- варијабли.
Мастерецеиве = СПИ.трансфер (Мастерсенд);
- Следеће приказују оне примљене вредности из славе ардуина са кашњењем од 500 микросекунди, а затим континуирано примају и приказују вредности.
Сериал.принтлн ("Славе Ардуино за Мастер СТМ32"); Сериал.принтлн (МастерРецеиве лцд.сетЦурсор (0,0); лцд.принт ("Мастер: СТМ32"); лцд.сетЦурсор (0,1); лцд.принт ("СалвеВал:"); лцд.принт (МастерРецеиве делаи) (500); дигиталВрите (СС, ХИГХ);
Напомена: Користимо сериал.принтлн () за преглед резултата у Сериал Мотор оф Ардуино ИДЕ.
Објашњење програмирања за славе Ардуино СПИ
1. Исто као и мастер, пре свега морамо укључити СПИ библиотеку за употребу И2Ц комуникационих функција и ЛЦД библиотеку за употребу ЛЦД функција. Такође дефинишите ЛЦД пинове за ЛЦД 16к2.
#инцлуде
2. У воид подешавању ()
- Почињемо серијску комуникацију брзином преноса 9600.
Сериал.бегин (9600);
- Испод изјава поставља МИСО као ИЗЛАЗ (мора послати податке Мастер ИН-у). Дакле, подаци се шаљу путем МИСО-а Славе Ардуино-а.
пинМоде (МИСО, ИЗЛАЗ);
- Сада укључите СПИ у подређеном режиму помоћу СПИ контролног регистра
СПЦР - = _БВ (СПЕ);
- Затим Укључите прекид за СПИ комуникацију. Ако се подаци добију од главног претплатника, позива се рутина услуге прекида, а примљена вредност узима се из СПДР-а (СПИ регистар података)
СПИ.аттацхИнтеррупт ();
- Вредност из мастер-а преузима се из СПДР-а и чува у Славерецеивед променљивој. Ово се дешава у следећој функцији Прекидна рутина.
ИСР (СПИ_СТЦ_вецт) {Славерецеивед = СПДР; примљено = тачно; }
3. Следећа у воид петљи ()
- Очитајте аналогну вредност са Славе Ардуино ПОТ-а причвршћеног на пин А0.
инт пот = аналогРеад (А0);
- Претворите ту вредност у један бајт у 0 до 255.
Славесенд = мапа (пот, 0,1023,0,255);
- Следећи важан корак је слање претворене вредности на главни СТМ32Ф10Ц8, па ставите вредност у СПДР регистар. СПДР регистар се користи за слање и примање вредности.
СПДР = Славесенд;
- Затим прикажите примљену вредност ( СлавеРецеиве ) од Мастер СТМ32Ф103Ц8 на ЛЦД екрану са кашњењем од 500 микросекунди, а затим непрекидно примите и прикажите ту вредност.
лцд.сетЦурсор (0,0); лцд.принт ("Славе: Ардуино"); лцд.сетЦурсор (0,1); лцд.принт ("МастерВал:"); Сериал.принтлн („Мастер СТМ32 то Славе Ардуино“); Сериал.принтлн (СлавеРецеивед); лцд.принт (СлавеРецеивед); кашњење (500);
Би ротирајући потенциометар на једној страни, можете видети различите вредности на ЛЦД на другу страну:
Дакле, овако се одвија СПИ комуникација у СТМ32. Сада можете спојити било који СПИ сензор са СТМ32 плочом.
Комплетно кодирање Мастер СТМ32 и Славе Ардуино дато је у наставку са демонстрацијским видео записом