Wszystko masz ładnie wytłumaczone na stronie 707 (Master Mode). Może zegar za mały na I2C: The peripheral input clock frequency must be at least: 2 MHz in Standard mode 4 MHz in Fast mode Może nie nadajesz Start itp. Trudno powiedzieć pokaż więcej, a najlepiej skonfiguruj sam na rejestrach (jeśli tak nie masz) na podstawie tego rozdziału. EDIT....
Próbowałem zainkludować w pliku "komunikacja_I2C.c" to ---> "stm32f0xx_hal_i2c.h" Zainkluduj to w komunikacja_I2C.h
Sporo się namęczyłem, zanim ruszył mi slave transmitter w STM32F103. W 107 będzie tak samo. Po pierwsze zobacz do errat - tam między innymi napisali, że przerwanie i2c musi mieć najwyższy priorytet, bo inaczej się wiesza. Poza tym przykłady nie zadziałały mi od razu, a problemy mają też inni, o czym możesz poczytać na main.c // main.c main()...
Ok, zajrzałem do tego i przeoczyłeś kilka rzeczy: Adres to nie 0x4A tylko 0x94. Właściwie jest to 0x4A przesunięte o 1 bit w lewo (0x94) a ten LSB to jest bit R/!W. Czyli jak chcesz coś zapisać do kontrolera to trzeba wysyłać na adres 0x94, a jak czytać to 0x95 (czytać noty dokładnie! Poza tym jest to na schemacie napisane). Druga sprawa - kontroler...
Jeśli nie używa się USB czy ETH to, na początek, można sobie darować konfigurację zegara. Wszystko, poza ADC, będzie taktowane wewnętrznym 8MHz. STM mają na tyle stabilny generator, że UART będzie pracował poprawnie więc pomigać diodą czy komunikację przez UART, SPI, I2C można wypróbować.
Właśnie, jak sprawdzić zgodność tych wyświetlaczy z aktualnym? A sterownik można zbudować na bazie drv8353 z to.com. kod sterowania na STM, a sterowanie LCD też na STM i i2c komunikację między nimi. Kwestia czasu
Cześć Adres może i dobry, ale jest to adres 7 bitowy - bez uwzględnienia najmłodszego bitu zapisu. Trzeba tą wartość przesunąć w lewo o 1 bit i do tego ustawić lub nie bit zapisu: #define i2c_rw_bit 1 // transmit slave addres I2C1->DR = ( saddr << 1) | i2c_rw_bit ; No i przydałoby się dodać jakieś timeouty w tych pustych pętlach czekających...
[syntax=armasm]g_pfnVectors: .word _estack .word Reset_Handler .word NMI_Handler .word HardFault_Handler .word MemManage_Handler .word BusFault_Handler .word UsageFault_Handler .word 0 .word 0 .word 0 .word 0 .word SVC_Handler .word DebugMon_Handler .word 0 .word PendSV_Handler .word SysTick_Handler /* External Interrupts */ .word WWDG_IRQHandler /*...
Tak wlasnie jest o ile AF4 odpowiada I2Cx
Prędkość to 4kHz. Szokujące, czemu tak szybko? do współpracy stm32 z układem ina 219 poprzez magistralę i2c nie muszę przypadkiem stosować konwertera poziomów logicznych ? Przecież logika stm to 3 V. 1. Czemu zasilasz INA z innego napięcia niż STM? 2. I2C to magistrala wireand z podciąganiem rezystorem. Wyjścia są OC (OD). Zastanów sie czy używanie...
Twój od to zwykła rzeź. O i2c w STM pisano miliard razy. O i2c jest stosowna Aplications note wraz z kodem przykładowym.
Twierdzisz, że pisałeś z notką, a kod jasno pokazuje, że nawet do niej nie zajrzałeś. Kod ogólnie to same błędy, nie ma sensu ich wymieniać nawet. Całość do poprawki. Brak obsługi ACK. Niepoprawna obsługa wysyłania. Nawet jeśli przyjąć ze ilość danych zawsze będzie = 2. Na pewno nie odczytujesz z pod adresu 0x75.
W "Reference manual" masz podrozdział "22.6.8 I2C Clock control register (I2C_CCR)". Za pomocą tego rejestru ustawiasz parametry zegara w odniesieniu do częstotliwości magistrali.
Na początek wartości konfiguracyjne warto wziąć z przykładów a manuala. Po 2 obsługa I2c w STM jest skomplikowana, a twój kod wygląda na całkowicie uproszczony. Proponuję zapoznać się z odpowiednim aplication note. Opisano tam dokładnie algorytm obsługi I2C. Istotne jest dokładne zapoznanie się ze zdarzeniami EV i flagami jakie są ustawiane oraz metodą...
Przykładów z STM32 i I2C jest dość sporo - po prostu szukaj i oglądaj.
In case of a noisy environment in which unwanted bus errors can occur, it is recommended to implement a timeout to ensure that after the START control bit is set, the SB (start bit) flag is set. In case the timeout has elapsed, the peripheral must be reset by setting the SWRST bit in the I2C_CR1 control register. It should also be reset in the same...
Nie wiem, natomiast zależnie jakiej płytki używasz do STMa to czasem tam pojawiają się stabilizatory na 3.0V a nie 3.3V, a to już jest znacznie bliżej minimum producenta. Ja bym na Twoim miejscu spróbował dać 5V na linie I2C, STM nie ucierpi, a może to być źródłem problemu.
Czy budowałeś układ z komunikacją przez I2C na PCB? I czy opisane przez Ciebie problemy dalej występowały? Unikam I2C jak ognia w swoich konstrukcjach. Tak jak wspomniałem wcześniej, miałem przypadek wywalającego się I2C na płytce. Zakłócenie wygenerowane przez typowy przekaźnik 12V/230VAC 16A powodował absolutny zwis MCP23008... Myślisz, że to ogólnie...
Chyba tak jest, tutaj plik startup_stm32f10x_md.c [syntax=c]/** ****************************************... * (at)file startup_stm32f10x_md.c * (at)author Coocox * (at)version V1.0 * (at)date 12/23/2009 * (at)brief STM32F10x Medium Density Devices Startup code. * This module performs: * - Set the initial SP * - Set...
a czemu nie czekasz na koniec startu? [syntax=c]I2C1->CR1 |= I2C_CR1_START; while(I2C1->CR1 & I2C_CR1_START);[/syntax]
Cała trudność w I2C w STMach wynika z 2 powodów. Raczej z jednego - trzeba przeczytać rozdział w manualu, a komu by się chciało [; 4\/3!!
void i2c_send_start(u32 i2c) { I2C_CR1(i2c) |= I2C_CR1_START; } void i2c_send_stop(u32 i2c) { I2C_CR1(i2c) |= I2C_CR1_STOP; } void i2c_send_data(u32 i2c, u8 data) { I2C_DR(i2c) = data; } void i2c_send_7bit_address(u32 i2c, u8 slave, u8 readwrite) { I2C_DR(i2c)...
Piotrus_999 napisał: Jeżeli chodzi o F030 to mają ich od jednego w górę. Nawet 20sto nóżkowce. Piotrus_999 napisał: Wątek jest o 030 Jest jeden F030 w obudowie TSSOP20. Inne to inna obudowa, inne możliwości i inna cena. Koniec OT. Inne tez mają nawet 14sto nóżkowce. STM -> zawsze ma I2C, USART, SPI i ADC.
Witam. Czytając Forum nie wiem do końca, czy uda mi się rozwiązać dany problem. Gdzie mogę szukać informacji jak to wykonać? W projekcie muszę współpracować z 4 peryferiami: - potencjometr; - karta SD; - akcelerometr; - belka tensometryczna. Muszę co jakiś czas sczytywać informację z czujników i wysyłać na kartę sd. Znalazłem urządzenie komunikujące...
płytke NUCLEO-F303RE (STM32F303) Najszybciej chyba, moim zdaniem, było by wejść w ten czujnik przy pomocy MBED. Twoja płytka jest obsługiwana pod MBED , jest tam biblioteka do VL53L0X (firmowa od STM, w C++) i są przykładowe aplikacje, w tym proste demka. Np: https://developer.mbed.org/teams/ST/code... Jeśli masz tylko czujnik (a nie...
Dopiero zaczynam pracę z STM32 i przechodzę przez ten kurs: [url=http://forbot.pl/blog/artykuly/prog... STM na Forbot Na razie szło gładko, tylko ten I2C mnie zatrzymał. O której funkcji mówisz?
Czyli cały problem siedzi w bibliotekach stm? Najdziwniejsze jest to, ze w jednym projekcie działa, w drugim nie. Cały problem jest w szukaniu błędu tam gdzie go nie ma. I2C nie jest skopane. Ale trudniejsze w oprogramowaniu co przerasta każdego korzystającego z SPLa. I tam błędu nie ma. Swoją drogą to milionowy topic o I2C w STM. Z poprzednich żadne...
Będzie to wyglądało w taki sposób, że jeden stm32f103 będzie połączony z imu po i2c i będzie wysyłał te dane do drugiego stm32f103. Taka kombinacja dlatego, że bezpośrednie łączenie jednego stm z imu po i2c powodowało problemy, ponieważ komunikacja ta odbywa się blisko silników bezszczotkowych i zdarzało się, że komunikacja się urywała, pomagały ferryty...
Śmieszny jesteś. Nie jeden już tu poległ bo mu wszyscy wciskali wersje "naj" Jest to bzdura - po prostu nie ogarniali tematu i było bez znaczenia jaki procesor mają. Wskaż jakies istotne róznice pod względem trudności programowania na poziomie elementarnym: GPIO, I2C, SPI, DMA, Timery, ADC, DAC, CAN itp. Są znikome. Większość poległa pewnie na poziomie...
Witam, dziekuje wam za bardzo pomocne odpowiedzi. Update 4: Zaprojektowalem plytki pod czujniki a takze znalazlem na internecie juz gotowa plytke pod wyswietlacz oraz biblioteki do STM. Pozdrawiam
jak zliczać ilość obrotów zębatki z jak największą ilością prób na sekundę? A na ile szybko ona się kręci? Bo raczej ciężko będzie wykrywać przesunięcia o ułamek zęba (ale i to się da, jakkolwiek naprawdę trudno będzie o liniowość). fantastycznie byłoby mieć dane 60 razy na sekundę ;) Można tanim kosztem więcej. ;) Np. na STM32F103C8 - trzeba by się...
nie mam pojęcia jak wpisać zmienną Dane do bufora TxBuf. Normalnie to się robi tak: Jeśli wysyłasz coś z pamięci procesora przez DMA gdziekolwiek (USART, SPI, I2C itd) to musisz wpierw przygotować dane do wysyłki - wszystkie! A dopiero później przygotowaną paczkę wysyłać. Czyli Twój TxBuf powinien być tablicą, nie pojedynczą zmienną. Wypełniasz go...
Dodano po 12 Wynik z atmega328 https://obrazki.elektroda.pl/4275963800_... To wygląda prawidłowo, wysyłam to 0xf5 czekam 30ms potem 0x81 i odczytuję dwa bajty z ack i jeden z nack i warunek stop. Następnie wszystko się powtarza bo jest w pEtli while wywoływane. A w stm niema tych trze bajtów, tylko są dwa i z nack.
Wątków na temat I2C w STMach do wyboru do koloru bo ten interfejs na błędy implementacji w samym układzie. Na początek do zapoznania się nota AN2824. Możesz na próbę zrobić programowy I2C i sprawdzić czy Ci działa komunikacja.
Próbuje mierzyć częstotliwość sygnału wykorzystując przerwanie i Timer2 Napisałem taki oto kod przy pomocy CubeMX: 249992 Hz i niby ok. Jednak znalazłem kurs STM32 na FORBOT ( 249986 Hz. I teraz nie wiem czy prawidłowo należy skonfigurować timer do tego zadania tak jak zrobiłem czy tak jak w kursie?
Heh :) Bo Ty jak przeczytasz specyfikacje to zawsze zrobisz dobrze?. Gratuluje (serio). Podstawowe problemy o których wspomniał autor można spokojnie ocenić analizatorem za kilka dych a nie cyfrowym oscylem za przynajmniej 10x tyle. Za wolne zbocze... no to trzeba chyba mocno przegiąć w rejestrami, których mało kto rusza bez powodu. Popatrz jakie kwiatki...
Odnośnie płytki STM: Mam wrażenie, że źle podłączyłeś moduł bluetooth. Ściślej mówiąc, pin procka USART6_Tx powinien iść na UART_Rx w module BTM222. Upewnij się, żę każdy pin Vdd jest podłączony do masy kondensatorem ceramicznym 100nF. Nie widzę tego na szybko patrząc. Boot0 powinien chyba mieć opornik 10k. Vcap wyglądają dobrze.
wiem, ze 100 razy szybciej napisałbym sobie to od zera, ale trzeba poznać HALA i widzę, ze będzie to droga przez meke :( A po co w ogóle się męczyć? W repozytorium CubeMX (można też to ściągnąć osobno) masz gotowe przykłady jak obsługiwać I2C w HAL w różnych trybach poczynając od prostego pollingu przez przerwania i DMA. I to dokładnie na Twoją płytkę....
program nie wysypie się z powodu braku przecinka i zablokuje proca. Z powodu braku przecinka to jedynie się nie skompiluje. Stm nie można zablokować programowo, gdyż zawsze po reset przywracane są domyślne funkcje portów. Dlatego Znajdż checkbox "connect under reset" Wracając do tematu nowego atxmega, jeśli z ekranem lcd będziesz komunikować się poprzez...
Kwestia doboru parametrów, które powinny być możliwe do wprowadzenia przez jakiś interfejs typu rs232, i2c czy manualnie przyciskami, bez konieczności kompilowania na nowo kodu.
długość lini to ~ 15cm więc nie ma to znaczenia. Otóż w przypadku STMów długość linii ma ogromne znaczenie, a 15 cm to już całkiem sporo. I2C w tych procesorach jest bardzo nieodporne na zakłócenia i często już samo przełączenie portów z wejść na wyjścia OD powoduje, że układ zaczyna szaleć, bo coś mu tam lata po liniach. Zaraz po ustawieniu portów,...
Podczas obsługi modułu RTC DS3231 przy odczycie I2C danych z rejestru linia SDA pozostaje w stanie niskim, co uniemożliwia dalszą komunikację. Moduł posiada rezystory podciągające 4,7k. Mikrokontroler to STM32F103C8T6 . Zakładam, że moduł działa nadal, o czym świadczy obecności fali 32khz na odpowiednim wyjściu. Ponowne uruchomienie programu (mikronoktrolera)...
I2C w stmach jest skomplikowane, od tego jest odpowiednia nota aplikacyjna. Obsługa jest różna dla różnej wielkości danych 1,2 i więcej bajtów powodem jest to ze rejestr danych jest buforowany... Problematyczne jest również kasowanie odpowiednich flag...
Czy zadziała opcja kiedy podłączę sobie odpowiednie linie pod wyjścia cyfrowe i napiszę program To machanie robi się tylko w przypadku kiedy slave nadaje LOW na SDA (np. z jakiś powodów urwie się transmisja na odczycie ze slave bajtu z zerami itp.). Wtedy master nie jest w stanie wygenerować stanu START albo STOP i interpretuje tą sytuację jako zajęcie...
Dodano po 3 I aby w razie czego nie płakał że nie ma: Możesz to zrobić w C też oczywiście: [syntax=armasm] .weak NMI_Handler .thumb_set NMI_Handler,Default_Handler .weak HardFault_Handler .thumb_set HardFault_Handler,Default_Handler .weak MemManage_Handler .thumb_set MemManage_Handler,Default_Handler .weak BusFault_Handler .thumb_set BusFault_Handler,Default_Handler...
Korzystam z przykładowych projektów dostarczonych przez ST w programie IAR. Po lewej stronie okna programu znajduje się okienko z drzewem folderów i pośród nich znajdują się dwa pliki ze 'startup' w nazwie: startup_stm32f10x_md.o i startup_stm32f10x_md.s (zawartość plików znajduje się poniżej). To o te pliki chodziło? Zawartość dość znacznie się różni....
I korzystam z niego :) Tylko, że tak samo jak musiałem dodać reset bo nie chciały mi się zainicjować warunki startowe to mam następny problem rejestrem ADDR. EDIT Zmieniłem address w ten sposób i działa: [syntax=c]I2C1->DR =address<<1;[/syntax] Ktoś może wytłumaczyć mi dlaczego to działa? :)
Bzdury. STM32F100C4T6B ARM Cortex-M3 CPU, 16kB Flash, 4kB RAM, 2xUART, I2C, SPI, CEC, ADC, DAC, STM, LQFP48 cena w detalu około 5zł. A gdzie EEPROM i PWM??
Bawienie się we wlasne tablice to zawracenie wody w Wiśle i proszenie się o kłopoty już na początku masz błedy [syntax=armasm] .word _estack (void*) STACKEND,// adres stosu .word Reset_Handler main, // reset .word NMI_Handler 0, // NMI .word HardFault_Handler 0, // Hard Fault .word MemManage_Handler 0, // Mem manage .word BusFault_Handler 0, // Bus...
No włąśnie - jeśli tylko jeden z tych warunków (po zanegowaniu) da jeden, to drugi nie musi być sprawdzany (bo po co, skoro 1 || x da zawsze 1. 4\/3!!
problem udało mi się rozwiązać. Kod który zamieściłem działa z lib 3.3.0. Wystarczyło podmienić pliki biblioteki. Na stronie STM w przykładach jest też jak zrobic odbiór z użyciem DMA. POzdrawiam
F303 użyłem ze względu na to, że akurat mi potrzebny szybki różnicowy ADC i komparatory. Jakby jeszcze jego OPAMPy mogły pracować z zasilaniem poniżej poziomu GND to byłbym całkiem szczęśliwy. Ale jakby nie to pewnie bym skorzystał ze 103/107, starocie ale nie miałem z nimi większego problemu. Ale tak, 303, są całkiem fajny, chociaż mi nie pasuje implementacja...
Te define'y ustawiają pin mikrokontrolera, do którego podłączona jest linia SDA magistrali I2C na wejście (SDA_IN) lub wyjście (SDA_OUT). Ma to na celu odbieranie/wysyłanie danych z/do urządzenia na magistrali. Linia SDA jest dwukierunkowa (w przeciwieństwie do SCL).
Szkoda pieniędzy na STM32VLDISCOVERY. Dostajesz ST-Link + CPU z klawiszem i 2 ledami. Bieda straszna. STM32F4DISCOVERY jest znacznie lepszy. I lepszy, i nie. Na pewno znacznie mocniejszy procesor i kilka peryferiów, ale to co raz jest zaletą, innym razem jest wadą. Ja od początku miałem kilka płytek discovery, w tym vldiscovery i F4discovery. No i...
TIM17? Jesteś pewien, że masz tyle timerów w swoim STM? To seria F4 ma ich jak dobrze kojarzę 14 sztuk, a F1 - 8 sztuk.
Dziękuje za odpowiedź. Zdecydowałem się jednak na komunikację poprzez I2C. Jeśli prędkość nie będzie wystarczająca to spróbuje po tym SPI. Jednak niestety natrafiłem na następujący problem. Napisałem sobie kilka funkcji pomocnych przy obsłudze I2C. Chcę odczytać dane tylko z żyroskopu na razie z jednej osi. Podczas odczytywania cały czas wyświetla mi...
Tyle czasu a ty nadal nie przeczytałeś aplication note? Chłopie wstyd.
Po sprawdzeniu dostępności komponentów wyszło na to, że wykorzystam TVP5150, który powinien robić to samo co MAX9526. (at)atom1477 Jak programujesz STMy to korzystasz z bibliotek HAL czy samodzielnie wszystko piszesz?
Po prostu jak przestajesz nadawać/odbierać jako master przechodzisz w tryb slave i zaczynasz nasluchiwać swojego adresu. ot i cała filozofia. PS jeszcze pamietaj o tym że możesz stracić arbitraż w multimaster - ale stm-y (przynajmniej te, ktore testowalem ładnie przechodzą w tryb slave bez zadnych problemów z magistralą)
Dodano po 31 Kiedy debuguje program, krokowo, zaraz po a = 124; z linii b = log10(a); wskakuje do nieskończonej pętli - void HardFault_Handler(void). Tak jakby sam adres procedury wywoływał błąd sprzętowy.
uff udało się jakoś. Użyłam Inicjalizacji z postu wikktora z linku który podałeś, resztę zostawiłam tak jak miałam i teraz działa, tak więc wielkie dzięki :) podsumowując dla przyszłych pokoleń, aby uruchomić I2C w podstawowej konfiguracji: najpierw w main najpierw wywołuje funkcję: RCC_Configuration(); void RCC_Configuration(void) { /*...
Funkcja SystemInit jest wywoływana w obu przypadkach na początku main. Podałem ją w kodzie. Może tutaj faktycznie jest problem. Pliki startup.s Keila i Cube się różnią. Zauważyłem, że funkcja SystemInit jest wywołana w pliku dla Cube. Niestety te pliki to dla mnie czarna magia. Czytałem o nim artykuł waszego kolegi z elektrody. https://www.elektroda.pl/rtvforum/topic3...
Ja mam poprawnie działający I2C z DMA. Wklejam jeśli jeszcze jest Ci potrzebny, jak nie może ktoś inny skorzysta. Konfiguracja I2C ( standardowo) [syntax=c] void Config_I2C() { I2C_InitTypeDef I2C_InitStruct; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2... ENABLE); I2C_InitStruct.I2C_ClockSpeed = 400000; I2C_InitStruct.I2C_Mode = I2C_Mode_I2C; I2C_InitStruct.I2C_DutyCycle...
Witam, Po wielogodzinnej zabawie wreszcie udało mi się uruchomić I2C i nawiązać komunikację z akcelerometrem. Jednak mam mały problem - chciałbym w jednym adresowaniu w trybie do odczytu odczytać zawartość kilku kolejnych rejestrów z akcelerometru. Póki co udało mi się napisać działający program odczytujący tylko jeden rejestr, więc do odczytania trzech...
while (I2C2 -> ISR & I2C_ISR_TXIS); Sprawdziłeś w RM co znaczy ta flaga? Stop się chyba nadaje na końcu transmisji, a nie na początku.
Zmieniłem : 2. change The initial stack pointer in the vector table: (void *)&pulStack[STACK_SIZE-1]... to (void (*)(void))((... long)pulStack + sizeof(pulStack)), w startup_stm32f10x_md_vl.c Dalej to samo. [syntax=c]/** ****************************************...
Bardzo dziękuję za odpowiedzi. Punkty za pomoc poleciały.... Obsłużyłem I2C swoimi programowymi procedurkami. Do tematu wrócę zapewne przy kolejnym projekcie na F103C6T6, być może wtedy odpalę ten sprzęt.
funkcja której używam sama przypisuje 0 lub 1 w zaleznosci czy jest to read czy write dlatego zastosowałem przesunięcie
Czy ustawienie priorytetów załatwi problem czy może jest jakiś inny powód że przestało to działać? Definitywnie to drugie. Na 99% Twoje przerwania trwają zbyt długo lub użyłeś w nich (pośrednio lub bezpośrednio) funkcji blokujących/oczekujących/pollingu. Jeśli zaczniesz kombinowac z priorytetami bez zrozumienia przyczyny, to tylko wpędzisz się w więcej...
W czym większość to komentarze. Ja osobiście przekonałem się że używanie tego od ST niesie ze sobą tonę korzyści, choćby to że przy zmianie uC nazewnictwo się nie zmienia i kod albo działa automagicznie lub zdebugowanie problemu to chwilka.
Witam, próbuję zmusić STM'a do działania jako monitor I2C pomiędzy jakimś master a jakimś slave. W pakiecie, pomiędzy start a stop transmitowane jest adres i 163 bajty danych, po każdym bajcie slave ładnie ustawia ACK do niskiego poziomu. Skonfigurowałem STM'a: [syntax=c] RCC->APB1ENR |= RCC_APB1ENR_I2C2EN; RCC->APB2ENR |= RCC_APB2ENR_AFIOEN; RCC->APB2ENR...
na samym końcu lcd16x2_i2c.h dopisz [syntax=c]#endif[/syntax]
STM32Lxxx mają specjalne rejestry gdzie mówisz jakie piny mają być jak ustawione gdy rdzeń śpi https://obrazki.elektroda.pl/7609654300_... Do tego inne piny mogą wybudzać, inne znowu odbierać dane uart, i2c itp. Mają one bardzo bogate opcje pracy w takich okolicznościach. Szczegóły znajdziesz w RM
Oczekiwanie na koniec można zrobić na milion sposobów... Wg manuala powinno działać tak jak opisujesz, ale co robią te wszystkie "dziwne funkcje" tego już niestety nikt z nas nie wie... No i jest jeszcze taki problem, że samo ustawienie bitu START niekoniecznie rozpocznie transmisję natychmiast, a tym samym niekoniecznie od razu bit BUSY się ustawi....
PS podejrzewam że nie widzisz hi2c1 w pliku pcf..... - o to chodzi?
Burzy nie, ale chciałbym uświadomić, że przed autorem, 6..12 miesięcy nauki i to raczej po 12-14godzin niż po 8 dziennie, i nie 5 a 7 dni w tygodniu, chyba, że zrobi w ArduinoIDE (miesiąc, może dwa) ale tam okaże się, ze nie wszystko da się zrobić i o Arduino trzeba zapomnieć. Może trzeba będzie (będzie wygodniej) użyć RTOS, który pewne rzeczy ułatwi,...
Domyślne, nie zmieniałem niczego. Skrypt linkera: [syntax=asm] /* Entry Point */ ENTRY(Reset_Handler) /* Highest address of the user mode stack */ _estack = 0x20004000; /* end of 16K RAM */ /* Generate a link error if heap and stack don't fit into RAM */ _Min_Heap_Size = 0; /* required amount of heap */ _Min_Stack_Size = 0x80; /* required amount of...
Ja rozumiem ze mozna szarpać się z darmowymi toolchainami, ale zeby z keilem?... Postawienie darmowego toolchaina trwa minute :)
Witam temat podobny do http://www.elektroda.pl/rtvforum/topic23... Lecz sprawa wygląda troszkę inaczej. Z racji tego, że atollic udostępnił wersję litte postanowiłem przesiąść się z keila. Dotychczas korzystałem z example usb hid na keila. W Atollicu skonfigurowałem sobie nowy procesor, wrzuciłem kod z uvision i po małych przeróbkach (dostosowanie...
Mój problem polega na tym że komunikacja z 2 czujnikami na i2c przebiega poprawnie dopóki nie odpalę przerwań od input capture z timerów. Komunikacja zawiesza się w losowo wybranych momentach, raz po 20 sekundach raz po 10 minutach. Gdy wyłączę przerwania to chodzi bez blednie. Mój procesor to stm32F103rb. Próbowałem już 3 sposobów na odczyt z i2c -...
Witam, Mam problem z ukłądem 5P35021. Próbuje się komunikować z nim po I2C skonfigurowanym na 100kHz z STM32F746BET. Do tej samej magistrali podłączony jest także touchpanel. W przypadku komunikacji z układem panela dotykowego wszystko działa jak należy. Podłączenie wygląda dosyć prosto, więc nie wiem w czym tkwi problem. Poniżej umieszczę schemat podłączenia...
[syntax=c] uint32_t read_us(void) { return TIM5->CNT; } void timer_init(void) { RCC->APB1ENR |= RCC_APB1ENR_TIM5EN; TIM5->CR1 = 0; TIM5->PSC = 83; TIM5->ARR = 0xFFFFFFFF; TIM5->EGR = TIM_EGR_UG; TIM5->CR1 = TIM_CR1_CEN; } [/syntax] I to powinno wystarczyć.
zujnik jest podłączony bez rezystorów wzmacniających, ponieważ odczytałem ze schematu, że nie są potrzebne(próbowałem także z rezystorami 4k7). Przy sprawdzeniu bufora z danymi w programie Stm Studio, nic się nie zmienia a flaga busy jest ustawiona jedynie przy odłączeniu kabla SDA od czujnika. Proszę o pomoc w znalezieniu przyczyny braku odczytu i...
Ok. Mam sterownik na Atmedze z czterokanałowym zegarem sterującym i kilkoma kanałami pomiarowymi napiec i prądów w obwodach niskonapięciowych. Ma 12 lat i jak si zepsuje to mogę już nie kupić atmegoi więc usiłowałem coś zrobić na STM ale totalnie się na tym wyłożyłem. Wróciłem wiec do atmegi zrobiłem nowe płytki bo stare były zmaltretowane przeróbkami...
Cube dla tego procka standardowo robi partial remap ze wzgledu na i2c2. Jezeli użył plików z Cuba to ma pc10 i pc11. (zakładam że to F103RB)
Tzn TIM podałem tylko jako przykład, w rzeczywistości odnosi się to do wszystkiego. Bardziej logicznym zapisem dla mnie jest taki: [syntax=c]// to lub typedef jeśli ktoś chce #define bitband_t *(volatile unsigned int *) ... #define BITBAND_PERI(address,bit) ((BITBAND_PERI_BASE + (((unsigned int)address)-BITBAND_PERI_REF)*32 + (bit*4)))[/syntax] i teraz...
Witajcie Problem stanowił wyłączony zegar dla peryferi odpowiedzialnych za reapowanie (przeoczyłem jedną z flag). Pozdrawiam Krzysztof
Mikrokontrolery programuje sie nie tylko w C. Różne mikrokontrolery programowałem w asm, Z80, MCS51, PIC, AVR. Robiłem systemy z 40 mikrokontrolerami na I2C + główny mikrokontroler + PC itp. Ale od kilku lat nie programuję na zlecenia, bo wolę produkować urządzenia i sprzedawać je. val = GPIOx->IDR nie jest trudno zapamietać, jeżeli gdzieś się to znajdzie,...
Cześć, Projekt zaraz będę konfigurował od początku. Fakt, podałem za mało danych, wybaczcie, skrajna nerwica mnie na to wzięła. Od początku: Używam SW4STM32, ale chciałbym od tego odejść mocno, bo za dużo automatów i za mało szczegółów, może dlatego, że nie potrafię tego wszystkiego ogarnąć. Kompilatora używałem poprzez naciśnięcie "build". W ustawieniach...
Witam, Jak w temacie. W jakich sytuacjach korzysta się z USB w stm32 na rzecz innych protokołów. Bo chce zrobić analizator logiczny do z debugowania i2c z stm'a i wysyłać dane do pc'ta. I idzie mi łatwiej o dziwo niż z I2C, ale im dalej w las tym temat wydaje się grubszy, także pytanie czy warto.
Nie jest to wina rezystorów. Sam układ jest na płytce, na której są dwa kondensatory. Podciągnięcie mam realizowane za pomocą pary rezystorów 4,7k. Próbowałem zmieniać na 3,3k. Niestety nic to nie zmienia. Tak jak pisałem wcześniej. Najprawdopodobniej jest problem z komunikacją na STM'ie.
Pinów GPIO nie trzeba przypadkiem skonfigurować na funkcję alternatywną? 4\/3!!
Korzystam z ds'a układu MCP4728, rev. E. 0. Maksymalna częstotliwość zegara dla I2C przy zasilaniu ~3V (nie 5V), to 400kHz. 1. Załadowanie danych do 4 rejestrów to 83 bity, strona 38. 2. Czas przesłania danych do 2 układów, czyli 8 kanałów, to (1/400 * 83)*2 = 415us. To daje maksymalną częstotliwość odświeżania rejestrów 2,41kHz. 3. W Twojej propozycji...
U siebie I2C konfiguruje tak: io_pin_cfg(SDA_GPIO, SDA_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_... GPIO_CRx_CNF_ALT_OD_value));// SDA - alt output, open-drain, 10M io_pin_cfg(SCL_GPIO, SCL_pin, m_GPIO_MODE_CNF_value(GPIO_CRx_MODE_... GPIO_CRx_CNF_ALT_OD_value));// SCL - alt output, open-drain, 10M...
Może być kilka powodów: - błąd na PCB - np. zła biblioteka czujnika, źle podpięte piny, - piny w STM32 ustawione jako push-pull a nie open-drain (łatwo sprawdzić na oscyloskopie), - zbyt duża prędkość transmisji. Dodatkowo nawet jeśli czujnik odpowie, obawiam się że STM może tego nie zrozumieć - jeśli STM zasilany jest 3.3V to jak interpretuje 1.8V...
Układ pracuje w trybie I2C bądź SPI w zależności od lini CS. Zwróć uwagę, że na początku masz na tej linii stan wysoki, a na liniach SDA i SCL masz coś co przypomina sekwencję START dla szyny I2C. Może układ z tego powodu zgłupiał. Spróbuj na samym początku ustawić stan niski na CS a dopiero później konfigurować linie MOSI, SCK oraz SPI i dopiero wtedy...
Dzięki za podpowiedź. Biblioteka do obsługi I2C przez ten procesor jest dostępna, natomiast powiązanie tych bibliotek nie jest trywialne, przynajmniej dla mnie. Biblioteka do Arduino używa wywołań Arduino. Nie jest to czyste C a biblioteka I2C do STM32 ma inną filozofię i zestaw funkcji niż ta do Arduino. Nie wiem co to jest Cube i też nie wiem co to...
W dokumentacji zauważyłem jeszcze niejasną tabelkę - chodzi mi o np. DMA2 request mapping - ADC1 i ADC2 są wpisane dla kilku Streamów np. ADC1 jest w Stream`ie 0 i 4, którego użyć - jakaś reguła ? Możesz użyć którego chcesz, dzięki czemu nie ma problemu (a raczej jest on mniej prawdopodobny) znanego z innych rodzin, że np. chciałbyś użyć DMA do I2Cx...
Witam. Aktualnie walczę z kompilatorem GCC non-eabi. Chcę utwożyć projekt w C++ używając własnego skryptu linkera, jednak po długiej walce nie mam już pomysłu na rozwiązanie. W jaki sposób skonfigurować kompilator, linkera oraz skrypt linkera tak abym mógł własne tablice zdefiniowane w plikach .cpp wstawić w wybrane prze zemnie miejsce w pamięci? Wersja:...
A co to za układ peryferyjny? Może to układ działający w standardzie SMBUS? Standard ten przewiduje wstrzymywanie magistrali przez SLAVE'a gdy się nie wyrabia. Polecam wyposażyć się w tani analizator stanów logicznych.
wykonać pomiar kolumna włącznik świateł schemat przewody jednej puszce
Wyłączenie doświetlania zakrętów w Citroen C4 przed liftingiem Toggle Relay with Simultaneous Button Press on PWM Pins