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

STM32+Attiny2313 - Nie mogą skomunikować się po RS232

mikmas 12 Maj 2016 21:50 897 4
  • #1 12 Maj 2016 21:50
    mikmas
    Poziom 18  

    Posiadam 2 układy:
    - hy-smart stm32 na STM32F103
    - urządzenie na attiny2313

    oba udało mi się ładnie dotychczas ogarnąć, oba pracują poprawnie, jednak pozostaje ostatni krok - połączyć je. Jako, że hy-smart oraz attiny mają uart to na ten protokół padł wybór. Niestety mimo wielu podejść nie udało mi się wysłać poprawnie pakietu. Gdzie robię błąd?

    Tak wygląda połączenie (skoncentruję się na razie jedynie na kierunku 2313->stm):
    STM32+Attiny2313 - Nie mogą skomunikować się po RS232
    co dziwne, gdy na T2in dam 0v to na T2out mam 10v, a jak dam 5v to jest -10v (nie powinno być odwrotnie?)

    Jak widać proste jak budowa radzieckiego czołgu, jednak dla pewności dam cały obraz układu z attiny (niestety budowalem od razu płytkę, bez schematu):
    STM32+Attiny2313 - Nie mogą skomunikować się po RS232

    Dodatkowo daję w załączniku schemat budowy tego HY-Smarta.
    Jeżeli chodzi o USART1 (przez niego jest programowany za pośrednictwem bootloadera) to udało mi się bez większych problemów porozumieć z moim programem na komputerze, więc kod to tak naprawdę przerobiony z USART1 na wyjście USART2 (może tu zrobiłem gdzieś błąd?).

    Kod attiny2313:
    UART.cpp

    Kod: c
    Zaloguj się, aby zobaczyć kod


    main.cpp
    Kod: c
    Zaloguj się, aby zobaczyć kod

    F_CPU=20 000 000 //20MHz

    Oraz kod po stronie stm-a:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Efekt jest taki, że dioda miga, a na wyświetlaczu jest jedynie "Ready...".
    Płacę jak za prezydenta. Nie mam już pomysłów, a to właściwie ostatni kroczek

    0 4
  • #2 13 Maj 2016 02:07
    megao
    Poziom 23  

    Na poglądowym schemacie który zamieściłeś widać, że podłączyłeś linię TxD jednego mikrokontrolera do TxD drugiego.
    Powinno być TxD ---> RxD.

    0
  • #3 13 Maj 2016 08:47
    mikmas
    Poziom 18  

    "Nie wydaje mnie się". Przyjrzyj się układowi (załącznik). Projektant miał po prostu duże poczucie humoru i tak oznaczył na plytce TxD, ale mu chyba chodziło o TxD układu nadającego (czyli RxD). Chińczycy lubią czasem utrudnić

    0
  • #4 13 Maj 2016 12:10
    2675900
    Użytkownik usunął konto  
  • #5 13 Maj 2016 16:15
    mikmas
    Poziom 18  

    Przepisywany był z przykładu, gdzie był użyty USART1 (PA9). USART2 jest na PA2, niestety komentarz zostawiłem

    Dodano po 2 [godziny] 19 [minuty]:

    OK, znalazłem błąd:
    zamiast
    RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB1Periph_USART2, ENABLE);
    powinno być
    RCC_APB1PeriphClockCmd( RCC_APB1Periph_USART2, ENABLE);

    0