??????? 我們在使用MSP430的時候大家會發(fā)現(xiàn)插上usb線后電腦上有兩個端口標識,那么在進行串口通信時選擇哪個呢。其實如圖所示,上面的端口是用來進行串口通信的,下面的則是用來進行程序的下載,大家在使用的時候多加分辨即可。
?????????當然熟悉單片機操作的人可以通過經(jīng)驗判斷圖中標注UART1的即為串口通信端口,接下來我們就進入MSP430F5529串口的學習,通過學習串口我們可以更好的進行上下位機通信,主從機交互等場景的信息交互。
串口端口配置
??????? 與使用其他功能一樣我們首先對串口進行基礎(chǔ)的配置,如果想使用電腦USB下載線進行與電腦的通信請選擇P4.4,P4.5端口(UART1),如使用排針I(yè)O的串口請選擇P3.4,P3.5端口(UART0),在對應(yīng)配置時需更改寄存器編號實現(xiàn)對應(yīng)的功能,以下以UART1為例,如果想使用UART1,可使用板載usb口或在下載完成后拔掉仿真電路與核心電路間的跳線帽,使用跳線引出:
P4SEL |= BIT4+BIT5 ;// USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST;// 初始化所有的 UCSI 寄存器,包括UCA0CTL1
UCA1CTL1 |= UCSSEL_1;// ACLK
UCA1BR0 = 0x03;// 32768Hz 9600 波特率為9600
UCA1BR1 = 0x00;// 32768Hz 9600
UCA1MCTL |= UCBRS_3 + UCBRF_0;// 低頻調(diào)制+過采樣調(diào)制
UCA1CTL1 &= ~UCSWRST;// 初始化USCI狀態(tài)機
UCA1IE |= UCRXIE;//使能中斷
串口信息的讀取
??????? 串口的讀取在配置時首先開啟UCRXTE中斷,然后進入函數(shù)內(nèi)通過:
(UCA1IFG)&(UCRXIFG)
? 進行對中斷接收信號的判斷,以下為串口的讀?。?/p>
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
UCA1IFG &= ~UCRXIFG;
if((UCA1IFG)&(UCRXIFG));//接收
c=UCA1RXBUF;
}
串口信息的發(fā)送
????? 串口的發(fā)送在配置時首先開啟UCRXTE中斷,然后進入函數(shù)內(nèi)通過:
!(UCA1IFG & UCTXIFG)
? 進行對發(fā)送信號的判斷,以下為串口的發(fā)送:文章來源:http://www.zghlxwxcb.cn/news/detail-596220.html
//以串口1為例,發(fā)送字符串
void send1_buf_int(unsigned int *ptr)
{
while(*ptr != '\0')
{
while(!(UCA1IFG & UCTXIFG));
UCA1TXBUF = *ptr;
ptr++;
delay(10);
}
}
與藍牙的通信
??????? 藍牙是經(jīng)典的串口通信案例,通過藍牙可以擴展出主從機,串口屏等一系列串口項目的代碼操作,通過數(shù)據(jù)的收發(fā)和檢測實現(xiàn)對應(yīng)的操作,以下為MSP430與藍牙的簡單點燈程序參考:文章來源地址http://www.zghlxwxcb.cn/news/detail-596220.html
#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void)
{
UCA1IFG &= ~UCRXIFG;
if((UCA1IFG)&(UCRXIFG));//接收
{
c=UCA1RXBUF;
if(c == 'a')
{
P4OUT &= ~BIT7;
P1OUT |= BIT0;
}
else if(c =='b')
{
P1OUT &= ~BIT0;
P4OUT |= BIT7;
}
}
else
break;
}
}
到了這里,關(guān)于MSP430F5529學習筆記(五)——串口|UART的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!