STM32: прерывания, ЖК-экран, русский язык

Я продолжил опыты с отладочной платой STM32VL Discovery. На этот раз хотелось причесать накопленный опыт и сделать простой, но более-менее красивый проект. В том смысле, что нехорошо в цикле проверять нажатие кнопки: правильнее — задействовать прерывания; нехорошо программировать ЖК кракозябами: лучше сделать таблицу перекодировки; и т.д.

Итак, задача проекта: вывести на ЖК-экран 16х2 фразу: «Программа готова. Ждем нажатия кнопки», а по нажатию кнопки PA0 вызвать процедуру обработки прерывания, которая напишет: «Процедура прерывания сработала!».

В чем смысл? Сделать более-менее приемлемую заготовку для дальнейших проектов. Например, на ее базе можно легко и красиво переписать сделанную ранее читалку SD-карточки — она будет выводить русский текст также по нажатию кнопок, но теперь это будет делать не зацикленный процессор, а красивая и экономная процедура обработки. Да и потом — нужно разбросать код по отдельным файлам для удобства восприятия и дальнейшего использования. Все получилось.

Ближе к делу. Нестандартные mcu_gpio и mcu_rcc я все-таки решил оставить. Ну нравятся они мне. Из остальных — выбросил лишнее, добавил нужное.

В mylcd.h — обработка всего, что нужно дисплею: init_LCD_pins() инициализирует контакты, init_LCD() — переинициализирует сам ЖК, prn_LCD() — выводит строку из 32-х символов (16х2).

В recode.h — таблица соответствия кириллицы CP1251 > WH1602. Перекодировкой занимается decodeStr(). Ей передаем ссылку на строку в кодировке CP1251 (кириллица Win), она изменяет коды символов на соответствующие в знакогенераторе WH1602.

В intrpt.h — инициализация прерывания. Особо лезть в нее не нужно, все делает вызов NVIC_Configuration(). И еще: я вынял отсюда процедуру обработки прерывания, потому как в main она как бы всегда под рукой. Желающие могут вернуть обратно.

Собственно, и все. Делал в CooCox, в архиве — файлы проекта: 16×2+external_interrupt.zip


Protected by Copyscape Online Plagiarism Test
Вы не можете высказаться или оставить ссылку здесь...

Обсуждение закрыто.

Powered by WordPress | Thanks to NewWpThemes | Александр Божок