TMS320C6748的初始化与STM32做个类比

TMS320C6748 (DSP)

cpp 复制代码
void UARTConsoleInit(void)
{
    // 1. 使能时钟和电源
    PSCModuleControl(SOC_PSC_1_REGS, 13, 0, PSC_MDCTL_NEXT_ENABLE);
    
    // 2. 配置引脚复用
    UARTPinMuxSetup(2, FALSE);
    
    // 3. 配置UART参数
    UARTStdioInitExpClk(BAUD_115200, UART_RX_TRIG_LEVEL_1);
}

STM32 (Cortex-M)

cpp 复制代码
void USART2_Init(void)
{
    // 1. 使能时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);  // UART时钟
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);   // GPIO时钟
    
    // 2. 配置引脚复用
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2); // TX
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource3, GPIO_AF_USART2); // RX
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    // 3. 配置UART参数
    USART_Init(USART2, &USART_InitStructure);  // 115200, 8N1
    USART_Cmd(USART2, ENABLE);
}

详细类比表格

功能模块 TMS320C6748 STM32 说明
时钟/电源管理 PSC (Power and Sleep Controller) RCC (Reset and Clock Control) C6748的PSC集成了电源和时钟,STM32分开管理
使能外设时钟 PSCModuleControl(SOC_PSC_1_REGS, 13, ...) RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ...) 两者都必须先使能时钟才能操作外设
引脚复用 UARTPinMuxSetup(2, FALSE) GPIO_PinAFConfig() + GPIO_Init() C6748封装得更简洁,STM32需要分步配置
引脚配置内容 PINMUX寄存器自动配置 手动配置模式/速度/上下拉 STM32更灵活但更繁琐
UART参数配置 UARTConfigSetExpClk() USART_Init() 两者参数类似:波特率/数据位/停止位/校验
FIFO使能 UARTFIFOEnable() STM32F4/F7有FIFO,F1没有 C6748明确使能FIFO,提高效率
使能UART UARTEnable() USART_Cmd(ENABLE) 最后一步都是使能外设

核心概念对应关系

1. 电源和时钟系统

cpp 复制代码
TMS320C6748:
PSC (Power and Sleep Controller)
├── PSC0 → 管理部分外设 (如 UART0)
└── PSC1 → 管理部分外设 (如 UART1/UART2)
    └── 模块13 = UART2

STM32:
RCC (Reset and Clock Control)
├── AHB1/AHB2 → 高速总线 (GPIO)
├── APB1 → 低速总线 (USART2/3/4/5)
└── APB2 → 高速总线 (USART1/6)

类比:

  • C6748的 PSCModuleControl() ≈ STM32的 RCC_APBxPeriphClockCmd()
  • 两者都是"开闸放水",让外设获得时钟才能工作

2. 引脚复用 (Pin Mux)

cpp 复制代码
TMS320C6748:
每个引脚可复用多种功能,通过 PINMUX 寄存器选择
UARTPinMuxSetup(2, FALSE) → 自动配置 UART2_TX/RX 引脚

STM32:
每个引脚可复用为 AF0~AF15 功能
GPIO_PinAFConfig(GPIOA, GPIO_PinSource2, GPIO_AF_USART2)

类比:

  • C6748的函数封装得更高层
  • STM32需要手动指定每个引脚的复用功能编号

3. 条件编译切换 UART 实例

C6748 的这段代码:

cpp 复制代码
#if (0 == UART_STDIO_INSTANCE)
    PSCModuleControl(SOC_PSC_0_REGS, 9, ...);   // UART0
#elif (1 == UART_STDIO_INSTANCE)
    PSCModuleControl(SOC_PSC_1_REGS, 12, ...);  // UART1
#else
    PSCModuleControl(SOC_PSC_1_REGS, 13, ...);  // UART2
#endif

等价于 STM32 中:

cpp 复制代码
#ifdef USE_USART1
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
#elif defined(USE_USART2)
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
#elif defined(USE_USART3)
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
#endif

关键差异总结

特性 TMS320C6748 STM32
架构定位 高性能浮点 DSP 通用 ARM Cortex-M
时钟管理 PSC 统一管理电源+时钟 RCC 只管时钟,电源单独管理
代码风格 驱动库封装较深 HAL/标准库层次清晰
引脚配置 一个函数搞定 需要配置多个结构体
FIFO 硬件自带,需显式使能 部分型号支持

记忆要点

把 C6748 的初始化想象成 STM32 的"三部曲":

  1. "开电闸" → PSCModuleControl ≈ RCC 使能时钟
  2. "接线路" → UARTPinMuxSetup ≈ GPIO 复用配置
  3. "调参数" → UARTStdioInitExpClk ≈ USART_Init + USART_Cmd

只是 C6748 把这些步骤封装得更简洁,而 STM32 更加"手把手"地让你配置每个细节。本质上做的事情完全一样!

相关推荐
木子n117 分钟前
车载以太网与SOME/IP服务化通信实战-05.UDP 还是 TCP:连接管理与超时账、队头阻塞的 200 ms 罚单与 198 节点重连风暴
单片机·tcp/ip·udp·车载以太网·some/ip
逐光者9332 小时前
四位加法器:从半加器到全加器的数字电路设计详解
嵌入式硬件
老当益壮梁奶奶2 小时前
驱动学习(二):从零开始:驱动工程搭建与字符设备驱动框架详解(基于IMX6ULL)
c语言·arm开发·驱动开发·嵌入式硬件·学习
Yyq130208696822 小时前
紫荆M100,RISC-V开源架构,工业控制,电机驱动,国产替代
单片机·嵌入式硬件·risc-v
2501_922639582 小时前
率能半导体 SS6208L半桥MOSFET驱动器:12V/4A集成方案,覆盖电子烟、无线充电、半桥应用三大场景
单片机·嵌入式硬件·硬件工程
尼喃3 小时前
平芯微HY2120-CB充放电一体化:充电口与放电口合并电路原理图
嵌入式硬件
国科安芯13 小时前
立方星与微纳卫星综合电子微型化趋势下的抗辐射MCU选型综述
人工智能·单片机·嵌入式硬件·mcu·risc-v·抗辐射
xunyan623413 小时前
3-1 独立按键控制LED亮灭(SDCC + Notepad++ + STC-ISP/普中ISP)
单片机·嵌入式硬件·接口隔离原则
WD1372980155714 小时前
WD5030L,为充电桩、工业设备、5G 基站、车载系统、消费电子提供电源,7-30V 的宽压输入
stm32·单片机·嵌入式硬件·5g·车载系统·51单片机
创界工坊工作室16 小时前
30-基于STM32的小麦烘干塔温度控制系统设计
stm32·单片机·嵌入式硬件·proteus