0
点赞
收藏
分享

微信扫一扫

G2553与F5529串口


自己最近正在弄,还没弄完,写得也不是很整齐,大家将就看看吧。

一、2553串口

 

       要使用2553的串口,要先学会使用相关寄存器。

G2553与F5529串口_寄存器

 

 

我们需要用到的有UCAxCTL0以及UCAxCTL1,UCA0BR0以及UCA0BR1,UCA0MCTL,UCAxRXBUF,UCAxTXBUF,IE2以及IFG2

 

 

一般选择低 频 波 特 率 模 式,在这种模式下,最大的 USCI 波特率是时钟源频率的 1/3。当 除法因子N 等于或大于 16,可以通过设置 UCOS16 来选择过采样波特率产生模式。

 

UCAxCTL0不用管,默认状态即可,也即奇偶校验停止,8位长度字符,UART模式,1个停止位。

 

UCAxCTL1主要用于选择时钟源以及复位。

 

G2553与F5529串口_串口_02

 

比如,UCA0CTL1 |= UCSWRST;              // 复位寄存器设置
    UCA0CTL0 = 0x00;             //默认状态一般就是0x00
    UCA0CTL1 |= UCSSEL_1;//选择辅助时钟UCA0CTL1 |= UCSSEL_2;选择子系统辅助时钟,一般就这两个时钟

对于G2553来讲,焊接外部晶振时。默认情况下,ACLK就是32.768KHZ,是这样的吧?

 

 

如果要是更改波特率的话,要用到下面的三个寄存器:也就是改波特率,改除法因子,改调制的寄存器,改时钟,改了时钟也要注意更改对应的延时函数

 

G2553与F5529串口_四舍五入_03

 

G2553与F5529串口_寄存器_04

 

 

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

G2553与F5529串口_寄存器_05

G2553与F5529串口_四舍五入_06

但是,使用物理串口的话,是能够达到19200的。在1MHZ下是能够达到115200的波特率的,更高的情况暂时没有测试。

 

 

 

 

 

另外,UCAxBR0只有8位,超过UCBR0会怎么样?原来,波特率控制寄存器总共有2个。16位的

 

G2553与F5529串口_四舍五入_07

 (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,但是我感觉要费好大力气。先算了吧。

 

 

举报

相关推荐

0 条评论