Подключение LCD экрана к STM32f4xx

Через часок гляну у себя, скажу точно. Я сделал граф.буфер с которым программа работает как будто с экраном. А сам буфер каждую 1 мс шлёт 1 символ. Итоговая загрузка мизерная.
Ааа…у меня не через i2c))))
Опять же, отсылку символа по i2c можно разбить на элементарные этапы по таймеру, чтобы не ждать. Либо через прерывания.

Так буфер графический или текстовый?
А так - да, если нужно без особого геморроя работать с экраном, притом - быстро, то единственный вменяемый вариант - через буфер. А как использовать этот буфер - дело десятое. В одном проекте у меня на текстовый экран буфер выводится посимвольно, в другом - на графический - фрагментами по 16 байт.

Да, буфер символьный, всего 20 байт(для lcd1602).
У меня идея была такая: работа с буфером независимо от работы экрана и интерфейса: хош 8 бит, хош 4, хош i2c.
А по i2c хорошо в прерывании, у меня так:

ISR(TWI_vect)
ISR(TWI_vect)
{
	switch(TW_STATUS)
	{
		//статус СТАРТ,загружаем адрес из буфера
		case 0x08:TWDR=i2c_buf[n];n++;SLA_RW;break;
		//статус ПОВСТАРТ,загружаем адрес из буфера
		case 0x10:TWDR=i2c_buf[n];n++;SLA_RW;break;
		//адрес для записи передан,ACK,загружаем данные из буфера
		case 0x18:TWDR=i2c_buf[n];n++;WRITE_BYTE;break;
		case 0x20:TWDR=i2c_buf[n];n++;WRITE_BYTE;break;
		//данные отправлены,ACK,NACK,загружаем данные из буфера
		case 0x28:case 0x30:TWDR=i2c_buf[n];n++;
			//если массив кончился,то останавливаем передачу...
			if(n>BUF_SIZE){TWI_STOP;break;};
			//...иначе продолжаем отправлять очередной
			WRITE_BYTE;break;
		//адрес для чтения передан,ACK
		case 0x40:n++;READ_BYTE_ACK;break;
		//данные пришли,ACK,продолжаем ждать
		case 0x50:i2c_buf[n]=TWDR;n++;
			if(n==BUF_SIZE)
				//ждем данные без подтверждения
				{READ_BYTE_NACK;break;};
		//ждем данные с подтверждением
		READ_BYTE_ACK;break;
		//байт принят,NACK
		case 0x58:i2c_buf[n]=TWDR;TWI_STOP;break;
		//адрес принят,ACK
		case 0x60:READ_BYTE_ACK;break;
		//байт принят,ACK
		case 0x80:*(value+n)=TWDR;n++;
		//если ожибаем последний байт,настраиваем прием без подтверждения...
		if(n=count){READ_BYTE_NACK;break;}
		//...иначе прием с подтверждением
		READ_BYTE_ACK;break;
		//байт принят,NACK,переходим в режим Ведомый-приёмник
		case 0xa88:*(value+n)=TWDR;TWI_READY;break;
		//байт передан,ACK
		case 0xb8:;break;
		//байт передан,NACK
		case 0xc0:;break;
		//байт ПОСЛЕДНИЙ передан,ACK
		case 0xc8:;break;
		//default:/*n=0;TWI_STOP*/WRITE_BYTE;n++;break;
	}
}

Тут автомат неполный, только нужные статусы.

Похоже вопрос решился. только не знаю как и почему все заработало со стандартной библиотекой. Что изменил : 1. Соединил экран с платой по 8 битной шине но в библиотеке указал только 4 бита. До этого подсоединял провода по 4 битной шине. 2. Повесил резистор на 20 ком между выводом PA10 на землю.

да обнаковенный неконтакт, либо резистор на PA10, что бы это ни значило)

Да , чудеса…))

А что чудесного? Мне лень смотреть схему…а она была вообще?)

Я не знаю, причём здесь этот пин, может ТС раскажет

Передача была “Угадай мелодию”. А у нас форум “угадай неисправность”. Причем в 9 из 10 тем)))
То схема секретная, то код коммерческая тайна.

Но чаще всего: “ошибка не в коде” или “не в схеме” в зависимости от того, что именно не опубликовано.

1 лайк

Ну, ТС сказал, что

Значит просто добавил 4 пина. Как подключение одного из пинов на 8-ми битной шине к земле через рез 20К может здесь повлиять…
Явно что-то не договаривает, а жаль.

Потом оказывается что действительно, ошибок нет. Но через 300 сообщений выясняется, что 4 мотора, 3 сервы, 8 графических экранов и светодиод питаются от Кроны😄

Не верю! (К. Алексеев)
Как раз Кроны вычисляются не позже 5-15 поста.

1 лайк

Выкладываю супер секретную схему. Там спрятано 100500 транзисторов.

Резистор R3 для чего? Вывод PA10 никуда не подключен же.

А ты точно уверен что вывод PA10 никуда не подключен? Я тоже был в этом уверен. Оказалось я ошибался.

а куда он подключен?
через резистор на землю. зачем тока?

А я тут при чём??? Схему-то не я выкладывал)
А это голый МК или Чёрная Пилюля?
Так. Стоп! А зачем резистор R2? Там на дисплее на плате уже стоит резистор. Надо 5в на подсветку вести.
Стоп, стоп,стоооп!!! 5в на МК который максимум 3.6в допускает? Или я дурак, или схема неправильна. Хотя если это пилюля, там есть вход 5в.

Это, скорее всего, плата типа Black Pill и там есть вход 5В.
Но схема вызывает много вопросов, это точно…

1 лайк

Там как раз на плате индикатора стоит у меня резистор в 1 ом.