Qpa Napisano Październik 4, 2010 Udostępnij Napisano Październik 4, 2010 Cześć,Nie dawno zacząłem przygodę z STM32. I mam duży problem nad którym siedzę już parę dni. Chciałem stworzyć prostą komunikację z komputerem gdzie przez terminal odpowiednimi komendami będzie można gasić i zapalać diody i w drugą stronę przesyłać które diody są zapalone. nie wiem gdzie jest tu błąd więc Ustawienie GIPO void GPIO_Conf(void){ GPIO_InitTypeDef GPIO_InitStructure; // Konfiguracja PB GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); // Konfiguracja PA0 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // Konfiguracja PA9 jako Tx GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); // Konfiguracja PA010 jako Rx GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_ResetBits(GPIOB, GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14 | GPIO_Pin_15); GPIO_SetBits(GPIOB, GPIO_Pin_8| GPIO_Pin_10); } Konfiguracja NIVC void NVIC_Conf(void){ NVIC_InitTypeDef NVIC_InitStructure; #ifdef VECT_TAB_RAM // Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x20000000 NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else // VECT_TAB_FLASH // W przeciwnym wypadku ustaw na 0x08000000 NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif // Wybranie grupy priorytetów NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); // Wlacz przerwanie od USART1 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } #ifdef DEBUG void assert_failed(uint8_t* file, uint32_t line) { while (1); } #endif Konfiguracja UART USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_ITConfig(USART1, USART_IT_TXE, DISABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE); USART_Cmd(USART1, ENABLE); Obsługa przerwan extern uint8_t odebrano_polecenie, RxBuf[], TxBuf[], RxIndex , TxIndex; void USART1_IRQHandler(void) { if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) { RxBuf[RxIndex++] = USART_ReceiveData(USART1); if(RxBuf[RxIndex-1] == 0x0D) { odebrano_polecenie = 1; RxIndex = 0; } USART_ClearITPendingBit(USART1, USART_IT_RXNE); } if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET) { USART_SendData(USART1, TxBuf[TxIndex++]); USART_ClearITPendingBit(USART1, USART_IT_TXE); if(TxBuf[TxIndex-1] == 0x0D) { USART_ITConfig(USART1, USART_IT_TXE, DISABLE); TxIndex = 0; } USART_ClearITPendingBit(USART1, USART_IT_TXE); } } Jeszcze dodam że używam zestawu startowego ZL27ARM z STM32F103VBT6 sklep Kamami A program jest w większości z listingu z ksiązki STM32 w Praktyce Pana Paprockiego lecz niestety program nie działał (nawet diody miał gdzie indziej) Jeśli macie działający program UART na przerwaniach to bardzo proszę o podzielenie się nim e-mail cool_kuba@tlen.pl Link do komentarza Share on other sites More sharing options...
MirekCz Październik 4, 2010 Udostępnij Październik 4, 2010 Nie dałeś całego kodu. Włączyłeś zegar do UART? Nie używałem go jeszcze, ale powinno to być coś w stylu RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); (kod z przykładu książkowego) Co do książki to niestety jest fatalnie napisana. Bardziej zagmatwać tego autor nie mógł. Podaje kod i gdzieś na początku jest wywołanie funkcji konfiguracyjnej zegary, ale tej już w książce nie znajdziesz. Polecam ściągnąć pełne listingu programów z http://www.btc.pl/pliki/stm32wp.zip Link do komentarza Share on other sites More sharing options...
Qpa Październik 4, 2010 Autor tematu Udostępnij Październik 4, 2010 tak zegary są włączone. A właśnie z tą pełną wersją się męczę bo niby te programy są napisane na ten zestaw który ja posiadam i przetestowane ale to nie może być prawdą ponieważ ktoś kto to pisał pomylił nawet port z diodami^^ i to nie jest jedyny błąd... bo jak to naprawiłem to nadal nie działa później doszłem jeszcze do tego że ktoś nie dodał USART_ClearITPendingBit(USART1, USART_IT_RXNE); A nie wiecie czasem gdzie mozna znaleść opis tej całej biblioteki tylko troche dokładniejszy czyli w pomocy mogę znaleść że GPIO_Mode_Out_PP = 0x10,a ja chciał bym wiedzieć co to znaczy czyli jak ustawiam wyjście jeśli teraz chciał bym to zrobić to muszę zaglądnąć do dokumentacji i sprawdzić co oznacza 5 bit któregoś tam rejstru a to droga trochę na około no ale dzięki za odpowiedź jak by ktoś miał program wykorzystujący przerwania do komunikacji UART to bardzo prosze o podzielenie się lub o maila może sam znajdę problem A program to stm32f10x_it.h stm32f10x_it.c stm32f10x_conf.h main.c Link do komentarza Share on other sites More sharing options...
MKPyniek Październik 4, 2010 Udostępnij Październik 4, 2010 Całą bibliotekę wraz z dokumentację znajdziesz na stronie producenta STM32F10x_StdPeriph_Lib. ST daje też sporo przykładów. Osobiście z nich głównie jechałem jak pisałem obsługę peryferii. Podstawą jest również dokumentacja i errata do układu. Co do kodu, to większego błędu nie znalazłem. Wygląda, że zegary, USART i GPIO konfigurowane są poprawnie. U siebie mam tak samo i działa, tylko że ja gadam nie z kompem, tylko z innym układem przez USART. Nie sprawdzałem natomiast, czy zgadzają się używane przez ciebie piny ze schematami. Spróbuj zrobić sobie echo na procku. Jak odbierzesz znak, od razu wysyłaj go z powrotem. Wtedy będziesz wiedział, czy masz jakąkolwiek komunikację. Link do komentarza Share on other sites More sharing options...
Polecacz 101 Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Zarejestruj się lub zaloguj, aby ukryć tę reklamę. Produkcja i montaż PCB - wybierz sprawdzone PCBWay! • Darmowe płytki dla studentów i projektów non-profit • Tylko 5$ za 10 prototypów PCB w 24 godziny • Usługa projektowania PCB na zlecenie • Montaż PCB od 30$ + bezpłatna dostawa i szablony • Darmowe narzędzie do podglądu plików Gerber Zobacz również » Film z fabryki PCBWay
marcelix Październik 4, 2010 Udostępnij Październik 4, 2010 To nawet nie jest opis tylko przykłady. Ta biblioteka to jakaś porażka. Pisanie z tą biblioteką jak dla mnie komplikuje pisanie na stm32. Program przepisywałeś ręcznie czy skopiowałeś z przykładów? Nawet wysyłanie do komputera nie działa? Link do komentarza Share on other sites More sharing options...
Qpa Październik 4, 2010 Autor tematu Udostępnij Październik 4, 2010 To nawet nie jest opis tylko przykłady. Ta biblioteka to jakaś porażka. Pisanie z tą biblioteką jak dla mnie komplikuje pisanie na stm32. Program przepisywałeś ręcznie czy skopiowałeś z przykładów? Nawet wysyłanie do komputera nie działa? Jest to program z książki STM32 w Praktyce lecz niestety przykład był zawalony zupełnie i ja starałem się go doprowadzić do działania lecz mi się nie udało. ... Co do kodu, to większego błędu nie znalazłem. Wygląda, że zegary, USART i GPIO konfigurowane są poprawnie. U siebie mam tak samo i działa, tylko że ja gadam nie z kompem, tylko z innym układem przez USART. Nie sprawdzałem natomiast, czy zgadzają się używane przez ciebie piny ze schematami. Spróbuj zrobić sobie echo na procku. Jak odbierzesz znak, od razu wysyłaj go z powrotem. Wtedy będziesz wiedział, czy masz jakąkolwiek komunikację. Czy mógł byś mi wysłać swój program. Lub przynajmniej fragmenty interesuje mnie konfiguracja NVIC Konfiguracja USART oraz obsługa przerwań jeśli nie jest to problem to bardzo proszę Dzięki za odpowiedzi pozdro! Link do komentarza Share on other sites More sharing options...
MKPyniek Październik 5, 2010 Udostępnij Październik 5, 2010 @marcelix: zgodzę się, że te biblioteki są trochę niedopracowane, ale w większości przypadków nie miałem problemu z ich stosowaniem. Dokumentacja biblioteki nie wyczerpuje całego tematu, bo musiałaby w sobie zawierać całą dokumentację do STM32. Tylko w takiej formie możliwe byłoby poznanie co jest dokładnie do czego. Dlatego napisałem, że podstawą jest dokumentacja układu. @Qpa: podeśle ci odpowiednie fragmenty kodu, niestety dopiero jutro wieczorem. Chociaż nie widziałem znaczących różnic pomiędzy moim, a tym co ty napisałeś. Przede wszystkim, spróbuj najpierw ustalić, czy cokolwiek odbierasz od kompa. Dopiero potem zabierz się za przetwarzanie odebranych znaków. 1 Link do komentarza Share on other sites More sharing options...
Qpa Październik 7, 2010 Autor tematu Udostępnij Październik 7, 2010 @Qpa: podeśle ci odpowiednie fragmenty kodu, niestety dopiero jutro wieczorem. Chociaż nie widziałem znaczących różnic pomiędzy moim, a tym co ty napisałeś. Przede wszystkim, spróbuj najpierw ustalić, czy cokolwiek odbierasz od kompa. Dopiero potem zabierz się za przetwarzanie odebranych znaków. Super dzięki wielkie. A tak odbieranie i nadawanie działa ale gdy robię to nie na przerwaniach a ja właśnie chciałem to spróbować zrobić na przerwaniach ale rzeczywiście może warto spróbować. P.S. Na razie nie otrzymałem maila.; ) Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »