前言
应用工程师经常面临的问题是,微控制器在功能和性能上满足应用的所有其它要求,只是串行通信外设数量有限。有时,他们只能替换为具有充分数量通信外设的高级微控制器以规避此问题。这种移植可带来额外的(经常是用不到的)性能和功能,在多数情况下应用都不需要或用不到,但却增加了成本和PCB复杂度。
经常发生的情况是当并不是每个通道都需要全部(或特定)功能时,通信流及其控制可极大简化(例如仅在特定的模式或时隙需要通信、通信速度可以更低、并不是所有信号都严格需要正确的时间、可接受简化的协议或流程)。在这些特定情况下,如果有方法能用当前硬件补充缺失的信道,避免移植,则用户可真正受益。
另一方面,要在复用通道上与所有原始硬件特性完全兼容,代码和性能方面的代价太大,也很难实现。通常,会倾向于放弃一些特定需要,以达到简化复用外设通道概念的目的。这里,关键一点是识别那些应用中不需要的、可使用低工作量、降低性能的方法变更的通道。
本应用笔记提供了所述问题的基本概述,可帮助应用工程师在实现缺失的通信通道时,发现可能的替代方法。因为所讨论的外设存在于所有该类产品,所以它适用于所有STM32微控制器。
在下面的参考文档中有更多的信息和样例,说明了实际的用例和解决方案:
• TN0072,软件工具链和 STM32 特性;
• UM0892, STM32 ST-LINK 工具软件说明;
• AN4457, STM32F4 全双工 UART 模拟。
最后引用的文档与相同主题的其它应用笔记共同开发,用户可在 www.st.com上查看。
目录
1 硬件方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2 软件方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1 兼容因子 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.1 功能性 (与时序无关) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.2 时序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.3 HW 接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.1.4 API 接口 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.2 可用的方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.1 位模拟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.2.2 硬件和软件组合控制 GPIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3 通用方法论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.1 时钟信号方面,主从的对比 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.3.2 中断和 DMA vs. 位模拟 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4 软件模拟的外设方面 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .11
2.4.1 SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.2 UART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.3 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.5 示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.1 基于硬件和软件组合控制 GPIO 的 UART
双工通道 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5.2 SPI 位模拟序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.3 I2C 主设备位模拟序列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3 结论 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
4 版本历史 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1 硬件方法
如果不能接受增加原始硬件外设(例如,增加专用通信协处理器单元等外部组件),那么可使用下述基本方法补偿外设数量的限制:
1. 使用内部专用外设实例的重映射选项,更改不同端口处的输入和输出,以此建立微控制器与不同通道的临时连接(用户可在数据手册的引脚说明中,针对每种产品及其实现的外设找到复用功能能力的信息)。
2. 使用复用逻辑,将多个通信通道复用为一个通信端口。
3. 使用SWO特性。
前两种方法提供了除专用时隙之外所选通道的服务,仅当它发生时不严格要求复用通道的同时操作和永久监测才可使用,例如:
• 服务通道;
• 偶尔与远程设备通信;
• 监测数值变化缓慢的传感器;
• 用于周期性备份的通道。
当从设备的活动等待主请求,或与从设备的通信可丢失,当主设备重新连至服务通道时可容易地重新同步时(监听并通话),这些方法适合于主设备通信。当从设备和主设备之间提供额外控制信号来告知从设备连接建立时(例如,当从设备能/不能在通道工作时的片选或通道就绪/繁忙信号),它也可用于从设备侧。
--------------------------------------