Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

stm32f0 spi режим GPIO

Вс мар 20, 2022 13:14:59

Доброго времени.
stm32f042k6t6. Настраиваю spi Transmit only master. Собственно вопрос: в каком режиме надо настроить GPIO
-AF_PP
-AF_PP_PU
-AF_PP_PD
-AF_OD
-AF_OD_PU
-AF_OD_PD
Где это написано?
Спасибо.

Re: stm32f0 spi режим GPIO

Вс мар 20, 2022 13:40:34

MOSI и SCK в AF_PP

Re: stm32f0 spi режим GPIO

Вс мар 20, 2022 16:11:05

Доброго времени.
stm32f042k6t6. Настраиваю spi Transmit only master. Собственно вопрос: в каком режиме надо настроить GPIO
-AF_PP
-AF_PP_PU
-AF_PP_PD
-AF_OD
-AF_OD_PU
-AF_OD_PD
Где это написано?
Спасибо.

Это написано в мурзилках на микрухи, которые ты собираешься подключать.
Тебе нужны сигналы (минимум): MOSI, MISO, CLK, CS и, желательно, RST. Вот и смотри, как эти входы сделаны на тех микрухах. Скорей всего, достаточно будет РР без подтяжек. Ещё учти, что пока ты не настроил ноги у МК, они висят в воздухе, поэтому, возможно, понадобится притянуть хотя бы CS к какой-то шине питания высокоомным резистором.

Re: stm32f0 spi режим GPIO

Пн мар 21, 2022 11:52:22

Подключать собираюсь ST7735. Пойду листать DS на ST7735. Спасибо.

Добавлено after 2 hours 6 minutes 54 seconds:
Дано: stm32f0..., дисплей TFT_RGB 128x160 на базе ST7735s.
Задача: настроить SPI и вывести на дисплей точку в заданных координатах определенного цвета.
Если кому-то не сложно заделать разьяснения по поводу TFT_RGB 128x160 на базе ST7735s. Режим альтернативной функции (AF_PP, AF_PP_PU, AF_PP_PD, AF_OD, AF_OD_PU, AF_OD_PD) какой выбрать со ссылкой на документацию, порядок инициализации. Как понять из DS на ST7735s как инициализировать.
Спасибо.

Re: stm32f0 spi режим GPIO

Пн мар 21, 2022 17:58:49

Поработаю минутку за гуглопереводчик.
AF = Alternate Function. Альтернативная функция пина (относительно "обычной" - GPIO - Порт ввода-вывода ОБЩЕГО НАЗНАЧЕНИЯ). Альтернативная функция, грубо говоря, специальное назначение и в этом режиме порт переключается на управление каким-либо периферийным блоком и управляется уже им.
PP = Push-Pull. Значит может работать как пин, который с силой тянет ножку как к плюсу питания, так и к общему провода. Как правило, с допустимым током до 50-100мА.
PU / PD - Pull Up / Pull Down. Подтяжка вверх или вних. Подключается дополнительный резистор прямо на кремнии. Номинал где-то между 20кОм и 50кОм. Может варьироваться.
OD - Open-Drain вывод. В отечественной номенклатуре TTL чипов обозначалось как "ОК" - Вывод с открытым коллектором. Тянет ножку только к нулю. Если записать в пин "1", но отключить подтяжку к плюсу, оставив провод "болтаться в воздухе", и попытаться измерить на нём напряжение, то напряжение будет плавать, а, в зависимости от входного сопротивления мультиметра - даже покажет ноль. Можно собирать несколько таких пинов в схему подключения "Проволочное И".

Соответственно, для SPI портов пины /CS, MOSI, SCK должны быть AF_PP, MISO - AF_INPUT.

По поводу того, где читать - Reference Manual, как правило, раздел 6 - GPIO.

По процессу инициализации дисплея - в референс-мануале на контроллер дисплея.
Можете попробовать код, взятый здесь
Последний раз редактировалось AlanDrakes Вт мар 22, 2022 06:09:42, всего редактировалось 1 раз.

Re: stm32f0 spi режим GPIO

Пн мар 21, 2022 18:32:08

Поработаю минутку...


Про режим AF_PP с натяжкой вроде бы понял.
По поводу инициализации: готовых кодов в интернете есть много. Уровень моего английского не позволяет полноценно понять DS на st7735. Например для LCD1602 конкретно указана последовательность инициализации, даже моего уровня знания английского и при помощи интернета вполне себе понятно. А вот на st7735 нет такой последовательности или она так завуалирована... Вот я и прошу, что если кто-то сможет расписать инициализацию оного дисплея с привязкой к документации по пунктам. Думаю не мне одному это пригодилось бы.

Re: stm32f0 spi режим GPIO

Пн мар 21, 2022 21:33:49

mab72, когда то игрался с 7735.
последовательность команд инициализации была у продавана на Али.
По его мурзилке я и сделал. Устройство уже несколько лет работает.
Спойлер
Код:
#define ST7735_MADCTL_MY   0x80
#define ST7735_MADCTL_MX   0x40
#define ST7735_MADCTL_MV   0x20
#define ST7735_MADCTL_RGB   0x00
#define ST7735_MADCTL_BGR   0x08
#define ST7735_MADCTL_ML   0x10
#define ST7735_MADCTL_MH   0x04

#define ST7735_RGB444      0x03
#define ST7735_RGB565      0x05
#define ST7735_RGB666      0x06



#define ST7735_NOP         0x00
#define ST7735_SWRESET      0x01
//#define ST7735_RDDID      0x04
//#define ST7735_RDDST      0x09

#define ST7735_SLPIN      0x10
#define ST7735_SLPOUT      0x11
#define ST7735_PTLON      0x12
#define ST7735_NORON      0x13

#define ST7735_INVOFF      0x20
#define ST7735_INVON      0x21
#define ST7735_DISPOFF      0x28
#define ST7735_DISPON      0x29
#define ST7735_CASET      0x2A
#define ST7735_RASET      0x2B
#define ST7735_RAMWR      0x2C
#define ST7735_RGBSET      0x2D
//#define ST7735_RAMRD      0x2E

#define ST7735_PTLAR      0x30
#define ST7735_COLMOD      0x3A
#define ST7735_MADCTL      0x36


Код:
// инициализация
void initDisplayST7735(void){
   setResetPinST7735(0);
   _delay_ms(50);
   setResetPinST7735(1);
   _delay_ms(10);

   sendCommandST7735(ST7735_SWRESET);
   _delay_ms(120);
   
   sleepModeST7735(0);   //   ST7735_SLPOUT
   _delay_ms(120);

   powerModeST7735(1);   //   ST7735_DISPON
   _delay_us(150);
    
   // ali seller's init
   //--- ST7735S Frame Rate
   sendCommandST7735(0xB1);
   sendDataST7735(0x05);
   sendDataST7735(0x3C);
   sendDataST7735(0x3C);
   sendCommandST7735(0xB2);
   sendDataST7735(0x05);
   sendDataST7735(0x3C);
   sendDataST7735(0x3C);
   sendCommandST7735(0xB3);
   sendDataST7735(0x05);
   sendDataST7735(0x3C);
   sendDataST7735(0x3C);
   sendDataST7735(0x05);
   sendDataST7735(0x3C);
   sendDataST7735(0x3C);
   //--- End ST7735S Frame Rate
   sendCommandST7735(0xB4); //Dot inversion
   sendDataST7735(0x03);
   //--- ST7735S Power Sequence
   sendCommandST7735(0xC0);
   sendDataST7735(0x28);
   sendDataST7735(0x08);
   sendDataST7735(0x04);
   sendCommandST7735(0xC1);
   sendDataST7735(0XC0);
   sendCommandST7735(0xC2);
   sendDataST7735(0x0D);
   sendDataST7735(0x00);
   sendCommandST7735(0xC3);
   sendDataST7735(0x8D);
   sendDataST7735(0x2A);
   sendCommandST7735(0xC4);
   sendDataST7735(0x8D);
   sendDataST7735(0xEE);
   //--- End ST7735S Power Sequence
   sendCommandST7735(0xC5); //VCOM
   sendDataST7735(0x12);
   //--- ST7735S Gamma Sequence
   sendCommandST7735(0xE0);
   sendDataST7735(0x04);
   sendDataST7735(0x22);
   sendDataST7735(0x07);
   sendDataST7735(0x0A);
   sendDataST7735(0x2E);
   sendDataST7735(0x30);
   sendDataST7735(0x25);
   sendDataST7735(0x2A);
   sendDataST7735(0x28);
   sendDataST7735(0x26);
   sendDataST7735(0x2E);
   sendDataST7735(0x3A);
   sendDataST7735(0x00);
   sendDataST7735(0x01);
   sendDataST7735(0x03);
   sendDataST7735(0x13);
   sendCommandST7735(0xE1);
   sendDataST7735(0x04);
   sendDataST7735(0x16);
   sendDataST7735(0x06);
   sendDataST7735(0x0D);
   sendDataST7735(0x2D);
   sendDataST7735(0x26);
   sendDataST7735(0x23);
   sendDataST7735(0x27);
   sendDataST7735(0x27);
   sendDataST7735(0x25);
   sendDataST7735(0x2D);
   sendDataST7735(0x3B);
   sendDataST7735(0x00);
   sendDataST7735(0x01);
   sendDataST7735(0x04);
   sendDataST7735(0x13);
   //--- End ST7735S Gamma Sequence      
   
   
   sendCommandST7735(ST7735_COLMOD);
   sendDataST7735(ST7735_RGB565);

   setMemoryWriteModeST7735(ST7735_MADCTL_RGB);   //   ST7735_MADCTL

   unsigned char i=0;
   sendCommandST7735(ST7735_RGBSET);  //Look up table
   for(i=0;i<32;i++)
      sendDataST7735(2*i); //Red
   for(i=0;i<64;i++)
      sendDataST7735(1*i); //Green
   for(i=0;i<32;i++)
      sendDataST7735(2*i); //Blue
}

Re: stm32f0 spi режим GPIO

Пн мар 21, 2022 21:51:21

GoldenAndy, спасибо. Ушел изучать.
Ответить