4.4 RS485应用编程
瑞米派上的UART是TTL电平,需要使用TTL转RS485模块,才能在后续的实验里连接modbus模块。
RS485协议是半双工的:用一时间要么用于发送数据,要么用于接收数据。怎么决定是发送数据还是接收数据?有2种方法:手工指定方向,自动切换方向。
手工指定方向的TTL转RS485模块原理图如下:
在发送数据之前设置DE引脚为高;平时等待接收数据时设置RE#引脚为低。在上图里,DE和RE#连接在一起,所以在发送数据前把RS485_CTRL引脚配置为高电平;平时把这个引脚配置为低电平即可。
自动切换方向的TTL转RS485模块原理图如下:
关键在于上图的MAX1348芯片,它会自动进行方向切换。对于这类模块,RS485的编程跟普通的串口编程没有任何差别。
后续的libmodbus实验就是使用“自动切换方向的模块”,本节课程无法做这个实验:因为还没学习modbus协议。
4.5 USB串口编程
板载的内核并不支持USB串口,需要配置内核支持USB串口驱动。USB串口驱动有3种:
① “USB Generic Serial Driver”:通用USB串口驱动
② “USB Modem (CDC ACM) support”
③ 某些芯片的驱动程序
为了让内核支持尽可能多的USB串口,把这些驱动程序都编进内核。
4.5.1 配置、编译内核
在Ubuntu中执行如下命令:
$ cd ~/remi-pi/myir-renesas-linux
$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
$ make distclean
$ make ARCH=arm64 mys_g2lx_defconfig
$ make ARCH=arm64 menuconfig
上述命令时配置内核,如果出现如下错误:
cripts/kconfig/lxdialog/dialog.h:19:10: fatal error: ncurses.h: No such file or direc
tory
19 |
| ^~~~~~~~~~~
compilation terminated.
执行如下命令后,即可重新执行“make ARCH=arm64 menuconfig”:
$ sudo apt install libncurses5-dev
在内核配置界面,如下配置:
①配置通用USB串口驱动:
②配置ACM驱动:
③配置特定芯片的驱动:比如使用FTDI公司的USB串口芯片的话,如下配置:
配置好内核后,执行如下命令编译内核:
$ make ARCH=arm64 Image
编译完成后,会生成“arch/arm64/boot/Image”文件。
4.5.2 使用新内核
在Ubuntu上把新内核复制到开发板上,在Ubuntu中执行如下命令:
$ scp arch/arm64/boot/Image root@192.168.5.9:/mnt
在开发板上,内核存放在分区“/dev/mmcblk0p1”里,需要挂载这个分区,才能替换内核。执行如下命令:
然后重启开发板,即可使用新的内核。
4.5.3 上机测试
继续使用如下源码:
在Ubuntu上执行如下命令进行编译:
$ source /opt/remi-sdk/environment-setup-aarch64-poky-linux
$ $CC -o serial_send_recv serial_send_recv.c
$ scp serial_send_recv root@192.168.5.9:/home/root
把USB串口的TxD、RxD短接,然后接到开发板上,查看是否生成了“/dev/ttyUSB0”或“/dev/ttyACM0”设备节点,假设生成了“/dev/ttyUSB0”设备节点,则在开发板上执行如下命令,然后输入“1”回车、输入“2”回车:
# ./serial_send_recv /dev/ttySC4
Enter a char: 1
get: 31 1
get: 0a
2
get: 32 2
get: 0a
上面的“get:31 1”表示读到了一个字符,它的16进制数值是0x31,字符为“1”。
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待续
推荐阅读
即刻预约 | 瑞萨RZ/G通用MPU研讨会,现场送瑞米派!
VLP中添加客户的RZ/G2L板子编译
RZ/V2L ISP实现方式及功能简介