天天看點

MSP430 序列槽通訊

MSP430 序列槽1 實作即時通訊

晶片:430F169

現在市面上大多數單片機都自帶序列槽,本章介紹如何建立430序列槽通訊

單片機通過接收口(URXD)和發送口(UTXD)和外界進行通訊

430F169自帶序列槽0和序列槽1兩個通訊口

序列槽通訊是基于系統時鐘上進行的,系統時鐘的配置可以參考我之前的系統時鐘進行配置。

1 序列槽控制各種寄存器

<1>UxCTL,序列槽控制寄存器

<2>UxTCTL,序列槽傳輸控制寄存器

<3>UxRCTL,序列槽接收控制寄存器

<4>UxBR0,波特率控制寄存器0

<5>UxBR1,波特率控制寄存器1

<6>UxMCTL,調制控制寄存器

<7>UxRXBUF,接收緩存寄存器

<8>UxTXBUF,傳輸緩存寄存器

<9>ME1,模式選擇寄存器1

<10>ME2,模式選擇寄存器2

<11>IE1,中斷使能寄存器1

<12>IE2,中斷使能寄存器2

<13>IFG1,中斷标志寄存器1

<14>IFG2,中斷标志寄存器2

關于這些寄存器作用請查閱使用者指導手冊!使用者手冊在本文最下方

2 序列槽配置步驟

<1>設定SWRST

<2>設定MEX開啟序列槽功能

<3>設定資料位、奇偶校驗位、停止位、

<4>設定序列槽波特率

<5>開啟序列槽接收中斷

3 代碼實作

/*

***********ruopan***********

序列槽設定 
波特率:115200
資料位 :8
停止位:1
奇偶校驗位:無

功能:
		不停發送 "渃畔,蒼穹守望者"
		實作序列槽同時接收發送資料
模式:序列槽模式

晶片:MSP430F169
P3.6 P3.7外設為序列槽1通信
實作printf重定義
****************************
*/
//檔案1
#include "msp430x16x.h"
#include "System_clock.h"
#include "uart.h"
#define cpu_f ((double)8000000)
#define delay_us(x) __delay_cycles((long)(cpu_f*(double)x/1000000.0))
#define delay_ms(x) __delay_cycles((long)(cpu_f*(double)x/1000.0))
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  System_clock();
  Uart_GPIO_init();
  Uart_config();
  _EINT();
  while(1)
  {
    delay_ms(1000);
  printf("渃畔,蒼穹守望者\r\n");
  }
}
//檔案2
#ifndef __System_clock_H
#define __System_clock_H

void System_clock(void);

#endif
#include "System_clock.h"
#include<msp430x16x.h>

void System_clock(void)
{
  unsigned int iq0;
  BCSCTL1&=~XT2OFF;
  do
  {
    IFG1&=~OFIFG;
    for(iq0=0xff;iq0>0;iq0--);
  }
  while((IFG1&OFIFG)!=0);
  BCSCTL2=0x88;
}
//檔案3
#ifndef __UART_H
#define __UART_H

void Uart_GPIO_init(void);
void Uart_config(void);
void uart_sendbyte(int c);      //序列槽重定向
int putchar(int c);
#endif

#include "msp430x16x.h"
#include "uart.h"

void Uart_GPIO_init(void)
{
  P3DIR=0X0f;//0000 1111
  //P3DIR |=  BIT1 + BIT2 +BIT3 + BIT4 +BIT6;
  P3DIR &=~BIT7;
  P3SEL |= BIT6 + BIT7;//1100 0000 選擇P3.6 P3.7為外設
}
void Uart_config(void)
{
  ME2 |= UTXE1 + URXE1;                     // Enable USART1 TXD/RXD
  UCTL1 |= CHAR;                            // 8-bit character
  UTCTL1 |= SSEL1;                          // SMCLK
  UBR01 = 0x45;                             // 8MHz 115200
  UBR11 = 0x00;                             // 8MHz 115200
  UMCTL1 = 0x4A;                            // 8MHz 115200 modulation
  UCTL1 &= ~SWRST;                          // 清除序列槽複位
  IE2 |= URXIE1;                            // Enable USART1 RX interrupt
}

#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
 while (!(IFG2 & UTXIFG1));               
   TXBUF1 = RXBUF1;  // RXBUF0 to TXBUF0
}
int putchar(int ch)
{
/*  if(ch==0x0d)
  {
    uart_sendbyte(0x0a);
  }
  */
  uart_sendbyte(ch);
  return ch;
}

void  uart_sendbyte(int ch)
{
  while(!(IFG2&UTXIFG1));
  TXBUF1=ch;
}

           
MSP430 序列槽通訊

使用者指導手冊

晶片管腳手冊

推薦教學視訊

https://www.bilibili.com/video/BV1cE411Z79d?from=search&seid=15656799615629348503

https://www.bilibili.com/video/BV1rE41167yG?from=search&seid=6968580456886645765

MSP430 C語言例程

連結:https://pan.baidu.com/s/1z-q4JGVUzTmJrgeurAExYw

提取碼:t2qa

連結:https://pan.baidu.com/s/12bALa0_v6j4bAIcULMtzJQ

提取碼:0xv9

TI官網提供例程

連結:https://pan.baidu.com/s/1GBXAUFL5opM9LbreQ7zsNw

提取碼:1gn6

繼續閱讀