MSP430F5529 UART通讯协议接收字符串并存储到数组
MSP430F5529 UART通讯协议接收字符串并存储到数组
以下是一个示例代码,使用UART接收中断来接收数据,并将数据存储到一个字符数组中:
#include <msp430.h>
#define BUFFER_SIZE 8
volatile char uart_buffer[BUFFER_SIZE];
volatile unsigned int buffer_index = 0;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 停用看门狗定时器
P3SEL |= BIT3 + BIT4; // P3.3为UART TXD,P3.4为UART RXD
UCA0CTL1 |= UCSWRST; // 停用UART模块
UCA0CTL1 |= UCSSEL_2; // 选择SMCLK作为UART时钟源
UCA0BR0 = 104; // 设置波特率为9600
UCA0BR1 = 0;
UCA0MCTL = UCBRS_1 + UCBRF_0; // 微调波特率
UCA0CTL1 &= ~UCSWRST; // 启用UART模块
UCA0IE |= UCRXIE; // 允许UART接收中断
__bis_SR_register(LPM0_bits + GIE); // 进入低功耗模式
return 0;
}
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV, USCI_UART_UCTXCPTIFG))
{
case USCI_NONE: break; // 无中断
case USCI_UART_UCRXIFG: // UART接收中断
uart_buffer[buffer_index++] = UCA0RXBUF; // 读取接收到的数据,并存储到缓冲区中
if(buffer_index >= BUFFER_SIZE) // 如果缓冲区已满,则重置缓冲区
{
buffer_index = 0;
}
if(uart_buffer[buffer_index - 1] == 0x62) // 如果接收到了字符串的结尾字符,则打印接收到的字符串
{
int i;
for(i = 0; i < buffer_index; i++)
{
printf('0x%02X ', uart_buffer[i]);
}
printf('\n');
buffer_index = 0; // 重置缓冲区
}
break;
default: break;
}
}
在上述代码中,我们启用了UART模块,并允许接收中断。当接收到数据时,我们将数据存储到一个字符数组中,并检查是否接收到了字符串的结尾字符。如果接收到了结尾字符,则打印接收到的字符串,并重置缓冲区。
原文地址: https://www.cveoy.top/t/topic/jlOT 著作权归作者所有。请勿转载和采集!