MSP430G2553 USCI模塊串口通信

1.前言

最近需要利用msp430連接藍牙模塊傳遞數據,于是死磕了一段時間串口,在這里記錄一下

2.msp430串口模塊

msp430的串口模塊可以有USCI模塊提供

在異步模式中, USCI_Ax 模塊通過兩個外部引腳, UCAxRXD 和 UCAxTXD, 把 MSP430 和一個外部系統連接起來。當 UCSYNC 位被清零時就選擇了 UART 模式。
UART 模式的特性包括:
? 7 或 8 位奇, 偶, 或無奇偶校驗的數據
? 獨立的發送和接收移位寄存器
? 獨立的發送和接收緩沖寄存器
? 最低有效位 (LSB) 優先或最高有效位 (MSB) 優先的數據發送和接收
? 多處理器系統中內置空閑線和地址位通信協議
? 接收器開始邊沿檢測以從 LMPx 模式中自動喚醒
? 支持分數波特率的可編程調制波特率
? 狀態標志的錯誤檢測和抑制
? 地址檢測的狀態標志
? 獨立接收和發送中斷的能力

3.寄存器介紹

1.UCAxCTL0

該寄存器主要是對UART的工作模式進行配置,包括校驗位,停止位,數據位等,但是我們在實際使用中我們不用管這個寄存器,里面設定的默認值為我們常用的設置(8為數據位,1位停止位,無校驗位)

2.UCAxCTL1

該寄存器在常規狀態下只需關注UCSSELx和UCSWRST兩個字段,前者的作用是選擇合適的時鐘源,后者是用于進行串口模塊的設置,具體可見下圖

3.UCAxBR0 &UCAxBR1

這兩個寄存器用于對之前選擇的時鐘源進行分頻,進而控制我們串口模塊的波特率其中寄存器0為低位,1為高位

計算舉例:時鐘源設置為1MHZ,選擇波特率為9600,則分屏值為104,則低位設置為104,高位設置為0

同時在官網的用戶指南(中文)中也有常用波特率的設置,對照時鐘源的配置選擇相應的系數即可

注意:不推薦在1MHZ下使用115200波特率,由于頻率相近容易出問題

4.IE2

此處寄存器是用作中斷的使能,就不多做介紹了

4.模塊配置以及數據收發

1.模塊配置

在模塊配置中,我們的主要任務是時鐘源的選擇以及波特率的設置,中斷的使能

//此處時鐘源為SMCLK 1MHZ
void UART_Init()
{P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;  //IO選擇第三功能UCA0CTL1|=UCSWRST;    //復位模塊,進行初始化UCA0CTL1|=(UCSSEL_2);    //選擇時鐘UCA0BR0 =104;            //波特率選擇為9600UCA0BR1 =0;UCA0CTL1&=~UCSWRST; //關閉復位IE2 |= UCA0RXIE;    //打開接收中斷_EINT();            //初始化中斷
}

2.數據收發

數據發送較為簡單,只需在串口發送寄存器中寫入數據即可,之后模塊會自動將寄存器內的數據發送出去,同時置為相應的中斷位

void SendByte(unsigned char dat)
{UCA0TXBUF=dat;while((IFG2&UCA0TXIFG)==0);
}

如果要發送一段字符串,只需使用循環對字符串數組進行連續寫入即可,直到字符串最后(\0)

void SendString(unsigned char *string)
{unsigned char i=0;while(string[i]!='\0'){SendByte(string[i++]);}
}

數據接收我們在這里使用中斷接收,我們之前對模塊的接收中斷以及使能過了,所以我們在這里主要針對中斷函數

#pragma vector=USCIAB0RX_VECTOR
__interrupt void UART_Service()
{unsigned char RX=UCA0RXBUF;//相應的業務
}

5.完整代碼

實現的功能是將接收到的數據加1然后發送

#include <msp430.h> unsigned receive[20];
unsigned char count=0;
/*** main.c*/
void UART_Init()
{//P1OUT&=~(BIT1+BIT2);P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;UCA0CTL1|=UCSWRST;UCA0CTL1|=(UCSSEL_2);UCA0BR0 =104;UCA0BR1 =0;UCA0CTL1&=~UCSWRST;IE2 |= UCA0RXIE;_EINT();
}
void SendByte(unsigned char dat)
{UCA0TXBUF=dat;while((IFG2&UCA0TXIFG)==0);
}
void SendString(unsigned char *string)
{unsigned char i=0;while(string[i]!='\0'){SendByte(string[i++]);}
}
int main(void)
{WDTCTL = WDTPW | WDTHOLD;	// stop watchdog timerBCSCTL1 = CALBC1_1MHZ;   // 設置 DCO 范圍為 1MHz(需從芯片信息段加載校準值)DCOCTL = CALDCO_1MHZ;     // 設置 DCO 頻率為 1MHzUART_Init();SendString("hello world");while(1);return 0;
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void UART_Service()
{unsigned char RX=UCA0RXBUF;SendByte(RX+1);
}

需要注意的是,如果不使用usb轉ttl模塊連接引腳,而是用板子上的USB與電腦進行通信的話,需要將板子上的TXD,RXD由豎著連接改為橫著連接

現象:(藍色為電腦發送。綠色為電腦接收)

電腦發送1,接收到2

完整代碼地址:

Hans/msp430G2553串口通信

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/84302.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/84302.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/84302.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【產品經理從0到1】用戶端產品設計與用戶畫像

思考 xx新聞的第一個版本應該做哪些事情呢&#xff1f; 用戶端核心功能 用戶端通用頁面設計 思考 回想一下&#xff0c;大家在第一次使用一個新下載的App的時候會看到一些什么樣的頁面?這樣的頁面一般都是展示了一些什么內容? 引導頁 概念 第一次安裝App或者更新App后第…

多場景游戲AI新突破!Divide-Fuse-Conquer如何激發大模型“頓悟時刻“?

多場景游戲AI新突破&#xff01;Divide-Fuse-Conquer如何激發大模型"頓悟時刻"&#xff1f; 大語言模型在強化學習中偶現的"頓悟時刻"引人關注&#xff0c;但多場景游戲中訓練不穩定、泛化能力差等問題亟待解決。Divide-Fuse-Conquer方法&#xff0c;通過…

佰力博科技與您探討壓電材料的原理與壓電效應的應用

壓電材料的原理基于正壓電效應和逆壓電效應&#xff0c;即機械能與電能之間的雙向轉換特性。 壓電材料的原理源于其獨特的晶體結構和電-機械耦合效應&#xff0c;具體可分為以下核心要點&#xff1a; 1. ?正壓電效應與逆壓電效應的定義? ?正壓電效應?&#xff1a;當壓電…

算法備案審核周期

&#xff08;一&#xff09;主體備案審核 主體備案審核周期通常為7-10個工作日&#xff0c;監管部門將對企業提交的資質信息進行嚴格審查&#xff0c;審核重點包括&#xff1a; 營業執照的真實性、有效性及與備案主體的一致性。法人及算法安全責任人身份信息的準確性與有效性…

管理系統的接口文檔

一、接口概述 本接口文檔用于描述圖書管理系統中的一系列 Restful 接口&#xff0c;涵蓋圖書的查詢、添加、更新與刪除操作&#xff0c;以及用戶的登錄注冊等功能&#xff0c;方便客戶端與服務器之間進行數據交互。 二、接口基礎信息 接口地址&#xff1a;https://book-manag…

杰發科技AC7801——PWM獲取固定脈沖個數

測試通道6 在初始化時候打開通道中斷 void PWM1_GenerateFrequency(void) {PWM_CombineChConfig combineChConfig[1]; //組合模式相關結構體PWM_IndependentChConfig independentChConfig[2];//獨立模式相關結構體PWM_ModulationConfigType pwmConfig; //PWM模式相關結構體PWM…

RL電路的響應

學完RC電路的響應&#xff0c;又過了一段時間了&#xff0c;想必很多人都忘了RC電路響應的一些內容。我們這次學習RL電路的響應&#xff0c;以此同時&#xff0c;其實也是帶大家一起回憶一些之前所學的RC電路的響應的一些知識點。所以&#xff0c;這次的學習&#xff0c;其實也…

鴻蒙Flutter實戰:21-混合開發詳解-1-概述

引言 在前面的系列文章中&#xff0c;我們從搭建開發環境開始&#xff0c;講到如何使用、集成第三方插件&#xff0c;如何將現有項目進行鴻蒙化改造&#xff0c;以及上架審核等內容&#xff1b;還以高德地圖的 HarmonyOS SDK 的使用為例&#xff0c; 講解了如何將高德地圖集成…

Vmware ubuntu22.04 虛擬機 連接Windows主機虛擬串口

1. Windows虛擬串口配置 虛擬串口下載&#xff1a;教程網址 虛擬串口使用&#xff1a;教程網址 2. Ubuntu 虛擬串口配置 Vmware ubuntu22.04 虛擬機 連接windows主機虛擬串口_vmware中ttys0連接的是哪個端口-CSDN博客 注意&#xff1a;虛擬添加串口的時候&#xff0c;一直…

編譯rk3568的buildroot不起作用

一、環境&#xff1a; 使用kickpi k1開發板&#xff0c;芯片為rk3568。 vmware ubuntu22.04 kickpi給的sdk包&#xff0c;應該不同友商是通用的。 使用的根文件為buildroot 二、問題&#xff1a; 由于 1、wpa_supplicant -D wext -c /etc/wpa_supplicant.conf -i wlan0 …

【動態規劃】簡單多狀態(二)

&#x1f4dd;前言說明&#xff1a; 本專欄主要記錄本人的基礎算法學習以及LeetCode刷題記錄&#xff0c;按專題劃分每題主要記錄&#xff1a;&#xff08;1&#xff09;本人解法 本人屎山代碼&#xff1b;&#xff08;2&#xff09;優質解法 優質代碼&#xff1b;&#xff…

如何選擇支持AI接入的開發語言與框架

選擇支持AI接入的開發語言與框架 在AI系統開發中,語言和框架的選擇不僅決定了代碼實現方式,更深刻影響模型服務的接入效率、調用方式、性能表現和未來的可維護性。相比傳統后端系統的語言選擇只需關注并發性能或生態成熟度,AI架構下的開發語言必須同時滿足以下幾類能力: 具…

計算機視覺與深度學習 | Python實現CEEMDAN-ABC-VMD-DBO-CNN-LSTM時間序列預測(完整源碼和數據)

以下是一個結合CEEMDAN、ABC優化VMD、DBO優化CNN-LSTM的完整時間序列預測實現方案。該方案包含完整的數據生成、算法實現和模型構建代碼。 完整實現代碼 import numpy as np import pandas as pd from PyEMD import CEEMDAN from vmdpy import VMD from sklearn.preprocessing…

React19源碼系列之渲染階段performUnitOfWork

在 React 內部實現中&#xff0c;將 render 函數分為兩個階段&#xff1a; 渲染階段提交階段 其中渲染階段可以分為 beginWork 和 completeWork 兩個階段&#xff0c;而提交階段對應著 commitWork。 在之前的root.render過程中&#xff0c;渲染過程無論是并發模式執行還是同…

c# 解碼 encodeURIComponent

在C#中&#xff0c;如果你需要解碼由encodeURIComponent方法編碼的URL&#xff0c;你可以使用System.Web命名空間中的HttpUtility.UrlDecode方法。這個方法可以處理由JavaScript的encodeURIComponent方法編碼的字符串。 首先&#xff0c;確保你的項目中引用了System.Web命名空…

Python學習心得:代碼森林的冒險

第一章&#xff1a;迷霧中的第一步 林然從未想過自己會與代碼結緣。那是一個平淡的周六清晨&#xff0c;陽光穿過窗簾&#xff0c;灑在她那臺老舊的筆記本電腦上。屏幕上&#xff0c;Python的安裝界面靜靜地等待著她的決定。她是一個文科生&#xff0c;大學主修社會學&#xf…

展示了一個三軸(X, Y, Z)坐標系!

等軸測投影”&#xff08;isometric projection&#xff09;風格的手繪風格三維圖&#xff0c;即三條坐標軸&#xff08;x?, x?, x?&#xff09;看起來彼此垂直、等角分布&#xff08;通常是 120 夾角&#xff09;&#xff0c;它是常見于教材和數學書籍的 “假三維”表示法。…

計算機網絡 - 2.基礎協議

1.TCP協議 1.TCP(Transmission Control Protocol):傳輸控制協議2.TCP協議是一種面向連接的、可靠的、 基于字節流的傳輸層通信協議 1.面向連接:兩個使用TCP協議的應用(通常一個客戶和一個服務器)在彼此交換數據包之前必須先建立一個TCP連接2.可靠的 1.數據傳輸之前都要建立…

前端之vue3創建基本工程,基本登錄、注冊等功能的完整過程

此文也是為了做一個基本學習用的vue3創建項目的過程&#xff0c;包含基本的登錄頁面、登出頁面、基本的router跳轉、axios調用、登錄驗證等內容。與項目&#xff1a; https://gitee.com/rainpet/java-web-demo/tree/master/spring-security01 可以配套使用。 如下為主要過程。 …

如果有三個服務實例部署在三臺不同的服務器上,這三個服務實例的本地緩存,是存儲一模一樣的數據?還是各自只存一部分?

? 答案是&#xff1a;通常每個服務實例都會獨立地緩存它自己訪問過的數據&#xff0c;這些數據可能是相同的&#xff0c;也可能是不同的&#xff0c;取決于請求的內容。 &#x1f4cc; 舉個例子說明 假設你有一個商品詳情頁的服務&#xff0c;部署了 3 個服務實例&#xff08…