第一步:拉线搭桥(硬件连接的“交叉法则”)

USART 通讯之所以被称为工程师最爱的“神仙协议”,是因为它极其精简,只需要 3 根线就能让两个不同世界的芯片聊起天来:

  1. GND(地线):必须把 Orin NX 的 GND 和 STM32 的 GND 连在一起。这是为了让两边有统一的电压参考标准,否则信号就是乱码。

  2. TX(发送线,Transmit):负责把话“说”出去。

  3. RX(接收线,Receive):负责把话“听”进来。

核心法则:交叉连接!

你想想,你对着电话筒说话(TX),对方肯定是用听筒听(RX)。所以接线时必须是交叉的:

  • Orin NX 的 TX 接到 STM32 的 RX(PA10)

  • Orin NX 的 RX 接到 STM32 的 TX(PA9)

第二步:对暗号(Baud Rate 波特率)

线接好了,但 Orin NX 是一台性能怪兽跑着 Linux 系统,STM32 只是个底层小芯片,它们俩讲话的“语速”可能完全不一样。

如果 Orin NX 像机关枪一样一秒钟发一万个字,STM32 慢吞吞地一秒钟只能听懂一百个,那听到的一定全是乱码。

所以,它们必须提前约定一个**“波特率(说话的速度)”**。

在之前 STM32CubeMX 的配置中,默认的波特率通常是 115200

未来你在 Orin NX 上写 Python 或 C++ 代码发指令时,也必须在代码里强制规定:baudrate = 115200。这样,两个芯片的语速就完美同频了。

第三步:竖起耳朵(IT 中断机制的魔法)

这是最核心、也是最巧妙的一步软件逻辑!

你回想一下 main.c 里的那个 while(1) 死循环。单片机是个“单核单线程”的死脑筋,当它执行到 HAL_Delay(3000)(让扳手转 3 秒)的时候,它是在“原地死等”的,什么都不干。

假设就在这 3 秒里,Orin NX 突然发现扳手扭矩过大,发来了一个紧急指令:"STOP"

如果单片机没有“特殊机制”,它根本听不见,必须要等这 3 秒延时结束、进入下一次循环时才会去检查有没有新消息,那扳手早就把电网螺栓拧滑丝了。

这个“特殊机制”,就是我们在 CubeMX 里勾选的 USART1 global interrupt(串口全局中断)

中断(Interrupt)的通俗解释:

  • 平时(while 循环): 单片机在厨房里专心炒菜(执行扳手转动逻辑)。

  • 触发中断: Orin NX 突然发来一个字符 'S'。这就像是门铃突然响了!

  • 保存现场: 单片机会瞬间放下锅铲(暂停当前的延时或代码执行),把炉子火关小(保存当前运行状态)。

  • 处理紧急事务(进入 stm32f1xx_it.c): 单片机一路小跑去开门,签收 Orin NX 发来的 'S' 这个快递,并把它存进一个变量里(比如 Command = 'S')。

  • 恢复现场: 签收完毕,单片机立刻跑回厨房,拿起锅铲,继续从刚才暂停的地方接着炒菜。

未来你的代码长什么样?

一旦有了这个中断机制,未来你电网拧螺栓的逻辑就会变得极其优雅:

Orin NX 端只需要发极简的字母:

  • 'F' (Forward) 代表正转拧紧

  • 'R' (Reverse) 代表反转拆卸

  • 'S' (Stop) 代表停止

STM32 端收到字母后,存进大脑里,然后在 while(1) 循环里根据字母干活:

C

while(1) {
    if (Command == 'F') {
        // 执行 PA4、PA5 闭合,DAC 输出电压的动作
    } 
    else if (Command == 'S') {
        // 执行所有继电器断开,DAC 归零的动作
    }
}

Orin NX 负责复杂的视觉识别和力控计算,算完了只需要通过串口扔出一个小小的字母,STM32 就能瞬间通过中断“听”到,并忠实地指挥博世扳手干活。这就叫“软硬结合”的最高境界!

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐