Двигаемся дальше, сегодняшней целью является UART. Попробуем покидать байты между ПК и малиной.
В прошлый раз не упомянул, но для настройки параметров платы есть специальная тулза. Разобраться в ней не составит труда.
sudo raspi-config
Так к чему же это? Как уже я говорил по дефолту в уарт сыпятся все системные сообщения. В предыдущих версиях Raspbian через конфиг можно было выключить уарт, при этом как устройство он оставался доступным, но отключались системные сообщения. В последних версиях похоже это изменилось. Нужно чтобы уарт был включен в конфиге, а системные сообщения отцепляются командой
systemctl mask serial-getty@ttyAMA0.service
После настройки и перезагрузки убедитесь, что уарт включен, в списке устройств он выглядит как ttyAMA0, но вроде как название может быть и другим.
После этого нужно убедиться что последовательный порт работает. Для этого подсоединяем к компу через USB-UART переходник, скачиваем minicom и запускаем.
minicom -b 9600 -o -D /dev/ttyAMA0
Пуляем байты и видим их на ПК. Все работает шикарно. Теперь попробуем что нибудь написать на Си.
#include <stdio.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> void main(int argc, char *argv[]) { int fp; fp = open ("/dev/ttyAMA0", O_RDWR | O_NOCTTY | O_NDELAY); struct termios uart_param; tcgetattr(fp, &uart_param); uart_param.c_cflag = B9600 | CS8 | CLOCAL | CREAD; uart_param.c_iflag = IGNPAR; uart_param.c_oflag = 0; uart_param.c_lflag = 0; tcflush(fp, TCIFLUSH); tcsetattr(fp, TCSANOW, &uart_param); write(fp, "hello", 5); close(fp); } |
B9600 — Бодрейт, соответственно, если нужно 115200, то ставим B115200.
CS8 — количество бит.
CLOCAL — без использования линий RTS, CTS
CREAD — включить приемник
IGNPAR — откидывать байты, не прошедшие проверку четности
В общем то и все, в терминал на десктопе прилетят заветные hello. Если нужно читать байты, то делается точно также функцией read.
Добавить комментарий