5262|14

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

MSP430 5438 串口发送 [复制链接]

/****************************************************************
串口发送字符串函数    
****************************************************************/
void UartTX_Send(unsigned char *Data,int len)
{
  int j;
  for(j=0;j<len;j++)
  {
    while (!(UCA1IFG&UCTXIFG));
    UCA1TXBUF =*Data++;
   
  }
}

根据datesheet上面写的: (UCTXBUFx)   The transmit data buffer is user accessible and holds the data waiting to be moved into the transmit shift  register and transmitted on UCAxTXD. Writing to the transmit data buffer clears UCTXIFG.

执行完UCA1TXBUF =*Data++; 之后UCTXIFG的值不是应该变成0了吗?可是单步调试值没有发生变化,为什么呢?

最新回复

10楼的可以用  详情 回复 发表于 2012-8-13 11:23
 
点赞 关注

回复
举报

32

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
UCA1TXBUF =*Data++;    这句貌似不能这么写吧?
UCA1TXBUF = *Data;
Data++;
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
还有你的循环是连续发送   没有检测发送完成标志位    这样写程序可靠性是很低的
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

4
 

回复 板凳 z7turn 的帖子

while (!(UCA1IFG&UCTXIFG));
这个不就是在检测UCA1TXBUF是否为空吗
 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

5
 
while (!(UCA1IFG&UCTXIFG));
    UCA1TXBUF =*Data++;

1。 这样写是没问题的,你连续跑应该能正确发送的。至于单步运行为什么没清零这个标志,应该是仿真器和芯片没同步造成的。
 
 
 

回复

400

帖子

0

TA的资源

五彩晶圆(中级)

6
 
或者检查下你的初始化代码.

while (!(UCA1IFG&UCTXIFG));
这句话就是在等待发送结束.
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

7
 
不好意思   没看到你检查标志位。。。。   擦
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

8
 
uartIE有没有使能哦?
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

9
 

回复 5楼 Triton.zhang 的帖子

连续跑在串口上面没东西显示 不知道是怎么回事
#include "msp430x54x.h"
void init_uart(void);
void init_clock(void);
/****************************************************************
串口发送字符串函数                               
****************************************************************/
void UartTX_Send(unsigned char *Data,int len)
{
  int j;
  for(j=0;j   {
    while (!(UCA1IFG&UCTXIFG));
    UCA1TXBUF =*Data++;
   
  }
}

void main(void)
{
  unsigned char a[10]="hello";
  
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  init_clock();
  init_uart();
// __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
  
    UartTX_Send(a,5);
  
  __no_operation();
}
void init_clock(void)
{
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
  P11DIR = BIT0+BIT1+BIT2; // P11.1-2 to output direction
  P11SEL |= BIT0+BIT1+BIT2; // P11.1-2 to output SMCLK,MCLK
  P5SEL |= 0x0C; // Port select XT2
  UCSCTL6 &= ~XT2OFF; // Ena××e XT2 even if not used
  UCSCTL3 |= SELREF_2; // FLLref = REFO
  UCSCTL4 |= SELA__XT2CLK;//辅助系统时钟来源XT2-16M
  UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2-16M
  _NOP();
  UCSCTL5 |= DIVM__2 + DIVS__16+DIVA__16; //主系统时钟2分频-8M;子系统时钟16分频-1M;辅助系统时钟16分频1M
  /*do
  {
    UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags
    SFRIFG1 &= ~OFIFG; // Clear fault flags
    for(i=0;i<0xFFFF;i++); // Delay for Osc to stabilize
  }while (SFRIFG1&OFIFG); // Test oscillator fault flag
  */     如果不屏掉的话就一直停在这里面 为啥呢?
}
void init_uart(void)
{
  P5SEL |= 0xC0;                             // P5.6,7 = USCI_A1 TXD/RXD
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL__SMCLK;                     // SMCLK
  UCA1BR0 = 0x08;                              // 1MHz 115200 (see User's Guide)
  UCA1BR1 = 0x00;                              // 1MHz 115200
  UCA1MCTL |= UCBRS_6+UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA1IE |= UCTXIE;                         // Enable USCI_A1 RX interr
  UCA1IFG = 0X02;        //.........
  //_EINT();
}
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(中级)

10
 

回复 8楼 z7turn 的帖子

有的哦  就是在串口调试助手上显示不出来 为啥?
#include "msp430x54x.h"
void init_uart(void);
void init_clock(void);
/****************************************************************
串口发送字符串函数
****************************************************************/
void UartTX_Send(unsigned char *Data,int len)
{
int j;
for(j=0;j {
while (!(UCA1IFG&UCTXIFG));
UCA1TXBUF =*Data++;

}
}

void main(void)
{
unsigned char a[10]="hello";

WDTCTL = WDTPW + WDTHOLD; // Stop WDT
init_clock();
init_uart();
// __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled

UartTX_Send(a,5);

__no_operation();
}
void init_clock(void)
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer
P11DIR = BIT0+BIT1+BIT2; // P11.1-2 to output direction
P11SEL |= BIT0+BIT1+BIT2; // P11.1-2 to output SMCLK,MCLK
P5SEL |= 0x0C; // Port select XT2
UCSCTL6 &= ~XT2OFF; // Ena××e XT2 even if not used
UCSCTL3 |= SELREF_2; // FLLref = REFO
UCSCTL4 |= SELA__XT2CLK;//辅助系统时钟来源XT2-16M
UCSCTL4 |= SELS_5 + SELM_5; // SMCLK=MCLK=XT2-16M
_NOP();
UCSCTL5 |= DIVM__2 + DIVS__16+DIVA__16; //主系统时钟2分频-8M;子系统时钟16分频-1M;辅助系统时钟16分频1M
/*do
{
UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
for(i=0;i<0xFFFF;i++); // Delay for Osc to stabilize
}while (SFRIFG1&OFIFG); // Test oscillator fault flag
*/ 如果不屏掉的话就一直停在这里面 为啥呢?
}
void init_uart(void)
{
P5SEL |= 0xC0; // P5.6,7 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL__SMCLK; // SMCLK
UCA1BR0 = 0x08; // 1MHz 115200 (see User's Guide)
UCA1BR1 = 0x00; // 1MHz 115200
UCA1MCTL |= UCBRS_6+UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCTXIE; // Enable USCI_A1 RX interr
UCA1IFG = 0X02; //.........
//_EINT();
}
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

11
 

回复 10楼 tgreen 的帖子

我手里有5438的uart程序   需要的话可以加我qq     452251911    注明eeworld就行了
 
 
 

回复

32

帖子

0

TA的资源

一粒金砂(中级)

12
 

回复 10楼 tgreen 的帖子

}while (SFRIFG1&OFIFG); // Test oscillator fault flag    停在这里说明没有起震成功
 
 
 

回复

2002

帖子

24

TA的资源

五彩晶圆(高级)

13
 
板子是用的16M晶振么?找个时钟初始化函数替换下来试试
 
 
 

回复

207

帖子

0

TA的资源

一粒金砂(中级)

14
 
了解了.
 
个人签名http://shop69542095.taobao.com/供应芯片
 
 

回复

55

帖子

0

TA的资源

一粒金砂(中级)

15
 
10楼的可以用
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表