STM32F030C8 SPI SSD1306
02.11.2016, 20:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Издеваешься, да?
Переписывай без SPL попутно штудируя RM.
Кто влезет получит бан!!!
__________________
Осторожно , злой кот
|
|
|
|
02.11.2016, 20:53
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 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
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Так этот дисплейчик на I2C или на SPI?
Я тоже заказал себе один такой на пробу. Насколько я понял, интерфейс там переключается перемычками. А в оригинале на ленте шлейфа вроде как есть даже параллельный.
Не нашел инфы по току потребления.
|
|
|
|
02.11.2016, 21:17
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 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.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Сообщение от NewWriter
|
|
Так этот дисплейчик на I2C или на SPI?
|
С I2C я уже подружился )) Теперь с SPI хочу подружиться... Заказывал на космодроме СПИ дисплей, а пришел I2C. Поэтому надо оба изучить.
|
|
|
|
02.11.2016, 22:24
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
Сообщение от miwutka
|
|
Подскажите что не так
|
Мих, я ж тебе ещё в предыдущий раз давал...
Этот косяк уже устранён.
Сообщение от miwutka
|
|
Думаю там чтото не так с ножками DC, RES. CS вроде работает нормально.
|
Достаточно и трёх проводков кроме питания: CS, MOSI и CD/
Сообщение от miwutka
|
|
Для нормальной работы RESET ножка должна быть притянута к +3
|
Да.
|
|
|
|
02.11.2016, 22:36
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
omercury, да да, я ж ваш пример и изучаю )) Теперь хочю свою либу от I2C переписать под SPI)) Она просто удобная. Там для обновления дисплея есть функция DisplayUpdate. Вот я такой у вас не нашел, поэтому думаю свою заточить под SPI. Я в инит вник тогда а в то как писать в память дисплея чтобы зажечь точки так и не вник...
|
|
|
|
02.11.2016, 23:35
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 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
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
|
Re: STM32F030C8 SPI SSD1306
miwutka, Для начала ссылку на лот, фотку своего дисплея в нормальном разрешении.
Есть 2 варианта SPI!
__________________
Осторожно , злой кот
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:02.
|
|