[MCU] USCI模块例程

[复制链接]
2682|50
houcs 发表于 2020-6-29 22:54 | 显示全部楼层
sci的代码呢?
supernan 发表于 2020-6-29 22:58 | 显示全部楼层
串口程序,USCI模式
chenjunt 发表于 2020-6-29 23:00 | 显示全部楼层
楼上分享的不错
ousj 发表于 2020-6-29 23:03 | 显示全部楼层
那就是采用UART的通讯就可以了哈
lium 发表于 2020-6-29 23:05 | 显示全部楼层
最简单最直接的还是UARt的通讯的
wyjie 发表于 2020-6-29 23:07 | 显示全部楼层
嗯,这个官网上很多,支持多去官网看看
jlyuan 发表于 2020-6-29 23:10 | 显示全部楼层
官網沒有asm的USCI,必須用C的去推
yszong 发表于 2020-6-29 23:14 | 显示全部楼层
//bbs.21ic.com/forum.php?mod=viewthread&tid=406123
dengdc 发表于 2020-6-29 23:17 | 显示全部楼层
这个用定时器模拟吧?
llia 发表于 2020-6-29 23:18 | 显示全部楼层
上官网的啦,上边的资料比我们提供的要权威的
shimx 发表于 2020-6-29 23:21 | 显示全部楼层
在3楼给的网站上,我怎么没有找到examples code呢,examples code 该怎么找呢
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
}
zhaoxqi 发表于 2020-6-29 23:25 | 显示全部楼层
安装了一个MSPWare_2_40_00_37_setup,结果是ccs才能用,我装的是IAR。。。
huangchui 发表于 2020-6-29 23:30 | 显示全部楼层

__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}
zhenykun 发表于 2020-6-29 23:33 | 显示全部楼层
这个得有例程才行的。
wyjie 发表于 2020-6-29 23:34 | 显示全部楼层
430的USCI串口(UART mode)初始化设置十分繁杂, UCA0BR0  UCA0BR1   UCA0MCTL 等还需按照波特率计算
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等
yszong 发表于 2020-6-29 23:39 | 显示全部楼层
msp430f541x、msp430f543x多达4个通用串行通信接口(USCI)模块,支持多种串行通信模式,不同的 USCI 模块支持不同的模式。
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;
  }
}
shimx 发表于 2020-6-29 23:46 | 显示全部楼层
USCI只有一个发送和接收共用的中断向量,USCI_Ax和USC_Bx不共用中断向量。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部