Czy: Kod C - Tak, chyba że wymusisz update "ręcznie". 4\/3!!
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...
arm.com: Cortex-M4 Technical Reference Manual ARMv7-M Architecture Reference Manual Co do timera: prawdopodobnie chodzi o opóźnienie kasowania zgłoszenia przerwania. Jeśli skasujesz pod koniec procedury, to po jej zakończeniu znacznik będzie jeszcze ustawiony i spowoduje powtórne zgłoszenie przerwania. Do sterowania NVIC proponowałbym jednak użyć pseudofunkcji...
rozdział 5.1.2 : • Access to the RTC and RTC backup registers 1. Enable the power interface clock by setting the PWREN bits in the RCC_APB1ENR register (see Section 7.3.13 and Section 6.3.13) 2. Set the DBP bit in the PWR power control register (PWR_CR) for STM32F405xx/07xx and STM32F415xx/17xx and PWR power control register (PWR_CR) for STM32F42xxx...
Funkcja gpio_pin_cfg() ustawia odpowiednie wartości a rejestrze AFR[].
Wez pierwszy kod i popatrz na niego uważnie. To jest kilka linijek. Jeżeli nie znajdziesz błędu, to odpuść. Nie ma in nic wspólnego z procesorem, rejestrami itp.
I tutaj pojawia się problem. Otóż rejestry RTC są kasowane przy każdym resecie procesora oraz przy zaniku napięcia. Byłem pewien, że system sam wykryje brak napięcia VDD i podtrzyma odpowiednie rejestry, ale teraz już sam nie wiem czy może programowo nie trzeba czegoś ustawić. Szukałem w dokumentacji i niestety nic pasującego nie mogę znaleźć. Może...
Prawdopodobnie są zdefiniowane jako tablica.
Witam. Stary temat ale odświeżę. Też próbuję uruchomić taką kamerę i mam mega problem. Nie za każdym razem się uruchamia. Czasami daje kilkukrotnie mniejszą częstotliwość impulsów na wyjściach HSYNC i VSYNC niż zwykle. Wszystko zależy od momentu uruchomienia. Jak zasilanie się pojawi za szybko. Nic nie pomaga zwiększenie opóźnienia do wykonania sprzętowego...
http://www.freddiechopin.info/pl/downloa... Ściągnij sobie przykład dla STM32F4 i możesz spokojnie pisać na rejestrach, bez żadnych wstawek assemblerowych oraz bez zastanawiania się nad "listą rozkazów", jak mylnie określasz HAL/SPL.
Kamery zwykle mają wewnętrzny PLL. Częstotliwość sygnału XCLK i wartości wpisywane do rejestrów kamery muszą być odpowiednio dobrane.
Chyba trzeba jeszcze wykonać update, czyli przepisać wartości z rejestru tymczasowego do rejestru sprzętowego. TIM2->EGR = TIM_EGR_UG;
Hehe. Wiem że to dziwne ale robiłem to na szybko. Cały czas eksperymentuje a mam mało czasu wiec mam nie mały bajzel. To ja jeszcze zwrócę uwagę na to, bo w Twoich kodach z innych tematów aż się rzuca w oczy: [syntax=c]USART1->CR1 = USART_CR1_UE; USART1->BRR = 168000000/9600 ; USART1->CR1 |= USART_CR1_TE | USART_CR1_RE; // RX, TX enable[/syntax] Po...
A gdzie jest ten TC bit? W którym rejestrze? Jakoś nie widzę.
Myślę że przesunięcie rzędu czas trwania jednej konwersj nie było by problemem więc pytanie nadal aktualne A dlaczego nie wykorzystać możliwości. Jeżeli nie znasz HALa to najpierw zainstaluj sobie przykłady w Cube (ale nie mx) i przeanalizuj je. Wtedy domyślisz się jak zaincjalizować porty, ADC, DMA i timer aby trygierzował konwersje w odpiednim czasie....
Czy można prosić o pomoc z obsługą zapisu RTC w HAL? Albo jak powinien wyglądać kod do zapisania danych do RTC przez rejestry?
http://obrazki.elektroda.pl/5020904800_1... Witam Tym razem chciałbym zaprezentować programowy projekt zegarka i datownika uruchomionego na sprzęcie: STM32F4Discovery oraz LCD TFT DEM240320E TMH-PW-N(A-Touch) na sterowniku Renesas R61580 (kupiony swego czasu w TME. Obecnie nie mają na stanie, można próbować kupić go tutaj:http://www.soselectronic.pl/?str=3...
Oj, żeby CubeMX generował wpisy na rejestrach, to pewnie bym korzystał. Chociaż czasem go uruchamiam, żeby podglądnąc jego drzewo zegarowe a potem i tak przepisuje na rejestry...
Cocox na pewno obsługuje STM32F4, gdyż sam używam tego środowiska i wszystko działa bez zarzutów (testowane z płytką discovery, zewnętrznym ST-LinkV2 i ST-Link). W obecnej wersji brakuje tylko zdefiniowanych rejestrów peryferiów (dla F1 i F2 są), ale pewnie w kolejnych wersjach będzie to uzupełnione.
Zmieniłem oprogramowanie, ruszyło. Zamykam!
W Reference Manual, rozdział o pinach GPIO, na samym końcu jest zawsze rozpiska rejestrów i pod kazdym rejestrem jest info o tym jaka jest domyślna wartość pod resecie. Przykładowo dla STM32F4: https://obrazki.elektroda.pl/2313071500_...
Oprócz tego przy kompilacji wyskakiwał błąd: error: 'GPIO_TypeDef {aka struct <anonymous>}' has no member named 'BRR'; did you mean 'BSRR'? więc zmieniłem: SSD1963_CTRLPORT->BRR = SSD1963_PIN_CS | SSD1963_PIN_WR; na SSD1963_CTRLPORT->BSRR = SSD1963_PIN_CS | SSD1963_PIN_WR; I właśnie tu jest błąd, bo BSRR to nie jest to samo co BRR (co zresztą...
Hej. Może ma ktoś z Was jakiegoś gotowca na 401/407 lub 411 z obsługą USB typu HID? Najlepiej na rejestrach, ale jak będzie HAL to też przyjmę z dobrodziejstwem inwentarza. Z góry dziękuję za pomoc.
Hmm no to chyba tak mam. Nie wpisuje nic do rejestru PUPDR.
Nie znam przykładów Freddiego ale poszukam. http://www.elektroda.pl/rtvforum/topic13... Najbliższy STM32F3 będzie przykład dla STM32F4.
Do SPI wpisujesz dwa bajty, odczytujesz tylko jeden. Kontrolerowi się to nie spodoba... [syntax=C] while( !( SPI2->SR & SPI_SR_TXE )); SPI2->DR = 0xD7; // // TUTAJ dodać "niby" odczyt SPI - choćby tak: // czekaj_na_dane(); // np poprzez sprawdzanie SPI_SR_RXNE // (void)SPI2->DR; // while( !( SPI2->SR & SPI_SR_TXE )); SPI2->DR = 0xFF; while( !( SPI2->SR...
Nie przy C, gdzie zanim zaczne cos robic, to zuzywam pare kilo flash-a :( To włącz optymalizator. C wcale nie jest AŻ TAK CIĘŻKI jak to ciągle piszesz, tylko programiści są ciężcy. Przecież jest tłumaczony na assemblera i optymalizowany w celu np reużycia wartości wpisanych w rejestry etc. W większości przypadków nie ma sensu pisać w asemblerze.
Błąd masz w każdym obliczeniu. Ustawienie rejestru PSC na wartość x powoduje podzielenie zegara przez "x + 1". Ustawienie rejestru ARR na wartość x powoduje odliczenie "x + 1" taktów zegara. Z tego względu tego typu rejestry zawsze ustawia się na "x - 1" względem tego co sobie obliczyłeś. 4\/3!!
Tak, ja również korzystam z Keila i z funkcji inicjującej zegary system_stm32f4xx.c (teraz wyszedł nawet fajny wizard do ustawiania zegarów). Reszta standardowo na rejestrach, ale na razie posprawdzałem tylko czas wykonywaniu kodu na floatach, i pomrugałem diodami. Wrócę do tego uC po skończeniu aktualnego projektu.
[syntax=c]while(!(SPI1 -> SR & SPI_SR_TXE)); SPI3->DR = data; //zapis danych do rejestru SPI while(!(SPI1 -> SR & SPI_SR_TXE)); while(SPI1 -> SR & SPI_SR_BSY); SPI3 -> CR1 &= ~(SPI_CR1_MSTR | SPI_CR1_SPE); [/syntax] Jeżeli to jest procedura wysyłania danych przez SPI3, to dlaczego sprawdzasz rejestr statusowy SPI1? Trochę to nielogiczne :/ Nauka przez...
Biblioteki czy plików nagłówkowych? Jak to drugie to: - www.st.com - Products → Microcontrollers → STM32 32-bit ARM Cortex MCUS → STM32F4 Series → STM32F407 - (po lewo) Software → STM32Cube -> (w nowo otwartym oknie) STM32CubeF4 - (na samym dole) Get Software → Download - w rozpakowanym archiwum: Drivers → CMSIS...
Jeżeli nie zainicjujesz pola ADC_init_structure.ADC_ExternalTrigConv to będą tam śmieci, a potem te śmieci wpiszesz do rejestrów ADC.
Witam Spróbuj włączyć zegar według poniższego (w Twoim kodzie nic podobnego nie widziałem) ========================================... * How to use this driver * ========================================... * * 1. Enable peripheral clock using the following functions * RCC_APB2PeriphClockCmd(RCC_APB2Periph_SP...
Biblioteka STDPeriph jest martwa, więc lepiej ją zostaw i zainteresuj się HAL i CubeMx. Gdy program uruchamiam krokowo i jestem w petli for to dane się wysyłają. Za szybko ta pętla działa i dane za szybko są "wypychane". Należy odczekiwać odpowiedni czas za każdym razem. Regułą jest uprzednie sprawdzanie rejestru statusowego przed zapisem do rejestru/odczytem...
Czy ktoś wie gdzie może być problem? Na pewno w tym, że nie czekasz ani na ustabilizowanie się zegara HSE, ani na ustabilizowanie się pętli PLL. Te operacje są obowiązkowe zarówno przed użyciem HSE jako źródła dla PLL jak i przed użyciem PLLa jako źródła dla rdzenia. https://github.com/DISTORTEC/distortos/b...
A dlaczego nie spróbujesz operować bezpośrednio na rejestrach?
Do AHB1_ENR też masz makra w nagłówku. Użyj znaczników [syntax=c][/syntax] zamiast code. Jeśli nie skonfigurujesz zegarów, to zegar systemowy jest ustawiony na wewnętrzny oscylator HSI, który ma 16 MHz. Problemem jest rejestr MODER, który ustawiłeś na alternate function zamiast GPIO (powinien być ustawiony bit 0 a nie 1) :) No i jeśli chcesz czymś migać...
A ilu wg. Ciebie cykli mógły minimalnie potrzebować procesor na zapis 8 słów na stos, zaindeksowanie tablicy, pobranie z pamięci i załadowanie do PC nowej wartości, wykonanie kilkunastu instrukcji oraz pobranie ze stosu i przeładowanie 8 rejestrów?
Może zbyt namieszałem. Zasadniczo chodzi po prostu o to jak stworzyć projekt w SW4STM, który nie zawierałby tych wszystkich śmieci z SPL i HAL i dało się pisać na rejestrach. Taki czysty podstawowy projekt pod rejestry z tylko niezbędnymi rzeczami jak w przypadku pisania na AVRy. Ja robię to tak: I. Potrzebne narzędzia: 1. System Workbench for STM32...
Ale na pewno bufor nie ma 2 bajtów. Ma - jeden bajt od razu jest ładowany do "shift register", a drugi czeka w rejestrze USART->DR. Dopiero trzeci i kolejne się nie mieszczą i muszą czekać na zakończenie wysyłania poprzednich.
Teraz moje pytania którą bibliotekę lepiej poznawać czy może one są praktycznie takie same? "Biblioteki" te lekko się od siebie różnią, ale obydwie są równie beznadziejne (; Czy na armach mogę sobie programować tak jak na avr?tzn dodam sobie jakiś plik nagłówkowy jak to tam było avr/ io.h z definicjami rejestrów wejść/wyjść i mogę operować bezpośrednio...
Bit BUSY jest kasowany przez STOP. Zatem po wystartowaniu bit START (stan wysoki), czekam, aż BUSY będzie wyczyszczone przez STOP i zaczynam wtedy kolejną transmisje (ale to nie działa do końca). Ta dziwna funkcja to tylko ustawianie co, ile i skąd chce odczytać/zapisać nic nie robi z rejestrami.
Podejrzyj kod asemblera i zobacz czy na pewno wykonują się zmiennoprzecinkowe instrukcje. U mnie dodatkowo trzeba było włączyć optymalizację oraz podlinkować libm i libg z katalogu fpu kompilatora i tak zauważyłem, że sporo zależy właśnie od wersji kompilatora. Mnożenie wykonuje od razu sprzętowo ale do pierwiastkowania trzeba go zmusić. A pozwolę też...
Tylko najpierw sprawdź jaka jest maksymalna wartość rejestru IWDG->RLR (Reload register) i czy aby na pewno wartość 10000 się tam mieści.
Aha, czyli w Twoim kodzie ostatecznie na czas pomiarów rejestr CR1 ma mieć wartość 1<<23, a rejestry SMPR1 i SMPR2 - 7, tak? Czyli wszystkie kanały poza 0 i 10 mają czas próbkowania 3? Twój zapis jest: a) nieczytelny i b) błędny. Proponuję, żebyś jednak zaczął się stosować do udzielanych Ci rad. Zapisuj rejestry jednym podstawieniem, a nie serią....
niestety w moim przypadku kiedy próbuje za pomocą biblioteki Hal pobrać dane z szybkością 200kSpc osiągam maksymalnie 50kSpc. Program zachowuje się jakby wywołanie funkcji trwało wielokrotnie dłużej niż sama transmisja. Ale dziękuje za wszelkie podpowiedzi. Po przerwie wróciłem do pracy nad problemem jak uda mi się znaleźć przyczynę opiszę. Jak nie...
To niech teraz też będzie samo =, bo OR nie ma tu najmniejszego sensu a tylko może zaszkodzić. Tak samo OR nie ma najmniejszego sensu przy inicjalizacji rejestrów USARTa, bo niby po co chcesz zachowywać stare wartości? A jak tam jest właśnie jakimś sposobem ZŁA wartość? Wpisz po prostu do dwóćh rejestrów dwie gotowe wartości i tyle, bez żadnych ORów....
Jeżeli jesteś początkujący tak jak ja to polecam System Workbench for STM32. Instalujesz i masz wszystko potrzebne, jeżeli będziesz pisał na rejestracjach to wywalasz hal i zostawiasz CMSIS. Można w ten sposób zaoszczędzić czas na środowisko a zacząć pisać programy.
Ustalasz to programowo przy pomocy wyboru odpowiedniej funkcji alternatywnej dla pinu - poszukaj rejestrów Alternate Function w rozdziale o GPIO. 4\/3!!
/* Podaje na piny danych, index rejestru do którgo zapisujemy */ Modyfikując przy tym 8 pozostałych bitów. /* Ustawiam PIN CS w stan niski */ ILI9325_CTRL_GPIO->BSRRH |= ILI9325_CS; Rejestry BSRR nie wymagają używania operacji logicznych. LCD_DATAPIN_IN; Skąd mamy wiedzieć co robi to makro? 4\/3!!
PLLN trzeba ustawić na 8 i działa jak należy.
It is cleared by software or by reading the ADC_DR register. DMA jak by nie patrzeć czyta ADC->DR. Nawet sam mu podałeś adres tego rejestru do odczytu.
Możliwe że pomieszane różne wersje bibliotek stdperiph_lib. Są one czasem wygodne żeby coś szybko raz ustawić bez dłubania w manualu, ale mocno 'zryte' i mocno niekompatybilne między wersjami. Włączenie alternatywnych funkcji wygląda mniej więcej tak: [syntax=c]GPIO_PinRemapConfig(GPIO_Remap... ENABLE);[/syntax] Można przejrzeć kod biblioteki szukając...
A ktoś korzystał z tego akcelerometru lub bardzo podobnego? Jestem ciekawy jak konfigurujecie rejestry, i jak odczytujecie przyspieszenie.
Pokaż program. Używasz SPL? Ustawienia zegarowe generujesz z arkusza kalkulacyjnego dostępnego na stronie STM (clock configurator się to chyba nazywa) - ten arkusz generuje Ci plik z konfiguracją zegarów. Potem dla ustawienia baudrate poprzez SPL musisz dodatkowo w linii poleceń kompilatora zdefiniować globalnie stałą HSE_VALUE z wpisaną wartością tego...
Daje już któryś raz z kolei mój kod, działa na F4 na pewno. Może i działa. Ale odbiór na pewno powinien wyglądać inaczej. Do demoh. Resetujesz układ I2c i chcesz juz działać? a gdzie konfiguracja? Podejrzałeś w ogóle rejestry debugerem?
Mnie się wydaje, że musisz włączyć jeszcze bity SSM i SSI w rejestrze konfiguracyjnym SPI... 4\/3!!
Jeśli dobrze zrozumiałem problem: Ustawiając rejestr OTYPER nie ustawiasz pinu jako wyjście, tylko konfigurujesz wyjście, prawdopodobnie włączają się jakieś wewnętrzne rezystory, skonfiguruj resetr GPIOx->PUPDR (pullup) oraz TIMx->BDTR bit BKP (wyzwalanie stanem niskim lub wysokim). pzdr
Do BRR powinieneś wpisać (168000000/4)/Baud. Do tego to co napisał kolega wyżej no i to zerowanie bitów jest raczej zbędne bo po resecie te rejestry mają wartości 0x00000000.
Mnóstwo instrukcji assemblera nie może być wykonanych w jednym cyklu zegara... w sumie wszystkie wykonywane są w tej samej liczbie i zależy ona od PIPELINE'u... pobranie instrukcji, dekodowanie, wykonanie, zapis do pamieci, akumulacja wyniku. To jest taki najprostszy pipeline i umożliwia on właśnie wykonywanie instrukcji w "jednym" cyklu zegara.......
Cześć, przy próbie montowania dysku (f_mount) software próbuje odczytać pierwszy sektor karty SD, w którym teoretycznie powinny znajdować się informacje do jakiego systemu plików karta została sformatowana. Jednak, gdy podglądam ten sektor to wszystkie wartości są zerami , oprócz 'rejestru' BS_55AA, który faktycznie zawiera wartość 0x55AA, co oznacza,...
Do debugowania używam GDB Hardware debuging z CodeSourcery. Wtyczka ta nie ma nic wspólnego z toolchainem który wymieniłeś. Do kompilacji używałem różnych Tool Chain między innym: Yagarto, Corss GCC, ARM Windows GCC... No to używałeś CodeSourcery czy nie? Po zaimportowaniu projektu, nawet bez kompilacji co dziwne wyskakuje 30 błędów dotyczących jednej...
CooCox ma generalnie dużo baboli i jest bardzo wykastrowany jako IDE. Niektóre babole od kilku wersji nie są poprawiane, a są naprawdę dziecinne... Żeby odpalić "wyklikany" projekt nagle okazuje się, że musisz ręcznie zmienić w plikach rozszerzenie pliku z .c na .S. To takie trudne do poprawienia? Chińczyki (; Z pewnością Debugger to dobre narzędzie,...
Ok, dzięki. Pytam bo mam problem z uruchomieniem I2C. ostatnio robiłem to dość dawno na ATMEGA, poza tym przeważnie używam swojego I2C programowego, co daje mi dowolność pinów i ewentualnych modyfikacji w szerokim zakresie, no ale nie po to jest I2C sprzętowy:) Nie rozumiem chyba sekwencji obsługi. Czy wygląda to tak że ładuję pierwszy bajt (adres urządzenia)...
Witam wszystkich! Przeszukałem forum i niestety nie znalazłem tematu rozwiązującego mój problem. Próbuję uruchomić interfejs CAN na STM32F4DISCOVERY w ramach pracy nad konwerterem USB -> CAN. Część związaną z obsługą interfejsu USB mam już za sobą ;). Oto kod odpowiedzialny za konfigurację CAN: CAN_TransmitStatus . W efekcie zawsze otrzymuję: CAN_GetFlagStatus_Pending...
Wystarczy wysłać Start i Adres. Po otrzymaniu ACK, DMA może wysłać wszystkie pozostałe dane. W tym przypadku, również adres rejestru. W przerwaniu od zakończonego transferu DMA, potrzebujesz jeszcze tylko wysłać Stop. Tylko tyle i aż tyle. W nowszych (np. F7, L4) jest trochę łatwiej. Konfiguruję i włączam DMA. Adres oraz ilość bajtów do wysłania wpisuję...
DMA1_Stream7->M0AR powinień posiadac adres wskazujący na adres zmiennej Duty, czy tak jest? DMA1_Stream7->PAR powinień wskazywać na adres rejestru TIM4->CCR3, czy tak jest ?
Cześć! potrzebuje pomocy przy interfejsie I2C, kiedyś już bawiłem się I2C bez bibliotek, ale postanowiłem nauczyć się hala, chciałbym postawić komunikacje miedzy I2C2 i I2C3. GPIO jak mniemem zainicjalizowane poprawnie, połączyłem przez płytke stykowa piny PA8 -> PB10 PC9 -> PB11 [syntax=c] void STM32F4_I2C3init() { __GPIOA_CLK_ENABLE(); __GPIOC_CLK_ENABLE();...
Z tego co wiem to pewnie trzeba będzie w rejestrze 0x04 ustawić SPK na OFF i HP na ON, następnie w rejestrze 0x06 ustawić na I2S i pewnie jeszcze volume w 0x24 i 0x25. A jeśli coś jeszcze trzeba będzie to ja już nie wiem
Witam, od dłuższego czasu walczę z tym problemem i nie potrafię znaleźć rozwiązania. Mam projekt, który pochodzi z anglojęzycznego tutoriala: [url=http://www.mind-dump.net/configurin... Wrzucony do Keila i skompilowany działa jak powinien. Problem w tym, że próbuję przenieść go na wykorzystanie bibliotek HAL, z których...
Problem rozwiązany prz sprawdzaniu flagi TXE też brakowało średnika ;) działająca inicjalizacja i odczytywanie rejestru definicje #define LSI302DL GPIO_BSRR_BS_3 #define LSI302DL_SPI1_DISABLE GPIOE-> BSRRL |= (LSI302DL) //Set #define LSI302DL_SPI1_ENABLEGPIOE-> BSRRH |= (LSI302DL) //Reset #define LSI302DL_I2C1_ENABLE GPIOE->...
(at)A.T. To jak przekazuje sę argumenty znajdziesz w opisie ABI kompilatora. Ma to znaczenie tylko jeśli całą funkcję C napiszesz w asemblerze - to znaczy umieścisz ją w odpowiednim pliku .S i wyeksportujesz za pomocą .global. Natomiast jeśli definiujesz funkcję w C i w jej ciele umieścisz wstawkę to odwołujesz się nie poprzez rejestry lecz nazwy zmiennych/argumentów....
Nie jest moją intencją przerywać Waszej dyskusji, bo mi nie przeszkadza, ale nie skorzystam tak czy siak z tego timera, bo nie mam dostępu do tego proca. Proszę w międzyczasie tylko o odpowiedź na moje pytanie czy jest możliwe 8bitowym transferem DMA zapisać poprawnie 16bitowy rejestr compare timera?
Dlaczego? Wpisuję 0 na zerowy bit rejestru CR czyli Disable? Nie, wpisujesz do rejestru DMA2_Stream5->CR zawartość rejestru rejestru DMA2_Stream5->CR ;) Zegar włączany jest w funkcji RCC_Config() To nie jest funkcja włączająca zegar. Włączasz w ten sposób sygnał resetujący DMA2 (ciekawe, czy gdzieś dalej go wyłączasz...).
Źródła i dokumentacja mówią że GPIO_AF6_OD_100MHz_PULL_UP podłącza pin do AF (MODER), rejestr typu AF na AF6 (AFRx), rejestr typu wyjścia ustawia na OD(OTYPER), rejestr prędkości na 100MHz(OSPEEDR), rejestr PuPd na Pu(PUPDR), ale nie mówią dlaczego nie działa.... :) Chyba że jest jakiś konflikt i po ustawieniu MODER i ARFx na AFx, reszty nie powinno...
11 podstawień u mnie vs. 24 u Ciebie - miłośnik długiego kodu się znalazł, he, he. ;) Plus - u mnie wiadomo, co jest w rejestrach timera, a u Ciebie - nie ;) I ostatnia różnica - mi kod działa. Wiem, na niestosowne żarty mi się zebrało, a tu Kolega w niedoli... No ale przynajmniej starałem się pomóc.
Witam, mam problem z generacją PWM z tablicy z wykorzystaniem DMA. Wcześniej ten sam projekt działał na STM32F103 ale po przejściu na Cortex M4 coś nie działa. Konfiguracja peryferiów wykonana w Cube, wszystko analogicznie do tego co działało mi na F103. W debuggerze cały czas wartości rejestrów CCR mają 0, czyli jakby DMA nie chciało przesłać z tablicy...
Zmieniłem na podane przez Ciebie funkcje: [syntax=c]#include "stm32f4xx.h" #include <stdio.h> #include "stm32f4xx_spi.h" #include "main.h" #include "gpio.h" #define CS_0 GPIOE->ODR &= ~(1<<3); #define CS_1 GPIOE->ODR |= (1<<3); void spi_init( void ) { RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;...
Zauważ, że w Twojej konfiguracji TIM5 działa jako downcounter. W tym przypadku kaskada timerów to przerost formy nad treścią. W zależności od tego, jakiej rozdzielczości potrzebujesz do pomiaru czasu, możesz odpowiednio ustawić prescaler. Tylko należy pamiętać, że jest to rejestr 16-bitowy.
Czy proponujesz zatem taki zapis: ... Jeśli w tym rejestrze wcześniej jest coś co chcesz zachować to może zostać, ja proponuje użyć operacji przypisania "=" zamiast sumy bitowej "|=" - używając sumy zakładasz że wcześniej jest tam "znana wartość", co niekoniecznie jest prawdą i czasem można się nieźle przejechać na takim założeniu... Widocznie przekroczenie...
Dziękuję bardzo wszystkim za odpowiedzi. Zacząłem od skonfigurowania Eclipse z Open-ocd 0.6.1. Niestety z procesu debugowania wynika nadal że procesor się ciągle restartuje. Dzisiaj około 19-20 postaram się odczytać rejestr przechowujący "source reset". Piotr Piechota : Według mnie nie jest to problem od strony analizatora, ale sprawdziłem zmieniając...
Na Rys. 4 widnieje przebieg napięcia pomiędzy bramka a źródłem przy włączaniu tranzystora. W moim przypadku jest to napięcie na nóżce, czyli pomiędzy źródłem górnego a drenem dolnego tranzystora. Pin został skonfigurowany jako Open Dren czyli steruje się tylko dolnym tranzystorem. Gdy wpisuje jedynkę do rejestru wyjściowego, to wyłącza się dolny tranzystor,...
Dobrze, dam:) Tylko wyjaśnij mi co to jest. Errate przeczytaj ;) I chodzi dla zegar dla SPI;) To czekanie aż zapis do rejestru się dokona, tak mniej więcej.
(at)darekdmp Skoro się uparłeś budować miernik energii na płytce do tego nie przystosowanej, to przynajmniej użyj gotowego rozwiązania w zakresie dopasowania sygnałów i próbkowania. W ten sposób możesz zrobić układ, który jakoś będzie działał. Użycie dedykowanego układu poprawia bezpieczeństwo i niezawodność, oraz znacznie upraszcza konstrukcję. Czas...
Pierwsza rzecz to ponowna próba odbezpieczenia "obszaru opcji" powoduje u mnie lądowanie w HardFault. Piszę o tym: [syntax=c] FLASH->OPTKEYR = 0x08192A3B; FLASH->OPTKEYR = 0x4C5D6E7F; while( FLASH -> SR & FLASH_SR_BSY ) {}; -> FLASH->KEYR = 0x08192A3B; -> FLASH->KEYR = 0x4C5D6E7F; -> while( FLASH -> SR & FLASH_SR_BSY ) {}; [/syntax] Po drugie po co...
Nadal nie mogę znaleźć błędu. Nie chce korzystać z tego typu biblioteki. 1. Po co się ustawia NSS , bo nie rozumiem tego chyba ? 2. Czy do PE3 dać pull_down pullup? 3. SCK w idle chyba powinno być =1 a w tej wyżej bibotece =0; 4. Co robie źle? Proszę o pomoc:) ROZWIĄZANIE: Podczas pobierania danych , trzeba wysłać też dane aby zegar chodził: uint8_t...
poszukaj sobie w timerze 1 takiego bitu o nazwie MOE P.S. Skoro używasz przykładu, to czemu nie skorzystać z funkcji konfigurującej wyprowadzenia, tak aby nikt nie musiał się zastanawiać co robisz i czy na pewno wszystko? P.S.2. Zerowanie wszystkich rejestrów timera jest całkowicie zbędne. Jeśli czujesz przemożną chęć resetowania timera, to w RCC masz...
Już poprawiłem program. Rzeczywiście namieszałem. Mam ustawiony timer 4 jako pwm i chciałbym móc go zainicializować w trybie "GATED Mode" pinem PB6. Zgodnie z datasheet tryb OPM może działać jako PWM lub Output Compare (str. 611). Wystarczy uruchomić w rejestrze CR1 bit OPM.
Szczerze mówiąc kod wygląda haxorsko więc moim zdaniem jest zbędnie skomplikowany jak na swoje możliwości. Nie wiem czy pisze się tak po to, żeby świeże osoby uważały autora za komandosa? Makra z np timerów mało dają ponieważ jeśli ktoś chce wykorzystać to makro to i tak musi zajrzeć do RM żeby zobaczyć jak się dany rejestr nazywa, tym bardziej może...
Żeby włączyć nowy transfer trzeba wyłączyć poprzedni (nawet jeśli się już skończył), przez zapisanie zer do stosownych rejestrów. Synchronizacja kanałów polega właśnie na tym, że dany kanał jest "sprzęgnięty" np. z Timerem czy z UARTem. Niemniej jednak być może dałoby się ustawić timer tak żeby wyzwalał transmisję tylko jednego bajtu na raz, tylko ciężko...
volatile nie pomógł. Dodano po 53 Może te szablony w atollicu są przestarzałe/niepoprawne i dlatego jest kłopot. IMO: To by od początku były problemy Dzięki spróbuję Dodano po 26 Optymalizacja jest ustawiona domyślnie na "None (-O0)". Jak zatrzymuję program podczas debugowania (jak napisałem , program zawsze zatrzymuję się na pierwszej pętli) to setuję...
[syntax=c]CanRxAdres1 = hcan.Instance->sFIFOMailBox[0].RIR>>21; CanRxDana1 = hcan.Instance->sFIFOMailBox[0].RDLR;[/sy... Ja odczytuję bezpośrednio z rejestru.
Witam, Z tego co ja zdążyłem zauważyć (u siebie), problem może wynikać z miminalnego czasu "inactive time" czyli 50ns pomiędzy transmisjami (CSN 1). Zważywszy, że w przypadku STM32F4 szybkość wykonywania instrukcji jest kilkukrotnie (co najmniej) szybsza, powoduje to naruszenie czasu, jaki staruszek nRF potrzebuje na otrząśnięcie się po ostatniej transmisji,...
Dane odczytane z tej transmisji będą gotowe dopiero po ostatnim takcie zegara SPI. Dopiero wtedy odczyt DR da nam to, co przyszło z linii. Dlatego należy po zapisaniu czegoś do DR poczekać na ustawienie flagi RXNE. Jak wykonujesz krokowo, to się ustawi od razu - jak wykonujesz normalnie zapewne nie zdąży. No tak, oczywiście jest dokładnie tak jak piszesz....
Zgodnie z dokumentacja, CCER służy do fizycznego podłączenia wyjścia timera do nogi uc która może kontaktować się ze światem zewnętrznym. Jednak nawet przed chwilą sprawdziłem, że po wyłączeniu tego bitu konwersja nie następuje. Sam wiem, że miałem problem z konfiguracja ADC z wyzwalaniem timerem właśnie przez ten bit. Co do erraty i rozsunięcia włączenia...
Jak widać na screenach on używa innej niż Ty i w jego bibliotece tego makra nie ma. Jak widać na screenach używa dokładnie tych samych nagłówków CMSIS dla STM32F4 co każdy (chyba że znasz jeszcze jakąś "bibliotekę" która ma główny nagłówek o nazwie `stm32f4xx.h` i ma dokładnie takie same definicje dla USARTa, innych rejestrów GPIO czy dla RCC?). Ale...
Aa ten CLK miales na mysli, ok. Dość częstym problemem z odbiorem/krótkim zasięgiem jest lekki rozjazd między F nadajnika i odbiornika. Skonfigurowanie identycznie obu transceiverow nie gwarantuje precyzyjnego dostrojenia, bo każdy układ ma trochę inny rozrzut parametrów (taniego) rezonatora jaki jest stosowany w tych układach. Rejestrem 0x80xx można...
When the DMA mode is enabled (DMA bit set to 1 in the ADC_CR2 register), after each conversion of a regular channel, a DMA request is generated. Wyzwalanie DMA2 Channel 0 lub 4 przychodzi tylko z regularnej konwersji. Jak sam zauważyłeś, nie ma większego sensu DMA dla konwersji Injected, kiedy wyniki spokojnie lądują w dedykowanych rejestrach. Jeżeli...
Widać gdzieś mi umknęło :) w takim razie dla mnie urządzenie jeszcze bardziej przydatne. Osobiście gdybym miał wiedzę "jak się zabrać" za tego typu rejestrator zrobiłbym urządzenie do nagrywania rozmów z radiotelefonów na przykład, do tego karta sieciowa i dostęp do nagrań po FTP. Ale niestety zbyt to skomplikowane jak dla mnie, a szkoda bo widać ma...
(at)JarekC 1. Ponieważ po wyłączeniu trybu debuggera, żadne przerwania zewnętrzne, wejścia nie odpowiadają, podczas debuggingu wszystko fajnie działa. 2. Nie, nie ma żadnych pułapek. A czy to nie jest spowodowane wyczyszczeniem pamięci flash, bo kiedyś to robiłem poprzez ST-Link, może jakieś rejestry się wyczyściły czy coś?
wgrywanie stm32f4 stm32f4 przetwornik stm32f4 discovery
czujnik otwarcie klapa dobór parownika przewody olejowe
kemppi rezystor kemppi rezystor
Opóźnione działanie hamulca górskiego w Volvo - przyczyny i diagnostyka Lokalizacja regulatora napięcia w Gilera Runner 125