• 正文
  • 相关推荐
申请入驻 产业图谱

KF8F3132 Usart 模块:中断驱动 + 多字节通信快速落地

6小时前
314
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

KF8F3132 的 Usart 模块核心用法是 “中断驱动收发 + 灵活寄存器配置”,支持异步通信、多字节数据传输,通过简单配置即可实现 PC 与开发板的双向交互,核心应用场景包括串口指令响应、数据上报,实操关键是做好引脚映射、波特率校准和中断使能。

资料获取:KF8F系列单片机KF8F3132开发板应用笔记之Usart模块

点击:芯旺微电子 了解产品、技术资料、电路方案、文章/视讯、直播/课程等相关信息

1. 核心概述

1.1 模块功能

  • 支持异步通信模式,8 位数据位、1 位停止位(可配置),无奇偶校验 / 奇偶校验可选;
  • 支持中断驱动收发,避免轮询占用 CPU 资源,适配多字节连续传输场景;
  • 波特率可通过寄存器灵活配置,默认支持 9600bps,兼容不同通信速率需求。

1.2 典型应用

  • 串口指令响应:PC 发送指定十六进制指令(1H/2H),开发板返回对应字符串(HELLO!/ByeBye!);
  • 数据上报:开发板采集传感器数据后,通过 Usart 主动发送至 PC 端;
  • 设备调试:通过串口输出调试信息,辅助排查程序问题。

2. 硬件连接与串口配置

2.1 硬件接线(USB-USART 模块 ↔ 开发板)

USB-USART 模块引脚 KF8F3132 开发板引脚 说明
TX P14 数据接收端(开发板 RX)
RX P16 数据发送端(开发板 TX)
GND GND 共地,保障通信稳定
5V VCC 开发板供电

2.2 串口助手配置

  • 波特率:9600bps(可通过寄存器修改);
  • 数据位:8 位;
  • 停止位:1 位;
  • 奇偶校验:无;
  • 发送模式:16 进制发送,支持单条 / 多条发送。

3. 关键寄存器配置(核心操作)

Usart 模块配置核心是 “时钟 + 引脚 + 波特率 + 中断” 四步走,关键寄存器及配置要点如下:

3.1 基础配置寄存器

寄存器 地址 核心功能 关键配置位 / 值
OSCCTL 2FH 系统时钟配置 配置 16M 系统时钟(SCLK)
TR1 27H P1 口方向控制 配置 P14(RX)为输入,P16(TX)为输出
RSCTL 120H 接收状态与控制 使能串口模块、连续接收(CRXEN=1)
BRCTL 123H 波特率控制 BRG16(波特率发生器位数)、SCKPS(时钟分频)
TSCTL 124H 发送状态与控制 使能发送功能(TXEN=1)
EUBRGL/EUBRGH 波特率数据寄存器(低 / 高字节) 9600bps 时配置为 EUBRGL=25,EUBRGH=0

3.2 波特率计算与倍频器选择

(1)核心公式

  • SCLK:系统主时钟(默认 16MHz);
  • m:倍频器系数(由 SYNC、BRG16、HBRG 位组合决定);
  • [EUBRGH:EUBRGL]:波特率寄存器组合值(16 位)。

(2)倍频器 m 选择表

SYNC BRG16 HBRG 工作模式 倍频器 m
0 0 0 8 位 / 异步 64
0 0 1 8 位 / 异步 16
0 1 0 16 位 / 异步 16
0 1 1 16 位 / 异步 8
1 0 X 8 位 / 同步 16
1 1 X 16 位 / 同步 8

3.3 中断使能关键位

  • RCIE:Usart 接收中断使能位(RSCTL 寄存器);
  • PUIE:外设中断使能位;
  • AIE:总中断使能位;
  • RCIF:接收中断标志位(中断触发后需清零)。

4. 软件实现流程(中断驱动)

4.1 初始化流程(核心步骤)

void Usart_Init(void) {
    OSCCTL = 0x30; // 配置16M系统时钟SCLK
    TR1 &= 0xCF;   // P14(RX)输入,P16(TX)输出
    UARTPIN = 0;   // 引脚映射:RX=P14,TX=P16(UARTPIN=1时映射P0.0/P0.1)
    
    // 串口核心配置
    RSCTL |= 0x01; // 使能串口模块、连续接收(CRXEN=1)
    BRCTL = 0x40;  // 8位波特率发生器,HBRG=0(m=64)
    TSCTL |= 0x01; // 使能发送功能
    
    // 波特率配置(16MHz SCLK,9600bps)
    EUBRGL = 25;   // 低字节
    EUBRGH = 0;    // 高字节
    
    // 使能中断
    RCIF = 0;      // 清零接收中断标志
    RCIE = 1;      // 使能接收中断
    PUIE = 1;       // 使能外设中断
    AIE = 1;        // 使能总中断
}

4.2 中断处理函数(接收 + 响应)

void interrupt Usart_IRQ(void) {
    if (RCIF) { // 接收中断触发
        uint8_t recv_data = RXSDR; // 读取接收数据
        
        // 清溢出错误(若发生)
        if (OVFER) {
            CRXEN = 0;
            CRXEN = 1; // 重新使能接收
        }
        
        // 指令判断与响应
        if (recv_data == 0x01) { // 收到1H,返回HELLO!
            Usart_SendStr("HELLO!");
        } else if (recv_data == 0x02) { // 收到2H,返回ByeBye!
            Usart_SendStr("ByeBye!");
        }
        
        RCIF = 0; // 清零中断标志
    }
}

4.3 多字节发送函数

void Usart_SendStr(uint8_t *str) {
    while (*str != '') {
        while (!TXSRS); // 等待发送移位寄存器空闲
        TXSDR = *str;  // 写入发送数据
        str++;
    }
}

4.4 主函数逻辑

void main(void) {
    Usart_Init(); // 初始化Usart模块
    while (1) {
        // 主循环无需额外操作,依赖中断处理收发
    }
}

5. 测试验证步骤

  1. 按硬件接线图连接开发板与 USB-USART 模块,接通电源
  2. 打开串口助手,配置波特率 9600、8 数据位、1 停止位、无奇偶校验;
  3. 选择 “16 进制发送”,发送01,开发板返回 “HELLO!”;
  4. 发送02,开发板返回 “ByeBye!”;
  5. 若未收到响应,检查引脚连接、寄存器配置(尤其是波特率和中断使能位)。

6. 关键注意事项(避坑指南)

  1. 引脚映射选择:UARTPIN=0 时 RX=P14、TX=P16;UARTPIN=1 时 RX=P0.0、TX=P0.1,14/16 引脚使用时 UARTPIN 必须设为 1;
  2. 波特率校准:若通信乱码,优先检查 SCLK 频率与 EUBRGL/EUBRGH 配置,确保公式计算无误,倍频器 m 需与 BRCTL 寄存器配置匹配;
  3. 中断使能顺序:必须先使能外设中断(PUIE)和总中断(AIE),再使能 Usart 接收中断(RCIE),否则中断无法触发;
  4. 发送等待:发送数据前需等待 TXSRS(发送移位寄存器状态位)为空闲,避免数据丢失;
  5. 帧格式:默认 1 位起始位 + 8 位数据位 + 1 位停止位,奇偶校验需通过 RSCTL 寄存器额外配置。

KF8F3132 的 Usart 模块实操核心是 “寄存器精准配置 + 中断驱动”,无需复杂逻辑即可实现稳定的多字节通信。按 “硬件接线→时钟配置→波特率校准→中断使能→收发函数” 的步骤操作,最快 10 分钟即可完成基础通信功能落地,适配多数串口交互场景。

相关推荐