打印
[应用方案]

基于赛元SC95F7571 MCU的UART通信与应用

[复制链接]
413|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Uriah|  楼主 | 2024-10-10 08:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

赛元SC95F7571是一款高性能、低功耗的8位单片机,具有丰富的外设资源,尤其是在工业控制和消费电子等领域广泛应用。其中,UART串行通信功能是其重要的外设之一,能够实现与其他设备的数据通信。本文将详细介绍如何使用SC95F7571 MCU实现UART通信,并通过代码实例演示如何发送和接收数据。

1. 硬件准备
  • 赛元SC95F7571开发板
  • USB转TTL模块(用于调试UART通信)
  • PC串口调试助手
  • 若干杜邦线

2. 开发环境
  • Keil C51 编译器
  • 赛元官方提供的开发工具和驱动库

3. UART简介UART(Universal Asynchronous Receiver Transmitter)是一种通用的异步收发器,通过串行通信进行数据传输。在赛元SC95F7571 MCU中,UART模块能够配置波特率、数据位、停止位和校验位,并且支持全双工通信。
UART通信的主要特点:
  • 异步通信:无时钟信号,需要设置发送和接收设备的波特率相同。
  • 全双工:可以同时发送和接收数据。
  • 单线通信:只需一根TX(发送)和RX(接收)线,简单高效。

4. UART配置步骤
  • 设置波特率:配置通信速度,如9600bps。
  • 配置数据位和停止位:常见的配置是8数据位、1停止位,无校验。
  • 使能UART发送和接收功能:配置SC95F7571的UART外设寄存器,使能发送和接收功能。
  • 中断处理:如果需要,可以启用UART中断,处理数据收发。

5. 实例代码:UART发送与接收以下是基于SC95F7571 MCU的UART通信代码,用于实现简单的数据发送与接收功能:
#include <SC95F7571.h>  // 引入SC95F7571的头文件

// 定义波特率为9600
#define BAUDRATE 9600

// 初始化UART
void UART_Init(void) {
    // 设置波特率
    PCON &= 0x7F;     // 选择波特率模式
    SCON = 0x50;      // 配置串口为模式1(8位数据,1停止位)
    TMOD |= 0x20;     // 定时器1设置为模式2(8位自动重装载)
    TH1 = 256 - (11059200 / 12 / 32 / BAUDRATE);  // 计算波特率值
    TR1 = 1;          // 启动定时器1
    ES = 1;           // 使能串口中断
    EA = 1;           // 使能总中断
}

// 发送一个字节
void UART_SendByte(unsigned char byte) {
    SBUF = byte;          // 将数据写入发送寄存器
    while (!TI);          // 等待发送完成
    TI = 0;               // 清除发送中断标志
}

// 接收一个字节
unsigned char UART_ReceiveByte(void) {
    while (!RI);          // 等待接收完成
    RI = 0;               // 清除接收中断标志
    return SBUF;          // 返回接收到的数据
}

// 主函数
void main(void) {
    UART_Init();  // 初始化UART

    while (1) {
        UART_SendByte('H');   // 发送字符'H'
        UART_SendByte('e');   // 发送字符'e'
        UART_SendByte('l');   // 发送字符'l'
        UART_SendByte('l');   // 发送字符'l'
        UART_SendByte('o');   // 发送字符'o'
        
        // 接收字符并发送回去(回显功能)
        unsigned char receivedData = UART_ReceiveByte();
        UART_SendByte(receivedData);  // 将接收到的数据回传
    }
}

6. 代码解析
  • UART_Init函数配置了SC95F7571的串口,使用定时器1生成波特率,设置为9600bps,8数据位、1停止位、无校验。
  • UART_SendByte函数将一个字节的数据发送到串口的发送缓冲区(SBUF),并等待发送完成。
  • UART_ReceiveByte函数则用于接收串口数据,当接收到数据后,清除接收中断标志,并返回接收到的数据。
  • 在主函数中,发送"Hello"字符串,并实现简单的回显功能,接收一个字节的数据并将其发送回去。

7. 实际应用场景UART通信广泛应用于各种场景中,尤其是在嵌入式设备中与外设的通信中。以下是SC95F7571 UART通信的几种典型应用场景:
  • 传感器数据读取:通过UART从外部传感器获取数据,并通过MCU进行处理。
  • 无线模块通信:UART用于MCU与WiFi、蓝牙等无线模块的通信。
  • 调试信息输出:开发过程中,UART可以输出调试信息,便于定位和解决问题。

8. 项目开发中的注意事项
  • 波特率匹配:通信双方的波特率必须匹配,否则会出现数据丢失或乱码。
  • 中断处理:在复杂应用中,建议使用UART中断处理数据收发,避免因等待串口数据而造成主程序阻塞。
  • 电平转换:MCU与外设的工作电压不同可能需要使用电平转换芯片,避免直接连接造成损坏。
  • 抗干扰设计:UART通信线路容易受到外部电磁干扰,特别是在工业环境中,建议加装滤波器或屏蔽线。

9. 总结通过这篇文章的介绍和代码实例,大家可以看到赛元SC95F7571 MCU的UART功能是非常易于使用的。无论是简单的字符发送,还是复杂的双向通信,SC95F7571都能胜任各种应用场景。在嵌入式开发中,掌握UART通信对于设备间的数据交互和系统调试是非常重要的,希望本文对大家有所帮助。



使用特权

评论回复
沙发
公羊子丹| | 2024-10-10 08:16 | 只看该作者
这个UART代码写得清晰明了,刚好用到,帮大忙了!

使用特权

评论回复
板凳
周半梅| | 2024-10-10 08:16 | 只看该作者
原来SC95F7571的串口配置这么简单,刚好拿来做我的传感器项目。

使用特权

评论回复
地板
帛灿灿| | 2024-10-10 08:17 | 只看该作者
我也用Keil做赛元的项目,串口通信总算搞懂了。

使用特权

评论回复
5
童雨竹| | 2024-10-10 08:17 | 只看该作者
请教一下,如果要改成115200的波特率,代码怎么改呢?

使用特权

评论回复
6
万图| | 2024-10-10 08:17 | 只看该作者
好实用的例子!能不能再分享个串口中断接收的代码?

使用特权

评论回复
7
Wordsworth| | 2024-10-10 08:17 | 只看该作者
我用这个MCU做了个LED控制的小项目,效果不错!

使用特权

评论回复
8
Pulitzer| | 2024-10-10 08:18 | 只看该作者
串口的回显功能很有意思,刚好适合调试时用。

使用特权

评论回复
9
Bblythe| | 2024-10-10 08:18 | 只看该作者
波特率的计算有点绕,幸好这代码都帮我们写好了。

使用特权

评论回复
10
Clyde011| | 2024-10-10 08:18 | 只看该作者
有没有人知道,这个MCU支持多串口通信吗?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

3755

帖子

0

粉丝