msp430G2553串口通信_launchpad串口通信

MSP430G2553 单片机中集成了 USCI_A0功能模块,可以直接完成串口通信
一、代码与仿真
TI官方例程中uart代码只有时钟,引脚,串口的初始化,不能直接串口收发,还需要增加发送函数和完善中断函数,我在官方例程的基础上,编写了串口通信程序,并硬件测试通过 😉。

硬件测试用板(TI的MSP-EXP430G2ET)
注意:图中绿圈跳帽的接法
在水平方向上, 跳线将 TXD 连接到 P1.1, 将RXD 连接到 P1.2 。
在垂直方向上, 跳线将 TXD 连接到 P1.2, 将RXD 连接到 P1.1。
用USCI_A0模块的串口时,RXD和TXD是固定的,板子的跳帽接法固定。
若是软件串口(TimerA定时器和软件结合的串口),则根据RXD和TXD
的设置,来接跳帽。

串口测试助手的收发情况
打开板子,电脑端收到
MADE BY PengChengIT.
G2553 UART
READY!!!
通过电脑端向芯片发字符,发啥收啥。测试成功!

代码说明
接收:
1、UCA0RXBUF是 USCI_A0模块存放要接收的字的寄存器。
2、接收过程触发中断响应,中断向量:USCIAB0RX_VECTOR;
发送
1、有两个发送函数
①putchar(unsigned char tx_data)直接向函数输入要发送的字节
②putstr(char *s),可以直接向函数输入要发送的一串文字、数字。
char *string1=“MADE BY PengchengIT\n”;
putstr(string1);
2、UCA0TXBUF是 USCI_A0模块存放要发送的字的寄存器。
程序:
收啥发啥,每次收到后P1.0会亮一下。

#include <msp430.h>
void putchar(unsigned char tx_data);
void putstr(char *s);


unsigned char RX_DATA;
char *string1="MADE BY PengchengIT\n";
char string2[]
### MSP430G2553 UART 串口通信配置与实现 MSP430G2553 微控制器内置了 USCI_A0 模块,该模块支持异步串行通信(UART)。为了实现串口通信功能,需要完成以下几个方面的设置:时钟源的选择、波特率的计算与配置、引脚的功能分配以及中断处理机制。 #### 1. 时钟源选择 USCI_A0 使用 BRCLK SMCLK 或 ACLK 作为其时钟源。通常情况下,推荐使用 SMCLK 来驱动 USCI_A0 模块以获得更高的精度稳定性。SMCLK 是由 DCO 提供的一个可调节频率的时钟信号[^1]。 #### 2. 波特率配置 波特率决定了数据传输的速度,在实际应用中常见的波特率为 9600 bps 或更高如 115200 bps。通过调整 UCBRx 寄存器中的值可以改变波特率: ```c // 设置波特率为 9600, 假设系统时钟为 8 MHz (DCO 默认值) UCBRS0 = 0x07; // 调制寄存器低字节 UCBRW0 = 52; // 整数部分除法因子 ``` 上述代码片段展示了如何基于默认的 8MHz 主频来设定一个接近于目标波特率的具体数值。 #### 3. 引脚映射 对于 LaunchPad 平台上的 MSP430G2553 设备,默认 P1.1(PRXD) P1.2(PTXD) 分别被指定用于接收发送数据流。这些端口需重新定义成通用同步/异步收发器A通道零(UCA0TXD/UCA0RXD): ```c P1SEL |= BIT1 | BIT2; P1SEL2|= BIT1 | BIT2; ``` 此段代码将 P1.1 P1.2 配置为 USCI_A0 的 RX TX 功能管脚。 #### 4. 中断服务程序设计 当接收到新字符或者缓冲区准备好发送下一个字符时会触发相应的中断请求ISR。下面给出了一种简单的回显方式的例子——即每当从PC端输入任意键之后立即将它返回给上位机显示出来: ```c #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void){ while (!(IFG2 & UCA0TXIFG)); // 等待直到前次传送结束 UCA0TXBUF = UCA0RXBUF; // 将刚接受到的数据立即传回去形成回声效果 } ``` 以上代码实现了基本的回显操作,并利用了 USCI_A0 的硬件特性自动管理数据帧结构。 #### 完整示例代码框架 以下是综合考虑前述各要素后的完整代码模板之一: ```c #include <msp430g2553.h> void main(){ WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 // 初始化GPIOs P1SEL |= BIT1|BIT2; // Select USART function on P1.1 and P1.2. P1SEL2|= BIT1|BIT2; // Configure Baud Rate to ~9600bps @8MHz MCLK UCA0CTL1 |= UCSWRST; // **Put state machine in reset** UCA0CTL1 |= UCSSEL_2; // CLK = SMCLK UCA0BR0 = 104; // Set baud rate to 9600 with 8MHz clock UCA0BR1 = 0; // Upper byte of the divisor is zero here UCA0MCTL = UCBRS0; // Modulation bits set according standard table values for this frequency/baudrate combination. UCA0CTL1 &= ~UCSWRST; // Initialize eUSCI IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt _bis_SR_register(LPM0_bits + GIE); // Enter LPM0 w/interrupt enabled } #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void){ while(!(IFG2&UCA0TXIFG)); UCA0TXBUF = UCA0RXBUF; } ``` 这段完整的C语言源码包含了全部必要的初始化过程以及最基础形式下的响应逻辑。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值