У меня есть несколько дисплеев, в основном Винстаровские. В даташите написано "+3V or +5V". Надо пробовать будет работать с питанием 3В или нет. Меня больше интересует, у Вас линии управления и линии данных подключены на пины, которые не являются "5V tolerant"... Или я что-то путаю?
Спасибо! Ваши статьи очень помогают в освоении С и STM32! С готовым примером можно будет выяснить работоспособность дисплеев при разных напряжениях питания.
С разрешения автора сайта помогу, смотрите на х-ки дисплея, у моего уровень "0"-это до 0,4В, "1" - от 2,4В, то есть СТМ32 его потянет и от 3,3, если у тебя выше тогда конектись только к выходам которые 5V tolerant.
Выше написал, что по идее должен работать и от 3В. А вот по материалам, найденным в интернете, получается что зависит от экземпляра дисплея - у кого-то работает, у кого-то нет. Программировать на С я только начинаю. Многое пока непонятно. Пробовал в Keil воспользоваться библиотекой работы с LCD для кейловской отладочной платы на базе STM32F103, поменял пины для подключения дисплея... Но не получилось. Либо в коде не до конца разобрался, либо экземпляр дисплея не соответствует по логическим уровням...
Мой ЖК со светодиодной подсветкой, у которой прямое падение 4,2В. Так что... как не крути питание только 5В, хотя минимальный входной уровень единицы от 2,2В.
Докладываю результаты испытаний. Пробовал подключать дисплеи: WH1602A, WH1602B, WH1602D. На 3.3 вольта не заработал ни один. На 5 вольтах работают все. В программе изменил назначение портов: RS -> PortC6, RW -> PortC7, E -> PortC8, DB4...DB7 -> PortA8...PortA11
Спасибо за тесты. На PC8 светодиод, поэтому подключил PC10, PC11, PC12. Для шины данных действительно нет альтернативы c 5В-совместимостью кроме PA8...PA11, а это прощай UART1.
с PC6 по PC12 нужно иметь четыре идущих подряд бита шины данных. Светодиоды на discovery разбивают эту последовательность. Если их не жалко, то нет проблем.
Приветствую Вас снова. Вот хочу уточнить о этих макросах в gpio_emcu.h
#define _spin_m(port,mask) (*(port+4)=(mask)) // Установка одного или нескольких битов порта по маске. #define _cpin_m(port,mask) (*(port+4)=(mask)<<16) // Сброс одного или нескольких битов порта по маске. #define _ipin_m(port,mask) (*(port+3)^=(mask)) // Инвертирование одного или нескольких битов порта по маске. #define _wr_port(port,word) (*(port+3)=(word)) // Запись выходного регистра порта. #define _rd_port(port) (*(port+2)) // Чтение входного регистра порта. #define _checkpin_b(port,bit) (*(port+2)&(1<<bit)) // Проверка бита входного регистра порта.
Это я так понимаю тот же Bit Banding. Но связать то что написано RM0041 с вашим кодом не знаю
Нет, это прямая работа с регистрами GPIO. Параметр port через #define заменяется указателем на регистр GPIOx_CRL соответствующего порта. Далее через смещения +2, +3, +4 обращаемся к регистрам IDR, ODR, BSRR.
Огромное спасибо за статью и пример. Я только начал заниматься программированием микроконтроллеров, и очень приятно что клавиатура заработала с первого раза (дисплейчика к сожалению у меня пока нет, увидел входящие символы внутри программы).
Можно подключать и с светодиодами на Discovery, у меня работает, правда код другой, но это не важно. Светодиоды даже не вспыхивают, что и не удивительно. Дисплей подключен информационными входами через резисторы 1КОм на 5в, выходы СТМ32 опен драйн PC6-PC12
Наличие светодиодов, конечно, не помешает работе ЖК, но управление самими светодиодами при этом неоправданно усложняется. Судите сами, если вы в фоне установили светодиод в нужное состояние и вызвали обмен с ЖК, то после его завершения нужно восстановить прежнее состояние светодиода. А если светодиод управляется из прерываний, то нужно как минимум обеспечить его невмешательство или безопасное (с восстановлением состояния портов) вмешательство в обмен с ЖК и т.п. К чему такие сложности?! Если жизнь заставит, то проще перейти на не FT-выводы и решить проблему 5В-совместимости, подвесив на шину данных внешние защитные диоды и резисторы.
Приветствую ГУРУ! Евгений, как знатоку IAR прошу Вас помочь с настройкой IAR 6.21, которым я пользуюсь, т.к. ни один из Ваших примеров, представленных на сайте, не компилируется в указанной версии. Коды ошибок для всех проектов сходны и приведены ниже.
Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_PSP(void)" (declared at line 52 of "C:\Program Files\IAR C:\STM32\STM32HD44780_emcu_iar\inc&source\core_cm3.h 667 ... Systems\Embedded Workbench 6.0\arm\inc\c\intrinsics.h") Error[Pe147]: declaration is incompatible with "__interwork __softfp unsigned long __get_MSP(void)" (declared at line 50 of "C:\Program Files\IAR C:\STM32\STM32HD44780_emcu_iar\inc&source\core_cm3.h 689
Total number of errors: 24 Total number of warnings: 0
На форуме electronix по етому поводу сказано, что в проектах для IAR 6.21 нужно:
1. Установить галку Project >Options... >General Options >Library Configuration >Use CMSIS 2. Удалить из проекта и из его папки файлы core_cm3.c и core_cm3.h.
Здравствуйте Евгений! Благодарю за ответ. Он совпадает с ранее полученной мной ссылкой от ST на их видео-презентацию, относительно данного вопроса. СПАСИБО!
Еще один вопрос. Не можем разобраться, почему STM32VLdiscovery не работает с IAR6.21, IAR6.30 (режим загрузки и отладки) из-за проблем с подключением к ST-Link. (Хотя STM32F4discovery работает в без замечаний). Не подскажете, какой драйвер ST-Link должен быть установлен в Windows? Все доступные на сайте ST для ST-Link уже перепробованы и результат отрицателен - IAR выдает "Communication Error with connecting to ST-Link". Как известно, на борту STM32VLdiscovery расположен ST-Link, а вот на STM32F4discovery - ST-Link/V2. И можно ли ST-Link STM32VLdiscovery апргрейдить до ST-Link/V2? С признательностью за Ваше время и предполагаемый ответ.