Elektroda.pl
Elektroda.pl
X
PCBway
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[STM32][C] - Poradnik dla początkujących (bez bibliotek)

szczywronek 11 Gru 2015 23:31 57540 134
  • #61
    Arni85
    Poziom 12  
    Piękny poradnik. Masz fajny styl pisania, jakbym rozmawiał z kumplem.

    No i każdy rozdział ma łacińskie motto. Ładnie.
  • PCBway
  • #62
    szczywronek
    Poziom 27  
    @Arni85 - dzięki :)

    Jak co weekend nastąpiła podmiana załączników. Nie dotarły do mnie żadne nowe zgłoszenia o błędach, więc musiałem je sobie znaleźć sam. Z pomocą przyszedł ARM, który nieco zmienił organizację plików w archiwum CMSIS - największa zmiana dotyczy właśnie tego. Poza tym, w sumie, nic ciekawego :]

    -------

    Święta świętami, ale wielbicieli errat nie mogłem zawieść :) Zmiany dotyczą:

    1) dopisków (przy nazwach rozdziałów) określających jakiego mikrokontrolera dany rozdział dotyczy - próbuję to jakoś logicznie uporządkować, bo na razie było trochę chaotycznie. W ogóle sam się gubię w tych dopiskach, co wyraźnie wskazuje, że ten system nie jest zbyt przemyślany i intuicyjny. Na razie musi zostać. Szczególnie, że nadchodzi mała rewolucja, która nada dopiskom nieco większy sens ;) Także... coś tam się pozmieniało i jest w tym jakiś sens (nawet jeśli jeszcze go nie widać)...

    2) bit bandingu - nauczyłem się czegoś nowego to i w Poradniku przybyło. Dostało się głównie rozdziałom 4.2 i 4.6.

    Wesołego świątecznego nastroju!

    ------- (11.01.2016)

    Trzy tygodniowa cisza w kwestii Poradnika bynajmniej nie oznacza, że przestał się rozwijać. Przed świętami odwiedził mnie taki postawny jegomość. Przyjechał wielkim wozem, miał czapkę, brodę, ciepły płaszcz i worek pełen paczek... i napis DHL na plecach :] Dzięki niemu znalazłem pod choinką, pośród zestawów kosmetyków (o których marzyłem skrycie przez cały rok), wyczekiwaną, białą śnieżynkę o nazwie Nucleo-F334R8. W ostatnim "wpisie" wspomniałem o tym, że "nadchodzi mała rewolucja" - no to oto nadeszła - niniejszym ogłaszam, że Poradnik od wersji 1.8 "wspiera" nowy hardware :D

    A konkretniej:
    - na razie tylko istniejące rozdziały Poradnika zostały uzupełnione o opisy F334, nowe peryferia (m.in. wzmacniacz operacyjny, komparator, timer HRTIM, czujnik dotyku) muszą poczekać
    - uważam, że nie ma sensu powtarzać n-ty raz tych samych opisów (no i nie specjalnie mam na to ochotę), toteż rozdziały dotyczące F334 są mniej "wylewne" od pozostałych
    - spis wszystkich zmian, jak zwykle, znajduje się w Errato-Changelogu, tym razem ma on raptem 67 pozycji przy czym większość z nich wynika z poszerzenia Poradnika o F334:

    - około 35 zmian to zmiany typu: dodano nowy rozdział, opis, akapit, kolumnę tabeli, fragment, kropkę w wypunktowaniu, itp...
    - około 22 zmian to zmiany w stylu: zmieniono "F429" na "F334 i F429"

    Numery zmian Errato-Changelogu nie wynikające tylko i wyłącznie z dodania F334 zaznaczone są wytłuszczoną czcionką (zmiany nr. 3, 11, 18, 22, 23, 26, 30, 33, 36).

    No to tyle miałem do powiedzenia, owocnej lektury :)
  • Pomocny post
    #63
    qaz88
    Poziom 12  
    Jestes moim idolem! Moim zdaniem powinienes to wyslac do jakiegos BTC i opublikowac bo napewno nie jedna osoba by chetnie nabyla taka ksiazke (w tym ja)

    Z takich drobnych uwag to sposób liczenia baudrate dla uarta. Ten wzór na liczenie mantissa i fraction poprawia dokładność ustawionego baudratu chociaż tak się akurat złożyło (najprawdopodobniej nie przypadkowo) że ustawiając standartowe wartości typu 9600 115200 itd to wyniki będą często takie same jak z twoim wzorem zegar/baudrate. Ale spróbuj ustawić niestandartową wartość lub jeszcze lepiej bardzo szybką transmisje to się okaż że te wzory są stety/niestety przydatne a nawet obowiązkowe (przy oversampling na 8)

    A jakbyś sie kiedyś zastanawiał co można dodać z przydatnych rzeczy to może obsługa float-ów na Cortex M4 i jakichś prostych funkcji z CMSIS? Takie np sin czy cos by się bardzo przydały w niejednym projekcie.
  • #65
    qaz88
    Poziom 12  
    To tylko przykład. Tam jest wiele fajnych funkcji które tylko czekają aby z nich skorzystać. Np. FFT albo biblioteka obsługi wyświetlacza graficznego. Tego tak łatwo samemu nie napiszesz. No na upartego da sie ale po co :D
  • #66
    szczywronek
    Poziom 27  
    @qaz88 :) To jesteś jak na razie drugą osobą, która się zadeklarowała, że to kupi :D

    $$- F429
    - OVER8 = 1
    - fplck = 84MHz
    - baudrate = 7,636Mbps

    div = \frac{2 * fplck}{baudrate} \approx 22$$

    Z prostego wzorku wychodzi 22, co daje dzielnik (po uwzględnieniu, że 4-ry ostatnie bity to część ułamkowa) - 1,375 - dokładnie to samo podaje tabelka w RM dla F429. Policzyłem kilka wartości i jakoś nie mogę trafić na błędy (porównuję wyniki z tabelkami z RMów). Jak możesz to proszę podrzuć błędogenną konfigurację.

    Na listę rzeczy "do poprawki", "do rozwinięcia", "do dodania", itd... to już mam osobny dokument :) Aktualnie na pierwszym miejscu listy rzeczy do dodania są nowe układy z F334 - komparator, wzmacniacz, HRTIM i przyciski dotykowe (to sobie zostawiłem na koniec, bo wydaje się najciekawsze). Poza tym na liście jest (wspomniane przez Ciebie) FPU, I2C, para rozkazów LDREX/STREX. Do tego chodziło mi po głowie dopisanie rozdziału z "obowiązkowymi projektami" typu obsługa ds18b20, hd44780 itp. FFT to chyba za wysoki próg jak dla mnie ;)
  • PCBway
  • #67
    qaz88
    Poziom 12  
    Moja konfiguracja z zycia wzieta to ostatnio mialem ustawic baudrate 6Mbode/s przy zegarze 84Mhz na USART1. Prze oversample 16 sie nie da bo on dalby najwyzej 5.25MB/s a przy oversampling na 8 trzeba ustawic BRR na 0x34 czyli 3x8+4=28(dzielnik) przy wzorze zegar/baudrate daloby nam 0xE lub 0x1C(przy przemnozeniu przez 2) czyli zle. Ale troche mi to zajelo aby znalezc ten blad u mnie

    Super, w takim razie czekam na nowe wersje poradnika. Dzieki niemu funkcja ktora 2 lata temu pisalem na SPL i zajela mi pare tygodni teraz po zrobieniu jej od nowa na rejestrach zajela mi doslownie jeden dzien :)
  • #68
    szczywronek
    Poziom 27  
    qaz88 napisał:
    przy oversampling na 8 trzeba ustawić BRR na 0x34
    Poddaję się - nie wiem skąd ta wartość (0x34) :?: Metodą "prostego dzielenia", tak jak piszesz, wychodzi 0x1c (28). Dla weryfikacji tej wartości "zgrzeszyłem" i zainstalowałem CubeMX - wygenerowałem inicjalizację UARTu dla F4, baudrate=6M, zegar=84MHz. Kod wygenerowany przez Cube też zapisuje do BRR wartość 28, tylko oblicza ją nieco pokrętnie :-? .

    Jakby kogoś interesowało, to wrzucam "wycięty" kawałek tego co wypluł CubeMX (definicje). Nie chciało mi się tego analizować na piechotę, więc całość wylądowała w CManiaku - stąd printf.
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #69
    qaz88
    Poziom 12  
    Przy oversampling 16 wzor na dzielnik to mantissa*16+fraction
    przy oversampling 8 wzor na dzielnik to mantissa*8+fraction (i wtedy nie mozna uzyc 3-ciego bitu z rejestru BRR)
    Pierwsze 4 bity to fraction a reszta to mantissa. A wiec 0x34 = 3 * 8 + 4 = 28. A 84/28=3MHz=6MBodow

    Jeszcze raz to wszystko rozpisalem i wszystko jest juz jasne. Wniosek taki ze ten prosty wzor na dzielenie bedzie dzialac zawsze przy oversampling na 16 (czyli ten standartowy) - tak sie dzieje poniewaz czesc fraction ma wtedy 4 bity i idealnie dopelnia ulamek z mianownikiem 16.
    Przy oversampling na 8 mozna uzyskac maksymalnie 2 razy wieksza predkosc ale powinno sie skorzystac z wyzej wymienionego wzoru. Sprawdzalem kilka razy na oscyloskopie i faktycznie tak dziala, ten opis z noty od STM jest poprawny ale fakt ze mocno zawily. Sorry za OffTop ale moze komus sie to przyda.

    PS. Nie bylo sie trzeba az tak poswiecac.. :O
  • #70
    ramrusazer
    Poziom 13  
    Planujesz dodać coś z serii L1xx ?, w sumie one są bardzo podobne do F334, pod wieloma względami cała nowa seria STMów, jest bardzo podobna.
    Co ciekawe np. wszystkie procesory np. na Nucleo są zamienne, tj. w tych samych obudowach zyskujemy możliwość przeskakiwania po rodzinach, wersjach, bez potrzeby przeprojektowania PCB.

    PS. Ja to bym nawet dwie książki kupił, co by nie nosić, między domem, a pracą ;).
  • #71
    tadzik85
    Poziom 38  
    ramrusazer napisał:
    Planujesz dodać coś z serii L1xx ?, w sumie one są bardzo podobne do F334, pod wieloma względami cała nowa seria STMów, jest bardzo podobna.
    Co ciekawe np. wszystkie procesory np. na Nucleo są zamienne, tj. w tych samych obudowach zyskujemy możliwość przeskakiwania po rodzinach, wersjach, bez potrzeby przeprojektowania PCB.

    PS. Ja to bym nawet dwie książki kupił, co by nie nosić, między domem, a pracą ;).


    Dziwne pytania.

    Spójrz na schemat nucleo. Tak pewne rzeczy rozwiązano zworkami. Nie zawsze można przejść z rodziny do rodziny ot tak.
    A czym się w ogóle mają się różnić różne rodziny STM?. We wszystkich od L0 do L4 od F0 do F7 masz 2 wersje uartu, 2 wersje I2C 2 wersje SPI. Wszędzie FSMC To samo tak na prawdę, co najwyżej jakaś funkcjonalność jest niedostępna.
    GPIO to samo nie licząc F1. SDIO i nowe SDMMC to to samo.
    Więc zachowanie przenośności o dziwo jest banalnie proste.

    L1 nie jest podobne do 334. Tu o dziwo są spore różnice. Na L w zasadzie robi się aplikacje low power, a 334 się do tego nie nadaje.

    Poza tym L1 oraz F1 umierają powoli, a o F2 to już nikt pewnie nie pamięta.
  • #72
    szczywronek
    Poziom 27  
    @qaz88 ok. Btw. w każdym RMie jest to opisane inaczej. W RM0364 (STM32F334) jest taki ładny przepis:
    RM0364 napisał:
    $$baud = \frac{2 \cdot f_{ck}}{USARTDIV} \hspace{8} (dla OVER8 = 1)$$

    USARTDIV is an unsigned fixed point number that is coded on the SARTx_BRR register.
    • When OVER8 = 0, BRR = USARTDIV.
    • When OVER8 = 1
    – BRR[2:0] = USARTDIV[3:0] shifted 1 bit to the right.
    – BRR[3] must be kept cleared.
    – BRR[15:4] = USARTDIV[15:4]


    qaz88 napisał:
    Sorry za OffTop
    Jaki offtop? :wink:

    @ramrusazer - na razie nie bardzo. Właśnie dlatego, że to wszystko jest podobne tak jak piszecie (Ty i tadzik85). Za pierwszym razem opisywanie np. liczników czy DMA było "wyzwaniem". Potem przy przesiadce z F1 na F4 też było ciekawie, bo np. DMA działało inaczej. Ale teraz opisywanie kolejnych mikrokontrolerów, których peryferia działają tak samo a różnią się pięcioma bitami na krzyż, jest już nieco nudne. Zresztą myślę, że widać to po samym Poradniku i tekstach w stylu "Generalnie wszystko działa podobnie. Doczytaj we własnym zakresie." :) Może za jakiś czas znowu mnie najdzie ochota na nową zabawkę, ale na razie chciałbym uzupełnić wspomniane braki i poprawić kilka niedociągnięć. To i tak zajmie kilka tygodni ;)
  • #73
    ramrusazer
    Poziom 13  
    tadzik85 napisał:

    Dziwne pytania.

    Spójrz na schemat nucleo. Tak pewne rzeczy rozwiązano zworkami. Nie zawsze można przejść z rodziny do rodziny ot tak.
    A czym się w ogóle mają się różnić różne rodziny STM?. We wszystkich od L0 do L4 od F0 do F7 masz 2 wersje uartu, 2 wersje I2C 2 wersje SPI. Wszędzie FSMC To samo tak na prawdę, co najwyżej jakaś funkcjonalność jest niedostępna.
    GPIO to samo nie licząc F1. SDIO i nowe SDMMC to to samo.
    Więc zachowanie przenośności o dziwo jest banalnie proste.

    L1 nie jest podobne do 334. Tu o dziwo są spore różnice. Na L w zasadzie robi się aplikacje low power, a 334 się do tego nie nadaje.

    Poza tym L1 oraz F1 umierają powoli, a o F2 to już nikt pewnie nie pamięta.


    Nie wiem czy oglądałeś w ogóle PDFy STM32L152, STM32F334, oraz innych procesorów na płytkach nucleo, zgodność pinowa jest w 100%.

    L152 to dosyć nowa kostka (ma 2-3lata) więc nie wiem skąd ten zarzut że L1xx umiera, chyba że mówisz o starych wersjach. O F2 nic nie pisałem, po za tym podobna jest kwestia F303, weszła nowa rodzina, której przedstawicielem jest właśnie F334, nie można porównywać i odnosić się teraz między rodzinami, bo od 2-3lat weszła całkiem nowa nomenklatura i nazewnictwo się zmieniło.

    szczywronek napisał:

    @ramrusazer - na razie nie bardzo. Właśnie dlatego, że to wszystko jest podobne tak jak piszecie (Ty i tadzik85). Za pierwszym razem opisywanie np. liczników czy DMA było "wyzwaniem". Potem przy przesiadce z F1 na F4 też było ciekawie, bo np. DMA działało inaczej. Ale teraz opisywanie kolejnych mikrokontrolerów, których peryferia działają tak samo a różnią się pięcioma bitami na krzyż, jest już nieco nudne. Zresztą myślę, że widać to po samym Poradniku i tekstach w stylu "Generalnie wszystko działa podobnie. Doczytaj we własnym zakresie." :) Może za jakiś czas znowu mnie najdzie ochota na nową zabawkę, ale na razie chciałbym uzupełnić wspomniane braki i poprawić kilka niedociągnięć. To i tak zajmie kilka tygodni ;)


    Rozumiem, tak chciałem tylko zauważyć, że od dłuższego czasu po zunifikowaniu rodzin, wiele spraw jest uproszczonych, nie ma takich różnic pomiędzy rodzinami jak kiedyś. Wide kwestia procesorów na Nucleo, gdzie są całkowicie zgodne Pinowo mimo że M0+, M3, M4, czy L1, L0, a bez problemów można je po prostu zamienić. Np. zaczynając projekt na L0, potrzebując większych/lepszych zasobów, można śmiało w to samo miejsce wsadzić wyższą rodzinę procesora.
  • #74
    tadzik85
    Poziom 38  
    ramrusazer napisał:
    Nie wiem czy oglądałeś w ogóle PDFy STM32L152, STM32F334, oraz innych procesorów na płytkach nucleo, zgodność pinowa jest w 100%.
    Zapewniona przez zwory. Dobrze się temu schematowi przejrzyj. W dodatku dla większych obudów na to bym nie liczył.
    ramrusazer napisał:
    nie można porównywać i odnosić się teraz między rodzinami, bo od 2-3lat weszła całkiem nowa nomenklatura i nazewnictwo się zmieniło.

    A co to ma do rzeczy? To, że dodali jakiś tam HRTIM nie decyduje o tym, że wszystko pozostałe jest inne.
    F1 na pewno, ale i L1 długo nie pociągnie, to moje zdanie, jakby co wybierać się będzie miedzy L0 a L4. Bo różnica w cenie między L4 a L1 jest znikoma.
  • #75
    ramrusazer
    Poziom 13  
    tadzik85 napisał:
    W dodatku dla większych obudów na to bym nie liczył.


    ramrusazer napisał:
    tj. w tych samych obudowach zyskujemy możliwość przeskakiwania po rodzinach


    Dlatego napisałem na samym początku w tych samych obudowach, co na nucleo. Te procesory są zgodne.
    Po za tym co ma do mojego pytania kwestia czy jakiś procesor jest w "umierającej" rodzinie?.

    Tyle Off topu z mojej strony.

    Po za tym pytanie było skierowane do kolegi piszącego poradnik, a nie wymagające zbędnej polemiki w temacie.
  • #76
    tadzik85
    Poziom 38  
    ramrusazer napisał:

    Dlatego napisałem na samym początku w tych samych obudowach, co na nucleo. Te procesory są zgodne.


    Tylko w zakresie zasilania jeśli już.
  • #77
    ramrusazer
    Poziom 13  
    tadzik85 napisał:
    Tylko w zakresie zasilania jeśli już.


    Niech kolega przyjrzy się dokładniej PDFom, STM32L152RE, STM32L053x6/x8, czy STM32F401, pinowo w obudowach LQFP64 są w 100% zgodne, nie trzeba zmieniać żadnych zworek na płytce nucleo.
  • #78
    tadzik85
    Poziom 38  
    ramrusazer napisał:
    tadzik85 napisał:
    Tylko w zakresie zasilania jeśli już.


    Niech kolega przyjrzy się dokładniej PDFom, STM32L152RE, STM32L053x6/x8, czy STM32F401, pinowo w obudowach LQFP64 są w 100% zgodne, nie trzeba zmieniać żadnych zworek na płytce nucleo.


    Wybierasz to co ci pasuje, a schemat mówi o tym jasno, że nawet różnice w zasilaniu istnieją.
  • #79
    ramrusazer
    Poziom 13  
    To chyba patrzymy na różne schematy ;).
  • Pomocny post
    #80
    szczywronek
    Poziom 27  
    Nowa wersja Poradnika gotowa do pobierania. Najważniejsze zmiany:

    - poprawiony rysunek pokazujący wyjścia w konfiguracji push-pull/open-drain
    - natchniony tym tematem (i podobnymi) dodałem krótką informację dotyczącą zmiany konfiguracji pinów wykorzystywanych przez debugger
    - w najnowszych Reference Manualach ST zmieniło nazwy "prędkości" wyjść GPIO (zrobili High Speed i Very High Speed zamiast Fast Speed i High Speed) - nowe nazwy zostały uwzględnione w Poradniku
    - w przykładowych programach zamieniłem bit-banding na klasyczny dostęp do rejestrów statusowych układów peryferyjnych. Chodzi o uniknięcie zagrożeń opisanych w rozdziale 4.6 (od wersji Poradnika 1.7). Dodatkowa lektura dla chętnych: STM32F0Discovery - Konflikt przerwań TIM2/TIM3
    - usunięcie błędnego rzutowania na uint16_t przy zapisie rejestru TIMx_SR w kilku listingach (lektura dodatkowa)
    - poprawiony program rozpędzający układ zegarowy w F429
    - dodany nowy rozdział:
    Spoiler:
    20. Komparator i wzmacniacz („Nec temere, nec timide”)
    20.1. Komparator analogowy (F334)
    20.2. Wzmacniacz operacyjny (F334)
  • #82
    ramrusazer
    Poziom 13  
    W kwestii ustawień GPIO dał bym jeszcze informację (szczególnie początkujący - jakim jestem ja, mogą się na to złapać).

    Istnieje pewien mały problem, mianowicie, jeżeli "prędkość" przełączania pinu ustawimy za nisko w stosunku do częstotliwości zmian na pinie, możemy w ogóle nie uzyskać zmian na pinie, albo bardzo dziwne stany (zależne od obciążenia, pojemność sondy oscyloskopowej ma znaczenie, a jeszcze bardziej to widać po podłączeniu np. analizatora stanów logicznych gdyż one mają pojemności na poziomie 500pF).

    Dlatego warto by dodać, że przy "zabawie" programowaniu na początku warto dać przynajmniej ustawienie Fast Speed. Bo np. jeżeli nie damy delay, czy opóźnienia to stany będą się zmieniać szybciej niż możliwości GPIO, przez co nawet oscyloskopem możemy nie zauważyć zmiany stanu.

    PS. Na F10x nie testowałem, jedynie na wersjach L152, F429i, F746
  • #83
    szczywronek
    Poziom 27  
    Dziękuję za sugestię. Dopisuję do listy "ToDo" ;) Próbowałem kiedyś uchwycić różnicę między przebiegiem na wyjściu "Low Speed" i "Full Speed". Niestety możliwości sprzętu, którym dysponuję (i wiedza nt. elektroniki), są na tyle ograniczone, że nic mi z tego nie wyszło.
  • #84
    ramrusazer
    Poziom 13  
    Bardzo duże znaczenie ma j.w pisałem pojemność samej sondy, na dobrej sondzie z tektronixa (pasmo 200MHz, 16pF) widać maleńkie "górki" w miejscach gdzie powinien się zmienić stan, przy lowspeed, przy middle pojawia się stan, ale zależnie od obciążenia, może go w ogóle nie być. Np. na nucleo PA5 (dioda LED) jest cisza.

    Znowu po podłączeniu analizatora ( w moim przypadku Acute pojemność wejściowa 500pF) można zapomnieć o jakiejkolwiek zmianie stanu.

    Niby taka pierdoła, a można się zdziwić. (czyt. stracić pół dnia na szukanie błędu w kodzie ;), czy podłączeniu ).
  • #85
    squeze
    Poziom 12  
    Póki co pochłaniam lekturę i wielkie dzięki za takie opracowanie (coś fantastycznego dla początkującego).
    W sumie to ten poradnik poniekąd zmusił mnie by przysiąść do STM32, w szafie leżały dwa discovery (kiedyś dostałem i zostawiłem na inne czasy).
    Twój poradnikowi to nijako latarnia prowadząca przez "czary mary i wiedza tajemna" związana z ARM (z poziomu laika). :)

    Co do uwag to na str. 85 jest przykład co prawda wyprzedzający nieco rozdziały ale używasz tam BitBandig do "zerowania" flagi w rejestrze PR w sumie sam wcześniej wspominasz że nie powinno się tego robić na rejestrach rc_w1 :)
  • #86
    szczywronek
    Poziom 27  
    Dziękuję za miłe słowa :) Co do uwagi: zostało to poprawione w wersji 1.9 (errata, tabela 9, pozycja 8) :D Niestety nie wyrobiłem się ze wszystkim za jednym zamachem, stąd zmiany rozbiły się na "kilka wersji".
  • #87
    Boulious
    Poziom 7  
    v1_9. Str.221
    "Swoją drogą w dokumentacji jest informacja, że nie łączy się memory to memory z direct mode. Tryb bezpośredni jest domyślnie włączony, ja go nie wyłączyłem... a i tak jakoś to działa. "
    RM0090 w opisie rejestru FIFO - Bit 2 DMDIS: Direct mode disable jest napisane:
    "This bit is set by hardware if the memory-to-memory mode is selected (DIR bit in DMA_SxCR are "10") and the EN bit in the DMA_SxCR register is '1' because the direct mode is not allowed in the memory-to-memory configuration."

    BTW:
    str. 106
    " Skonfigurujmy licznik tak, aby generował przerwanie zegarowe co 1s. "
    Chyba powinno być miganie diodą co 1s, bo UEV bedzię występowało z częstotliwością 2Hz?
  • #88
    ramrusazer
    Poziom 13  
    Jak by ktoś szukał mocno zoptymalizowanych kodów z przykładami opartych o CMSIS oraz robionych na rejestrach, polecam przykłady Snippets z strony ST

    http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/LN1898?sc=stm32snippets

    Przykłady są dla rodziny L0, F0, ale nic nie stoi na przeszkodzie przerobić sobie na inne, wystarczy tylko zmienić nagłówki, potem posiedzieć trochę nad RM i DS i mamy pod każdą rodzinę ST ;).
  • #89
    qaz88
    Poziom 12  
    No a ja nie do konca sie zgadzam. Napisanie takiego prostego programu z obsluga np timera z poradnikiem szczywronka przychodzi duzo latwiej i przy okazji sie czegos uczysz
    Jezeli ktos nie wie jak sie zabrac za "grzebanie w rejestrach" to i tak musi zrozumiec podstawy a nie kopiowac jak glupi i modyfikowac gotowce
    A jesli ktos juz to potrafi to napisanie takich prostych podstawowych programow zajmie mu mniej czasu niz samo sciaganie tych przykladow.
    Szczywronek ty sie smiejesz a ja serio mowie wez wyslij wstep i pierwszy rozdzial swojego poradnika (z malymi modyfikacjami) do BTC i czekaj na oferte cenowa. Mozesz jeszcze im podeslac link z elektrody jak wiele ludzi sobie chwali ten poradnik. Tu nawet nie chodzi o zarabianie kasy ale wpisanie sobie do CV ze napisales kiedys ksiazke ktora zostala opublikowana to juz naprawde cos :)
  • #90
    sepako
    Poziom 14  
    Wykorzystanie spi do obliczenia crc to ciekawy pomysł po napisaniu funkcji do obsługi crc wg. poradnika niestety funkcja dobrze liczyła tylko przy pierwszym przebiegu. Okazało się że przed kolejnym użyciem należy zresetować rejestry od CRC przez wyzerowanie i ustawienie bitu CRCEN w rejestrze SPI_CR1 (dotyczy F103) nie trzeba było też ustawiania wyjścia SPI_SCK jako alternatywne.