1. 初识九齐单片机UART通信
大家好,今天我想和大家聊聊九齐单片机NY8BE64A的UART通信。如果你刚开始接触单片机,可能会觉得UART通信听起来很高深,其实它就像两个人用对讲机聊天一样简单。一个人说,一个人听,中间约定好说话的速度和规则,就能顺利沟通了。
在嵌入式开发中,UART(通用异步收发传输器)是最基础的通信方式之一。我刚开始用九齐单片机的时候,最头疼的就是配置寄存器和计算波特率。官方手册虽然详细,但全是寄存器地址和二进制代码,看得人眼花缭乱。后来我慢慢摸索出一套简单实用的方法,今天就把这些实战经验分享给大家。
九齐NY8BE64A这款单片机性价比很高,资源丰富,特别适合做各种小家电、智能硬件和工业控制。它的UART功能虽然不像一些高端芯片那么强大,但完全能满足大部分日常需求。无论你是想通过串口调试程序,还是连接蓝牙模块、WiFi模块,甚至是和电脑通信,UART都是最直接的选择。
学习UART通信,最关键的就是搞懂两个东西:寄存器配置和波特率计算。寄存器就像是单片机的控制面板,你通过拨动上面的开关(写寄存器)来设置通信规则;波特率则是通信的速度,就像两个人聊天的语速,太快了听不清,太慢了效率低。接下来我会用最直白的方式,带你一步步掌握这些核心技能。
2. 寄存器配置详解
2.1 基础寄存器功能介绍
九齐NY8BE64A的UART通信全靠几个关键寄存器控制,我把它们叫做"通信六君子"。首先是IOST寄存器组,包括IOSTA、IOSTB、IOSTC,它们决定了各个IO口是输入还是输出模式。这就像给每个引脚分配任务——谁负责说话(TX),谁负责听话(RX)。
我记得第一次配置时犯了个错误,把TX和RX的引脚模式设反了,结果数据死活发不出去。后来才发现,TX引脚必须设为输出模式,RX引脚必须设为输入模式。具体到NY8BE64A,PB6通常用作TX,PB7用作RX。设置方法很简单:
IOSTB = 0xBF; // 将PB6设为输出,PB7设为输入
接下来是PORT寄存器,控制IO口的输出电平。当你发送数据时,单片机就是通过改变PORT寄存器的值来产生高低电平信号的。THR寄存器特别重要,它既是发送缓存又是接收缓存。当你发送数据时,把数据写入THR;接收数据时,从THR读取数据。
SIMCR寄存器用来启用UART功能并选择引脚。比如设置SIMCR = 0x20就是启用TX功能,SIMCR = 0x10则是启用RX功能。LCR寄存器最复杂,它控制着数据格式:数据位长度、停止位数量、是否使用校验位等。这些设置必须和通信对方保持一致,否则就像用中文和只懂英文的人聊天,完全对不上号。
2.2 实际配置步骤演示
让我用一个实际例子演示完整的配置过程。假设我们要配置UART为8位数据位、1位停止位、无校验位、波特率9600。首先设置引脚模式:
// 设置PB6为TX输出,PB7为RX输入
IOSTB = 0xBF; // 二进制10111111,PB6输出,PB7输入
// 其他端口可以设为输出模式备用
IOSTA = 0x00; // PORTA全部输出
IOSTC = 0x00; // PORTC全部输出
然后配置UART参数:
SIMCR = 0x20; // 启用UART TX功能
LCR = 0x03; // 8位数据,1位停止,无校验
这里有个小技巧:LCR的配置值可以用位运算组合。比如要设置8位数据位+1位停止位+偶校验,就是0x03 | 0x04 | 0x10 = 0x17。这种写法更直观,也更容易修改。
最后别忘了初始化中断标志:
INTF3 = 0xF7; // 清除TX标志位
配置完成后,可以通过读取INTF3寄存器来判断发送是否完成。当INTF3的bit3为1时,表示THR寄存器为空,可以发送下一个数据了。这个过程需要轮询检查,就像等公交车时不时要看车来了没有。
3. 波特率计算实战
3.1 波特率计算公式解析
波特率计算是很多新手最头疼的部分,但其实只要掌握一个公式就足够了:波特率 = HIRC_freq / (16 * N)。其中HIRC_freq是内部高速时钟频率,N是我们要写入DLL和DLH寄存器的值。
把这个公式变一下,得到N = HIRC_freq / (16 * 波特率)。举个例子,如果使用4MHz时钟,想要9600的波特率,那么N = 4000000 / (16 * 9600) = 2


637

被折叠的 条评论
为什么被折叠?



