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;
}
使用者指導手冊
晶片管腳手冊
推薦教學視訊
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