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…