自己最近正在弄,还没弄完,写得也不是很整齐,大家将就看看吧。
一、2553串口
要使用2553的串口,要先学会使用相关寄存器。
我们需要用到的有UCAxCTL0以及UCAxCTL1,UCA0BR0以及UCA0BR1,UCA0MCTL,UCAxRXBUF,UCAxTXBUF,IE2以及IFG2
一般选择低 频 波 特 率 模 式,在这种模式下,最大的 USCI 波特率是时钟源频率的 1/3。当 除法因子N 等于或大于 16,可以通过设置 UCOS16 来选择过采样波特率产生模式。
UCAxCTL0不用管,默认状态即可,也即奇偶校验停止,8位长度字符,UART模式,1个停止位。
UCAxCTL1主要用于选择时钟源以及复位。
比如,UCA0CTL1 |= UCSWRST; // 复位寄存器设置
UCA0CTL0 = 0x00; //默认状态一般就是0x00
UCA0CTL1 |= UCSSEL_1;//选择辅助时钟UCA0CTL1 |= UCSSEL_2;选择子系统辅助时钟,一般就这两个时钟
对于G2553来讲,焊接外部晶振时。默认情况下,ACLK就是32.768KHZ,是这样的吧?
如果要是更改波特率的话,要用到下面的三个寄存器:也就是改波特率,改除法因子,改调制的寄存器,改时钟,改了时钟也要注意更改对应的延时函数
UCA0BR1 = 0x00;UCA0BR1是UCA0BR0的补充,我们也用得上。
主要是UCA0BR0控制波特率,UCA0BR0 的值就是 所选择的时钟频率除以要使用的波特率,然后四舍五入。
比如 UCA0BR0 = 0x03; // 波特率设置为9600bps 因为除法因子N=32768/9600=3.4,所以四舍五入给它3,16进制和十进制都可以
16000000,给UCA0BR0=125;
除法因子 N 通常不是一个整数值,因此至少需要一个除法器和一个调制器阶段尽可能的接近该因子。
UCA0MCTL寄存器里面的UCBRSx就是调制器。UCBRSx的值即为 N-四舍五入后UCA0BR0 的值 然后再四舍五入一下就行
UCA0MCTL其他两个域(field)第一调至阶段以及过采样使能,一般为0,不管
此处注意,值赋给UCBRSx时,是直接赋值的,但UCBRSx只是UCA0MCTL寄存器的一个域,我们给UCBRSx赋值时,还是要通过寄存器的。比如:
#define UCBRS2 (0x08) /* USCI Second Stage Modulation Select 2 */
#define UCBRS1 (0x04) /* USCI Second Stage Modulation Select 1 */
#define UCBRS0 (0x02) /* USCI Second Stage Modulation Select 0 */
给寄存器赋值时,UCA0MCTL = UCBRS1+UCBRS0; 对于寄存器来说,它等于2+4=6,UCBRSx正好等于1+2=3,因为它是从寄存器的第二位开始的。
最后,使复位禁用即可。如:
UCA0CTL1 &= ~UCSWRST;
发送int型数字,现在是将一个大整数每一个数字当作一个char,一次次发送,没有找到更好的方法。
用上述方法更改波特率
用G2553,使用USB的串口,发现只有外部晶振下,1200以及2400,4800,9600才可以工作,1MHZ下9600,4800也可以。调节到更高的频率时,112500,就会出现乱码。这个板子仿真器只支持9600,下图从官方debugger.pdf上拷的 slau647
但是,使用物理串口的话,是能够达到19200的。在1MHZ下是能够达到115200的波特率的,更高的情况暂时没有测试。
另外,UCAxBR0只有8位,超过UCBR0会怎么样?原来,波特率控制寄存器总共有2个。16位的
(UCAxBR0 + UCAxBR1 × 256) 的 16 位值组成了分频值。
还有,如果想直接使用2553的下载线进行调试的话,可以开启1.1以及1.2的串口,直接就可以用。不用做什么修改。
使用F5529的转串口时,一定要使用3.3V电压,5V电压就会不工作。
最基本的串口是最简单的,只是要和电脑通信的话。拿5529举例,可以使用它的P3.3(TXD)以及P3.4(RXD),也即UCA0)。初始化的话,我们需要开启第二功能,复位寄存器,设置时钟,选择波特率。发送的话,就直接向UCA0TXBUF填入一个字节的数据(char类型),接收的话,当(UCA0IFG&UCRXIFG)==1时,就可以直接返回UCA0RXBUF,这是最基础的应用。
F5529怎么才能直接用USB直接进行串口调试呢?看了下它的原理图,3.3(TXD)与3.4(RXD)端口连接在了debugger上。但为什么直接下载就不可以呢?(与G2553不一样),对比2553的例程,我觉得可能是缺少P3SEL2 |= BIT3+BIT4;试一试,不行。库中根本没定义P3SEL2 ,
USB中应该是用了4.4和4.5的引脚,针对这两个引脚写串口程序应该就可以了
F5529的下载器连接了4.4与4.5引脚,所以,如果想用下载器作为串口的话,必须针对4.4与4.5写串口程序才可以。其实也很简单,只需要使用USCIA1模块就行。3.3与3.4,3.4与3.5使用的是uscia0模块。
时钟调好了,也许能达到9600,但是我感觉要费好大力气。先算了吧。