主控(Amlogic A113X)串口和MCU(STM32) 进行串口通信,实现数据的传输,由STM32控制灯效.看似简单的一个双方对接功能,还是走了不少弯路的.
//Amlogic A113X引脚编号
GPIOZ_8 -> I2C_SCK_B/UART_TX_AO_B
GPIOZ_9 -> I2C_SDA_B/UART_RX_AO_B
根据引脚功能中UART_RX_AO_B和dts中的serial2 = &uart_AO_B对应
aliases {
serial0 = &uart_AO;
serial1 = &uart_A;
serial2 = &uart_AO_B;
serial3 = &uart_B;
};
uart_AO_B: serial@4000 {
compatible = "amlogic, meson-uart";
reg = <0x0 0x4000 0x0 0x18>;
interrupts = <0 197 1>;
status = "okay";
clocks = <&xtal>;
clock-names = "clk_uart";
fifosize = < 64 >;
pinctrl-names = "default";
pinctrl-0 = <&ao_b_uart_pins>;
};
//串口正常加载之后,会显示
ls /dev/ttyS0
ttyS0 ttyS1 ttyS2 ttyS3
file *so
发现是MIPS格式,而A113X需要的是file xxx.so
xxx.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=2a8193fca2caa7fcb9f62120f8bd34152a38ee9b, not stripped
arm-linux-xxx/g++ -W -Wall -O2 -g -std=c++11 -Wl,-rpat=.-o xxx xxx.cpp -L . -lxxxx -lpthread
A方提供的MCU程序使用C++ 11实现,这点还是值得学习的
意外发现MCU和主控的 RX / TX接反了, 修改后正常.
经验说明项目的手板什么低级的硬件错误都可以犯, 还是要静下心来分析问题,解决问题 这次的坑: