本帖最后由 xinmeng_wit 于 2024-2-25 21:15 编辑
1、查看设备树文件
为了确认哪些uart口可以使用,可以先查看一下设备树文件:
大致猜测这4个串口的驱动官方已经做好了。
再查看具体的UART的设备节点,可以看到目前只启用了uart4和usart2。其中usart2应该是接的蓝牙模块,uart4应该是串口控制台。Usart1和uart8尚未使用到,因此我们可以将usart1和/或uart8用起来。
&uart4 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&uart4_pins_a>;
pinctrl-1 = <&uart4_sleep_pins_a>;
pinctrl-2 = <&uart4_idle_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "okay";
};
&uart8 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&uart8_pins_a>;
pinctrl-1 = <&uart8_sleep_pins_a>;
pinctrl-2 = <&uart8_idle_pins_a>;
/delete-property/dmas;
/delete-property/dma-names;
status = "disabled";
};
&usart1 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&usart1_pins_a>;
pinctrl-1 = <&usart1_sleep_pins_a>;
pinctrl-2 = <&usart1_idle_pins_a>;
uart-has-rtscts;
status = "disabled";
};
/* Bluetooth */
&usart2 {
pinctrl-names = "default", "sleep", "idle";
pinctrl-0 = <&usart2_pins_a>;
pinctrl-1 = <&usart2_sleep_pins_a>;
pinctrl-2 = <&usart2_idle_pins_a>;
uart-has-rtscts;
status = "okay";
bluetooth {
shutdown-gpios = <&mcp23017 13 GPIO_ACTIVE_HIGH>;
compatible = "brcm,bcm43438-bt";
max-speed = <3000000>;
vbat-supply = <&v3v3_ao>;
vddio-supply = <&v3v3_ao>;
};
};
2、修改设备树
因为默认设备树文件中usart1和uart8的status是 "disabled"状态,需要改成okay,本篇以usart1为例做修改,因此修改设备树如下:
3、编译设备树
make ARCH=arm dtbs LOADADDR=0xC2000040
4、上传dtb文件到开发板
scp arch/arm/boot/dts/stm32mp135*.dtb root@192.168.7.1:/boot
5、重启开发板
root@stm32mp1:~# sync && reboot
6、查看设备节点是否被创建
root@stm32mp1:~# ls /dev/ttyS*
可以看到多出来了一个ttySTM1的串口设备,这个设备就是我们之前配置的usart1。
7、确定usart1的引脚
Usart1的引脚可以通过查看stm32mp13-pinctrl.dtsi文件
确认了TX是PC0,RX是PB0。
8、编写程序控制串口收发数据
为了测试方便,本次直接使用sh脚本来进行串口的数据的收发
脚本如下:
#!/bin/bash
UART_DEVICE="/dev/ttySTM1"
BAUD_RATE="9600"
echo -e "STM32MP135 UART TEST\n" > $UART_DEVICE
stty -F $UART_DEVICE cs8 $BAUD_RATE
echo "Hello UART" > $UART_DEVICE
echo -e "Please send a message\n" > $UART_DEVICE
cat $UART_DEVICE
9、执行脚本
root@stm32mp1:~# ./uart.sh
使用串口工具查看开发板通过串口发出的消息:
如果向开发板发送消息,开发板会将该消息再发回给PC:
到此,完成uart的数据的接收与发送。
|