打印
[MCU]

USCI模块例程

[复制链接]
楼主: zhanghqi
手机看帖
扫描二维码
随时随地手机跟帖
21
houcs| | 2020-6-29 22:54 | 只看该作者 回帖奖励 |倒序浏览
sci的代码呢?

使用特权

评论回复
22
supernan| | 2020-6-29 22:58 | 只看该作者
串口程序,USCI模式

使用特权

评论回复
23
chenjunt| | 2020-6-29 23:00 | 只看该作者
楼上分享的不错

使用特权

评论回复
24
ousj| | 2020-6-29 23:03 | 只看该作者
那就是采用UART的通讯就可以了哈

使用特权

评论回复
25
lium| | 2020-6-29 23:05 | 只看该作者
最简单最直接的还是UARt的通讯的

使用特权

评论回复
26
wyjie| | 2020-6-29 23:07 | 只看该作者
嗯,这个官网上很多,支持多去官网看看

使用特权

评论回复
27
jlyuan| | 2020-6-29 23:10 | 只看该作者
官網沒有asm的USCI,必須用C的去推

使用特权

评论回复
28
yszong| | 2020-6-29 23:14 | 只看该作者
//bbs.21ic.com/forum.php?mod=viewthread&tid=406123

使用特权

评论回复
29
dengdc| | 2020-6-29 23:17 | 只看该作者
这个用定时器模拟吧?

使用特权

评论回复
30
llia| | 2020-6-29 23:18 | 只看该作者
上官网的啦,上边的资料比我们提供的要权威的

使用特权

评论回复
31
shimx| | 2020-6-29 23:21 | 只看该作者
在3楼给的网站上,我怎么没有找到examples code呢,examples code 该怎么找呢

使用特权

评论回复
32
jiaxw| | 2020-6-29 23:23 | 只看该作者

UART例程
#include<msp430g2553.h>
unsigned int counter;
int main( void )
{
  WDTCTL = WDTPW + WDTHOLD;
  DCOCTL = 0;                               // Select lowest DCOx and MODx settings
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2 = BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt

  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}

使用特权

评论回复
33
zhaoxqi| | 2020-6-29 23:25 | 只看该作者
安装了一个MSPWare_2_40_00_37_setup,结果是ccs才能用,我装的是IAR。。。

使用特权

评论回复
34
huangchui| | 2020-6-29 23:30 | 只看该作者

__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}

使用特权

评论回复
35
zhenykun| | 2020-6-29 23:33 | 只看该作者
这个得有例程才行的。

使用特权

评论回复
36
wyjie| | 2020-6-29 23:34 | 只看该作者
430的USCI串口(UART mode)初始化设置十分繁杂, UCA0BR0  UCA0BR1   UCA0MCTL 等还需按照波特率计算

使用特权

评论回复
37
jlyuan| | 2020-6-29 23:36 | 只看该作者

#define clock 8000000
#define UCBRS(x) UCBRS_##x
void uart_init(long baud)
{
      float  x  =  clock / baud ;
      long  y  =  clock / baud ;
      char n;
      P1SEL  =  BIT1  +  BIT2 ;                     // P1.1 = RXD, P1.2=TXD
      P1SEL2  =  BIT1  +  BIT2 ;   
      UCA0CTL1|=UCSSEL_2 ;
     
      UCA0BR0  =  y % 256;                        
      UCA0BR1  =  y / 256;
     
      n=(char)((x-y)*8);
      UCA0MCTL=2*n; //UCBRS_n n为*2     
      UCA0CTL1 &= ~UCSWRST;                    
      IE2  |=  UCA0RXIE ;         
}
UCA0MCTL=2*n; 这里是移位操作,详情请看register。
当然,时钟修改了的话,也要记得把clock修改一下。
好用的话,大家支持一个吧,下面我把头文件共享,支持printf,getchar等

使用特权

评论回复
38
yszong| | 2020-6-29 23:39 | 只看该作者
msp430f541x、msp430f543x多达4个通用串行通信接口(USCI)模块,支持多种串行通信模式,不同的 USCI 模块支持不同的模式。

使用特权

评论回复
39
wuhany| | 2020-6-29 23:42 | 只看该作者
#include "msp430x54x.h"
// ACLK = REFO = 32768Hz, MCLK = SMCLK = default DCO/2 = 1048576Hz
// P3.4,5——USCI_A0 TXD/RXD;P9.4,5——USCI_A2 TXD/RXD;P10.4,5——USCI_A3 TXD/RXD;
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P5SEL = 0xc0;                             // P5.6,7 = USCI_A1 TXD/RXD
  UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
  UCA1CTL1 |= UCSSEL_2;                     // SMCLK
  UCA1BR0 = 9;                              // 1MHz 115200 (see User's Guide)
  UCA1BR1 = 0;                              // 1MHz 115200
  UCA1MCTL |= UCBRS_1 + UCBRF_0;            // Modulation UCBRSx=1, UCBRFx=0
  UCA1CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  UCA1IE |= UCRXIE;                         // Enable USCI_A1 RX interrupt
  __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
}
// Echo back RXed character, confirm TX buffer is ready first,发送数据之前确定发送缓存准备好
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
  switch(__even_in_range(UCA1IV,4))
  {
  case 0:break;                             // Vector 0 - no interrupt
  case 2:                                   // Vector 2 - RXIFG
   while (!(UCA1IFG&UCTXIFG));             // USCI_A1 TX buffer ready?
    UCA1TXBUF = UCA1RXBUF;                  // TX -> RXed character
    break;
  case 4:break;                             // Vector 4 - TXIFG
  default: break;
  }
}

使用特权

评论回复
40
shimx| | 2020-6-29 23:46 | 只看该作者
USCI只有一个发送和接收共用的中断向量,USCI_Ax和USC_Bx不共用中断向量。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则