02.11.2016, 20:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
STM32F030C8 SPI SSD1306
Добрый день. Настраиваю SPI для SSD1306. Получил с SPI интерфейсом. Вот хочу и его наладить... Чтото пока не получается... На ножках полный ноль судя по осциллографу... Подскажите что не так, может инит не правильный...?
PHP код:
|
void SPI1_SendByte(uint8_t byte) { while(!(SPI1-›SR & SPI_SR_TXE)); SPI1-›DR=byte; } //================================================== ============================ void SPI1_WR_String(const char *s) { int i = 0; while (s [i] != 0) { SPI1_SendByte (s[i++]); } } //================================================== ============================ uint8_t SPI1_ReadByte(uint8_t byte) { // while (!(SPI1-›SR & SPI_SR_TXE)); SPI1-›DR=byte; while (!(SPI1-›SR & SPI_SR_RXNE)); return (SPI1-›DR); }
void SPI_ini(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_user; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);//5,6,7 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); /* TIM1 channel 2 pin (PE.11) configuration */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; GPIO_Init(GPIOA, &GPIO_InitStructure); //for ssd1306 CS,REC,DC GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_Init(GPIOB, &GPIO_InitStructure);
/* Connect TIM pins to AF2 */ GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0); GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0); GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0); CS_OFF; RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); SPI1-›CR1 |= SPI_CR1_BIDIMODE //1-line bidirectional data mode selected | SPI_CR1_BIDIOE //Output enabled (transmit-only mode) | SPI_CR1_SSM //Software slave management enabled | SPI_CR1_SSI // с SSM тоже должен быть 1 | SPI_CR1_SPE //SPI enable | SPI_CR1_BR_2 | SPI_CR1_BR_1 // 128 делитель | SPI_CR1_MSTR //Master configuration | SPI_CR1_CPOL // Clock polarity to 1 when idle | SPI_CR1_CPHA; // Clock phase The second clock SPI1-›CR2 |= SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0; //8-bit }
|
Пишу прямо в регистр в основном цикле для проверки SPI1-›DR = 0x0f; - на ножках глухо...
Последний раз редактировалось miwutka; 02.11.2016 в 21:10.
|
|
|
|
02.11.2016, 20:44
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Издеваешься, да?
Переписывай без SPL попутно штудируя RM.
Кто влезет получит бан!!!
__________________
Осторожно , злой кот
|
|
|
|
02.11.2016, 20:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
пипец ))) ща пропишу. Но на выходе получил сигнал. Делитель слишком маленький был. Получилась высокая частота. Ща перепишу. И начинаю разбираться с протоколом DC, RES, CS видимо чтото с ними не так делаю...
Кстати SPI уже пишу модульно.
Последний раз редактировалось miwutka; 02.11.2016 в 20:55.
|
|
|
|
02.11.2016, 21:14
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Так этот дисплейчик на I2C или на SPI?
Я тоже заказал себе один такой на пробу. Насколько я понял, интерфейс там переключается перемычками. А в оригинале на ленте шлейфа вроде как есть даже параллельный.
Не нашел инфы по току потребления.
|
|
|
|
02.11.2016, 21:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Вот мои две маленькие либы для SSD1306. Думаю там чтото не так с ножками DC, RES. CS вроде работает нормально. Для нормальной работы RESET ножка должна быть притянута к +3 вольта или к минусу? Немогу понять по даташиту на 18 странице на дисплей что читать про SPI. 3-wire или 4-wire?? Из-за этого немогу понять что делать с пином на дисплее DC.....
Последний раз редактировалось miwutka; 02.11.2016 в 21:24.
|
|
|
|
02.11.2016, 21:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Сообщение от NewWriter
|
Так этот дисплейчик на I2C или на SPI?
|
С I2C я уже подружился )) Теперь с SPI хочу подружиться... Заказывал на космодроме СПИ дисплей, а пришел I2C. Поэтому надо оба изучить.
|
|
|
|
02.11.2016, 22:24
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Сообщение от miwutka
|
Подскажите что не так
|
Мих, я ж тебе ещё в предыдущий раз давал...
Этот косяк уже устранён.
Сообщение от miwutka
|
Думаю там чтото не так с ножками DC, RES. CS вроде работает нормально.
|
Достаточно и трёх проводков кроме питания: CS, MOSI и CD/
Сообщение от miwutka
|
Для нормальной работы RESET ножка должна быть притянута к +3
|
Да.
|
|
|
|
02.11.2016, 22:36
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
omercury, да да, я ж ваш пример и изучаю )) Теперь хочю свою либу от I2C переписать под SPI)) Она просто удобная. Там для обновления дисплея есть функция DisplayUpdate. Вот я такой у вас не нашел, поэтому думаю свою заточить под SPI. Я в инит вник тогда а в то как писать в память дисплея чтобы зажечь точки так и не вник...
|
|
|
|
02.11.2016, 23:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Вот моя функция для I2C. Подскажите control_byte (0х40 она или 0х00) это наша ножка DC?
Посоветуйте логический анализатор нормальный плиз...
PHP код:
|
void ssd1306_send(uint8_t control_byte, uint8_t data) { I2C1-›CR2 = I2C_CR2_AUTOEND | (2‹‹16) | (SSD1306_I2C_ADDR‹‹1); /* Check Tx empty */ //while (!(I2C1-›ISR & I2C_ISR_TXE) ); while ( (!(I2C1-›ISR & I2C_ISR_TXE) ) && (Timeout == 0) ) { I2C_Timout++; if (I2C_Timout == ssd1306_I2C_TIMEOUT) {I2C_Timout = 0;Timeout = 1; } }; Timeout = 0; I2C_Timout = 0; I2C1-›TXDR = control_byte; I2C1-›CR2 |= I2C_CR2_START; //таймаут while ( (!(I2C1-›ISR & I2C_ISR_TXE) ) && (Timeout == 0) ) { I2C_Timout++; if (I2C_Timout == ssd1306_I2C_TIMEOUT) {I2C_Timout = 0;Timeout = 1; } }; Timeout = 0; I2C_Timout = 0; I2C1-›TXDR = data; }
|
Последний раз редактировалось miwutka; 03.11.2016 в 00:03.
|
|
|
|
03.11.2016, 09:21
|
|
Гуру портала
Регистрация: 20.11.2004
Сообщений: 10,015
Сказал спасибо: 936
Сказали Спасибо 2,269 раз(а) в 1,563 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
miwutka, Для начала ссылку на лот, фотку своего дисплея в нормальном разрешении.
Есть 2 варианта SPI!
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 19:42.
|
|