这次的串口的程序还是把接收的字符再发送出去。之前先说明几点
- 系统时钟,设置系统时钟输出脚输出,方便测量目前的系统时钟,有了准确的时钟才能计算波特率等信息。
- 波特率计算方式,根据寄存器UDnCTL1和UDnCTL2来计算,见下图
举个例子:如果串口的总线时钟和系统时钟一致为32MHz,我们需要115200bps的波特率,下面算出UDnCTL2寄存器的值(即K值),可以得到一个方程为115200bps = 32MHz / 2*k ,可以求的 k = 138.888 ,取值138或者139。可见通信是有误差的。只要是误差量足够小就不足为虑,不要进行连续的大数据传输问题就不会很大。下面来计算下误差率,如果取值为138的话,则通信波特率可以由 32MHz / (2*138) = 115942.0289855072 bps ,误差率为((115942.02899/ 115200) - 1)* 100 = 0.644%。
下面是代码部分了
- 串口接收中断屏蔽寄存器 UD4RIC
- 串口控制寄存器0 UD4CTL0
- 串口控制寄存器1UD4CTL1
- 串口控制寄存器2 UD4CTL2
- 时钟选择控制寄存器3 SELCNT3 -- ISEL34
- 串口状态寄存器 UD4STR -- UD4TSF
- 串口发送数据寄存器 UD4TX
- 串口接收数据寄存器UD4RX
程序上操作:串口初始化,串口使能,串口禁止,串口查询发送一个字符,串口中断接收一个字符。
- 串口初始化
- 禁止串口发送,接受及运行;
- 关闭接收中断,清接收中断标志;
- 设置中断优先级;
- 设置串口波特率;
- 设置串口时钟;
- 设置串口数据帧属性;
- 设置串口RXD,TXD端口属性。
- 串口使能
- 使能串口接收中断,清接收中断标志位;
- 使能串口发送,接收及运行标志位。
- 串口禁止
- 禁止串口发送,接收及运行;
- 禁止串口的三种中断源。
- 串口查询发送一个字符
- 串口中断接收一个字符
下面是具体的代码了。
代码出处:main.c
#include