F5529同时配置UCA1和UCB1出错

2019-07-31 16:04发布

楼主自己画的板子,是通过F5529控制前端模拟器件采集 并通过uart传数据到电脑上
与前端通信是用UCB1的SPI模式,前段时间调通了,并在示波器上看到了正确的数据流

后来写的UCA1配置UART的程序,单独程序调试时候可以将数据传输至电脑上,串口助手也可以看到正确的数据

但之后将俩段代码整合在一起时候,发现程序出错,SPI输出一直是低电平,所以串口助手看到全部是00 不知道有没有大神知道是怎么回事?
贴上代码
  1. //--------------------SPI setup------------------------------------------------   
  2.     P4SEL |= BIT1+BIT2+BIT3;                       // P4.1-3 option select 3-PIN SPI
  3.     P4DIR |= BIT1;                                 // SIMO output
  4.     P4DIR &= ~BIT2;                                // SOMI input
  5.     P4DIR |= BIT3;                                 // CLK output
  6.    
  7.     P4OUT |= BIT0;                                 //P4.0输出高电平 /CS disabled
  8.     P4DIR |= BIT0;                                 //P4.0 for CS
  9.    
  10.     UCB1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  11.     UCB1CTL0 |= UCSYNC+UCMST+UCMSB+UCCKPL;                 //  SPI master  
  12.     UCB1CTL0 &= ~UC7BIT;                      //  8-bit
  13.     UCB1CTL0 &= ~UCCKPH;

  14.     UCB1CTL1 |= UCSSEL_2;                     // SMCLK=1.048M
  15.     UCB1BR0 = 0;                              // 不分频
  16.     UCB1BR1 = 0;                              //
  17.    
  18.     UCB1CTL1 &= ~UCSWRST;
  19.     UCB1IE  = 0;
复制代码
  1.     UCSCTL4 |= SELA__REFOCLK;      // ACLK = REFOCLK
  2. //---------------------UART发送到PC机--------------------------------------
  3.     P4SEL = BIT4+BIT5;                        // P4.4,5 = USCI_A1 TXD/RXD
  4.    
  5.     UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**

  6.     UCA1CTL1 |= UCSSEL_1;                     // CLK = ACLK
  7.     UCA1BR0 = 0x03;                           // 32kHz/9600=3.41 (see User's Guide)
  8.     UCA1BR1 = 0x00;                           //
  9.     UCA1MCTL = UCBRS_3+UCBRF_0;               // Modulation UCBRSx=3, UCBRFx=0

  10. //    UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  11. //    UCA1BR0 = 6;                              // 1MHz 9600 (see User's Guide)
  12. //    UCA1BR1 = 0;                              // 1MHz 9600
  13. //    UCA1MCTL = UCBRS_0 + UCBRF_13 + UCOS16;   // Modln UCBRSx=0, UCBRFx=0,
  14.    
  15.     UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  16. //    UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt

  17. //--------------------------------------------------------------------------
复制代码开始以为是都用到SMCLK出错 于是将UART配置成ACLK并将REFO付给ACLK……
但是依旧出错……有没有大神遇到过这种情况?
应该IO口都没有复用啊  是中断问题?还是别的?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
dirtwillfly
1楼-- · 2019-07-31 17:08
可能是整合在一起后,时序相互影响了
jixueyuan163
2楼-- · 2019-07-31 18:55
dirtwillfly 发表于 2014-8-13 11:57
可能是整合在一起后,时序相互影响了

怎么个时序互相影响法?通过修改哪里可以搞定?
dirtwillfly
3楼-- · 2019-07-31 20:44
jixueyuan163 发表于 2014-8-13 15:40
怎么个时序互相影响法?通过修改哪里可以搞定?

你是不是采集数据并传输到电脑用的实时方式?
vivilzb1985
4楼-- · 2019-07-31 23:45
 精彩回答 2  元偷偷看……
Unshining
5楼-- · 2019-08-01 02:49
"P4SEL = BIT4+BIT5;  "
如果你的UCA1在UCB1后配置的话,这句话将直接把UCB1的引脚设为GPIO,即“P4SEL |= BIT1+BIT2+BIT3; ” 被覆盖而无效。
angerbird
6楼-- · 2019-08-01 04:12
相互间影响了呗。。这个注意事件的时间先后顺序的就可以的啦。

一周热门 更多>