STM32 новичку в ARM что к чему

Кто любит RISC в жизни, заходим, не стесняемся.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32 новичку в ARM что к чему

Сообщение scorpi_0n »

http://www.st.com/st-web-ui/static/acti ... 171691.pdf
Смотреть Figure 1. Power supply overview. Там всё нарисовано.
Реклама
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Спасибо!!!!
Реклама
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Товарищи, кто работал с китайским экраном на ILI9341 по SPI? Как читать с него? Запись данных идет отлично, но не могу прочитать ни один регистр (пробовал 0x04, 0xD3), все вроде согласно даташиту, анализатором смотрю шину - команда подается, а экран молчит. Но на посыл любой команды шина MISO отвечает - вроде как spi правильно работает. В сети много примеров работы с ним на C и через какую-то загадочную команду D9, которой нет в даташите.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
baghear
Опытный кот
Сообщения: 791
Зарегистрирован: Вт июн 17, 2014 00:34:26

Re: STM32 новичку в ARM что к чему

Сообщение baghear »

Вот тут можно почитать, там и подключение по FSMC описывается, раз уж Вы в ветке про армы пишите.
https://hubstub.ru/electronics/44-inici ... ega16.html
https://hubstub.ru/electronics/61-podkl ... i9314.html
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Спасибо, но это несколько не то, там про инициализацию, да еще и для дисплея с параллельным интерфейсом ...

Другой вопрос тогда, как правильно инициализировать SPI, смотрю разные исходники: кто MISO как input pull-down настраивает, кто как AF push-pull out, кто как AF open-drain. Где же правда. RM0008 говорит, что должен быть input (floating, pull-up или pull-down).
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Реклама
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32 новичку в ARM что к чему

Сообщение scorpi_0n »

А не факт что у вас 9341 а не что-то подобное и не факт что там реализовано чтение.
Правильная настройка SPI по даташиту. Подтяжка только по надобности и необходимости. Зависит от протокола общения МК с девайсом. Как пример SD. Но там юзают внешнюю подтяжку и номиналы уже оговорены в документации на SD.
Реклама
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

scorpi_0n писал(а):А не факт что у вас 9341
А какие есть варианты еще подобного?
scorpi_0n писал(а):не факт что там реализовано чтение
Но выход SDO (MISO) там есть для чего-то ...

Вот смотрю на шине, индикатор что-то выдает:
Вложения
readid.png
(67.89 КБ) 428 скачиваний
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32 новичку в ARM что к чему

Сообщение scorpi_0n »

Alexey_N писал(а): А какие есть варианты еще подобного?
Не знаю. С 9341 дела не имел и не задавался целью. Но попадались другие где чтение не работало. Или работало но по ID не удавалось опознать чип. Решалось как и у всех методом подбора инита.
Но выход SDO (MISO) там есть для чего-то ...
Кетай. Там что угодно может быть. Особенно если малая цена.
Вот смотрю на шине, индикатор что-то выдает:
Больше похоже на мусор. Нет соответствия с сигналом CLK.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

scorpi_0n писал(а):Больше похоже на мусор. Нет соответствия с сигналом CLK.
Да, действительно, он по шине MISO так выдает на все команды мусор, хотя их и принимает. А что там по поводу подбора инита?

UPD. Хотя вот команда чтения GRAM работает вроде как:
Вложения
gram.png
(66.8 КБ) 411 скачиваний
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Подскажите такой момент. SPI настроена в режиме Full-duplex, т.е. как я понял, при записи байта происходит сразу и чтение (что видно на осциллограмме выше). Использую такую функцию:

Код: Выделить всё

_spi_rw_byte:

        push    {r5, r6, lr}
        ldr     r5, [_tft_spi]
        virtual at r5
          .spi SPI_RegMap
        end virtual
    @@: ldr     r6, [.spi.SR]
        tst     r6, SPI_SR_TXE
        beq     @r
        str     r0, [.spi.DR]
    @@: ldr     r6, [.spi.SR]
        tst     r6, SPI_SR_RXNE
        beq     @r
        ldr     r2, [.spi.DR]
    @@: ldr     r6, [.spi.SR]
        tst     r6, SPI_SR_BSY
        bne     @r
        pop     {r5, r6, pc} 
Но, почему то, при чтении из регистра DR читается не тот байт, который был выдан на шину в момент записи, а предыдущий, почему так?
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

Alexey_N писал(а):

Код: Выделить всё

_spi_rw_byte:

        push    {r5, r6, lr}
        ldr     r5, [_tft_spi]
        virtual at r5
          .spi SPI_RegMap
        end virtual
    @@: ldr     r6, [.spi.SR]
        tst     r6, SPI_SR_TXE
        beq     @r
        str     r0, [.spi.DR]
    @@: ldr     r6, [.spi.SR]
        tst     r6, SPI_SR_RXNE
        beq     @r
        ldr     r2, [.spi.DR]
    @@: ldr     r6, [.spi.SR]
        tst     r6, SPI_SR_BSY
        bne     @r
        pop     {r5, r6, pc} 

1) Если работаете в режиме 8 или менее бит, то тогда желательно использовать byte access (ldrb/strb).

Код: Выделить всё

strb     r2, byte  [.spi.DR]
2) Инициализацию SPI предъявите 8)
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Вот инициализация:

Код: Выделить всё

_tft_iface_init:

        push    {r0, r1, r2, lr}
        ;   TFT_PIN_CS: p-p out
        ;   TFT_PIN_LED: p-p out
        ;   TFT_PIN_RST: p-p out
        ;   TFT_PIN_DC: p-p out
        ;   TFT_PIN_SCK: out push-pull, AF
        ;   TFT_PIN_MISO: in pull-down, AF
        ;   TFT_PIN_MOSI: out push-pull, AF
        ldr     r1, [_tft_port]
        virtual at r1
          .gpio GPIOx_RegMap
        end virtual
        ldr     r0, [_tft_pin_cf]
        str     r0, [.gpio.CRL]
        ;   SPI_Direction_2Lines_FullDuplex
        ;   SPI_Mode_Master
        ;   SPI_DataSize_8b
        ;   SPI_CPOL_Low
        ;   SPI_CPHA_1Edge
        ;   SPI_NSS_Soft
        ;   SPI_BaudRatePrescaler_16
        ;   SPI_FirstBit_MSB
        ldr     r1, [_tft_spi]
        virtual at r1
          .spi SPI_RegMap
        end virtual
        ldr     r0, [_spi_cr1]
        str     r0, [.spi.CR1]
        orrs    r0, SPI_CR1_SPE
        str     r0, [.spi.CR1]
        pop     {r0, r1, r2, pc}  

_tft_port       dw TFT_PORT
_tft_pin_cs     dw TFT_PIN_CS
_tft_pin_dc     dw TFT_PIN_DC
_tft_pin_rst    dw TFT_PIN_RST
_tft_pin_led    dw TFT_PIN_LED
_tft_pin_cf     dw \
  GPIO_CRL_MODE0 + \                    ; TFT_PIN_CS
  GPIO_CRL_MODE1 + \                    ; TFT_PIN_LED
  GPIO_CRL_MODE2 + \                    ; TFT_PIN_RST
  GPIO_CRL_MODE3 + \                    ; TFT_PIN_DC
  GPIO_CRL_CNF4_0 + \
  GPIO_CRL_CNF5_1 + GPIO_CRL_MODE5 + \  ; TFT_PIN_SCK
  GPIO_CRL_CNF6_1 + \                   ; TFT_PIN_MISO
  GPIO_CRL_CNF7_1 + GPIO_CRL_MODE7      ; TFT_PIN_MOSI
_tft_spi        dw TFT_SPI
_spi_cr1        dw SPI_CR1_MSTR + \
                   SPI_CR1_SSM + \
                   SPI_CR1_SSI + \
                   SPI_CR1_BR_1 + SPI_CR1_BR_0 ; fpclk/16 
UPD. В RM0008 на рис. 240 видно, что прочитанный байт появится в буфере, когда завершатся 8 тактов и установится флаг RXNE, что я вроде и делаю в коде. Применительно к моему случаю получается такая картина (240my.jpg), которую тоже вроде как подтверждает осциллограмма с анализатора (gram2.jpg), но по факту после задержки 50мкс (необходима для отработки посланной команды дисплею), первое чтение возвращает 0x00 (тут все ок), а вот второе тоже 0x00, хотя должно быть 0xFC, если читать дальше что возвращается это самое 0xFC, потом 0x00 и, наконец последнее 0xFC. Получается, что чтение отстает. Не могу найти где косяк.
Вложения
240my.jpg
(160.46 КБ) 279 скачиваний
gram2.jpg
(187.51 КБ) 425 скачиваний
240.png
(75.94 КБ) 415 скачиваний
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

Re: STM32 новичку в ARM что к чему

Сообщение Andrew Martin »

RM0008, page 701:

2. Write the first data item to be transmitted into the SPI_DR register (this clears the TXE
flag).
3. Wait until TXE=1 and write the second data item to be transmitted. Then wait until
RXNE=1 and read the SPI_DR to get the first received data item (this clears the RXNE
bit). Repeat this operation for each data item to be transmitted/received until the n–1
received data.

4. Wait until RXNE=1 and read the last received data.
Я так понял, что первый принятый байт можно читать после двух отправленных.
Оно?
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Хм, это что, получается надо еще что-то послать, чтобы прочитать первое? А если нельзя больше посылать? Как прочитать тогда?

UPD. Ура, похоже нашел причину. У меня было две процедуры записи/чтения байта, точнее одна просто записывала (ждет флаг TXE и выполняет strb), вторая - rw (аналогично записывает, но еще ждем флаг RXNE и читает: ldrb), для команды я использовал ту, что только пишет, а данные читал второй, в результате одна операция чтения пропускалась и флаг rxne не сбрасывался. Когда оставил только rw_byte функцию, убрал лишние проверки флага BSY (он все равно почти всегда 1, да и на окончание передачи указывает RXNE тоже) все пришло в норму.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32 новичку в ARM что к чему

Сообщение scorpi_0n »

Надо отличать непрерывный (continuous) и прерывный т. е. обычный (discontinuous) режим передачи по SPI. Это связано с наличием FIFO и присутствуют эти режимы во всех STM8 и STM32.
Непрерывный режим описан двумя постами выше.
Обычный режим работает как обычно. Загружаем данные в DR ждём когда RXNE=1 и вычитываем DR. Загружаем следующие данные в DR ждём когда RXNE=1 и вычитываем DR и т.д.
Аватара пользователя
Alexey_N
Сверлит текстолит когтями
Сообщения: 1273
Зарегистрирован: Вт фев 01, 2011 17:56:40
Откуда: г. Жуковка, Брянская обл.

Re: STM32 новичку в ARM что к чему

Сообщение Alexey_N »

Учусь только :oops: SPI первый раз программирую. Благодарю за помощь. Все заработало, и чтение регистров и чтение пикселей.
Индукционный нагреватель - 20% (наладка). TIG сварка - 10% (детальки)
ВЧ генератор 150МГц - 80% (наладка). Мостовой ИИП - 40% (подкл. ОС).
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

Alexey_N, если код по ссылке допилить...

http://blablacode.ru/%D0%BC%D0%B8%D0%BA ... i9341.html

http://blablacode.ru/node/513
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32 новичку в ARM что к чему

Сообщение scorpi_0n »

dosikus писал(а):Alexey_N, если код по ссылке допилить...
А есть ли в этом особый смысл? Там пишут.
Т.е. возможно и кино крутить на этом дисплее
Что сравнивать малину с её набортной РАМ?
на самом деле DMA умеет передавать только 65535 байт. А нам нужно передать 320*240*2, что несколько больше. Пришлось разбить на несколько тразакций.
Слышал что можно и не разбивать но опять же РАМ то не в избытке.
Скорость увеличилась в разы. Но все равно заметно обновление кадра.
ТЕ нужно задействовать если оно есть. Люди пишут что на СТМ8 и ТФТ от мобилы заполнение дисплея за 19 мС и тиринга не видно. А здесь всё таки F407.
Аватара пользователя
dosikus
Друг Кота
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Re: STM32 новичку в ARM что к чему

Сообщение dosikus »

А хз. Стоит ли вообще в эмбедд возвращаться? :)))

Да и ссылки кинул ибо товарищ не мог с SPI найти.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

Re: STM32 новичку в ARM что к чему

Сообщение scorpi_0n »

Не знаю. У меня пока никаких явных предпосылок нет. Как и скакать впереди планеты всей. Всё на уровне ненавязчивого хобби.
товарищ не мог с SPI найти
Да SPI тут по любому будет тормозом с какой стороны не посмотри. Я к тому чтобы не было особых надежд на чудо.
Ответить

Вернуться в «ARM»