串通可以两种方法其现 一、USART硬件直接实现 二、通过定时器软件实现
该模块可现现: UART异步串行通讯 SPI同步串行通讯 I2C同步串行通讯
UxCTL控制寄存器 7:PENA 6:PEV 5:SPB 4:CHAR 3:LISTEN 2:SYNC 1:MM 0:SWRST PENA 校验允许位 0 校验禁止 1 校验允许 校验允许时,发送端发送校验,接收端接收该校验,地址位多机模式中,地址位包含校验操作. PEV 奇偶校验位,该位在校验允许时有效 0 奇校验 1 偶校验 SPB 停止位选择.决定发送的停止位数,但接收时接收器只检测1位停止位. 0 1位停止位 1 2位停止位 CHAR 字符长度 0 7位 1 8位 LISTEN 反馈选择.选择是否发送数据由内部反馈给接收器 0 无反馈 1 有反馈,发送信号由内部反馈给接收器 SYNC USART模块的模式选择 0 UART模式[异步] 1 SPI模式[同步] MM 多机模式选择位 0 线路空闲多机协议 1 地址位多机协议 SWRST 控制位 上电时该位置位,此时USART状态机和运行标志初始化成复状态(URXIFG=0,URXIE=0,UTXIE=0,UTXIFG=1)。所有受影响的逻辑保持在复位状态,直至SWRST复位。也就是说一次系统复位后,只有对SWRST复位,USART才能重新被允许。而接收和发送允许标志URXE和UTXE不会因SWRST而更改。 SWRST位会使URXIE、UTXIE、URXIFG、RXWAKE、TXWAKE、RXERR、BRK、PE、OE及FE等复位。 在串行口使用设置时,这一位起重要的作用。一次正确的USART模块初始化应该是这样设置过程的:先在SWRST=1时设置,设置完串口后再设置SWRST=0;最后如需要中断,则设置相应的中断使能。 UxTCTL发送控制寄存器 6:CKPL 5:SSEL1 4:SSEL0 3:URXSE 2:TXWAKE 0:TXEPT CKPL时钟极性控制位 0 UCLKI信号与UCLK信号极性相同 1 UCLKI信号与UCLK信号极性相反 SSEL1、SSEL0时钟源选择,此两位确定波特率发生器的时钟源 0 外部时钟UCLKI; 1 辅助时钟ACLK 2 子系统时钟SMCLK 3 子系统时钟SMCLK URXSE 接收触发沿控制位 0 没有接收触发沿检测 1 有接收触发沿检测 TXWAKE 传输唤醒控制 0 下一个要传输的字符为数据 1 下一个要传输的字符是地址 TXEPT 发送器空标志,在异步模式与同步模式时是不一样的。 0 正在传输数据或者发送缓冲器(UTXBUF)有数据 1 表示发送移位寄存器和UTXBUF空或者SWRST=1 URCTL接收控制寄存器 7:FE 6:PE 5:OE 4:BRK 3:URXEIE 2:URXWIE 1:RXWAKE 0:RXERR FE 帧错误标志位 0 没有帧错误 1 帧错误 PE 校验错误标志位 0 校验正确 1 校验错误 OE 溢出标志位 0 无溢出 1 有溢出 BRK 打断检测位 0 没有被打断 1 被打断 URXEIE 接收出错中断允许位 0 不允许中断,不接收出错字符并且不改变URXIFG标志 1 允许中断,出错字符接收并且能够置位URXIFG URXWIE 接收唤醒中断允许位,当接收到地址字符时,该位能够置位URXIFG,当URXEIE=0,如果接收内容有错误,该位不能置位URXIFG。 0 所有接收的字符都能够置位URXIFG 1 只能接收到地址字符才能置位URXIFG RXWAKE 接收唤醒检测位。在地址位多机模式,接收字符地址位置位时,该机被唤醒,在线路空闲多机模式,在接收到字符前检测到URXD线路空闲时,该机被唤起,RXWAKE置位。 0 没有被唤醒,接收到的字符是数据 1 唤醒,接收的字符是地址 RXERR 接收错误标志位 0 没有接收错误 1 有接收到错误 UxBR0、UxBR1波特率选择寄存器 这两个寄存器是用于存放波特率分频因子的整数部分。 UxBR0波特率选择寄存器0 UxBR1波特率选择寄存器1 UxMCTL波特率调整控制寄存器 M7 M6 M5 M4 M3 M2 M1 M0 若波特率发生器的输入频率BRCLK不是所需波特率的整数倍,带有一小数,则整数部分写UBR寄存器,小数部分由调整寄存器UxMCTL的内容反映。波特率由以下公式计算: 波特率=BRCLK/(UBR+(M7+M6+…M0)/8) URXBUF接收数据缓存 接收缓存存放移位寄存器最后接收的字符,可由用户访问。读接收缓存可以复位接收时产生的各种错误标志、RXWAKE位和URXIFGx位。如果传输7位数据,接收缓存内容右对齐,最高位为0。 当收接和控制条件为真时,接收缓存装入当前接收到的字符。 当接收和控制条件为真时接收数据缓存结果 UTXBUF发送数据缓存 发送缓存内容可以传至发送移位寄存器,然后由UTXDx传输。对发送缓存进行写操作可以复位UTXIFGx。如果传输出7位数据,发送缓存内容最高为0。
关于波特率: 分频因子N分频计数器时钟BRCLK N= BRCLK/波特率
UBR为UXBR0 中16位数据 MX为调整数据
波特率 = BRCLK/N=BRCLK/UBR+(M7+M6+…….M0)/8
如:BRCLK = 32.768KHZ 要产生2400HZ波特 32768/2400=13.65 则UXBR0为13 调整是8位的:0.65x8=5,所以有5个1,3个0写时最好差开 01101011 简单例子: #include <msp430f2274.h> while(1) void DisplayCharacter(char array[], char size){ |