OPENMV串口通信发送数据给MSP430F5529却接收不到

在用MSP430串口通信的时候可以使用串口助手与430进行通信,但是与openmv通信时只能做到,430发送数据给openmv后,openmv接收数据,但是接收的数据会变成十六进制,有看过相关文章进行修改但无大用。准备先用openmv向430发送数据,毕竟这才是大头,这边可以通过openmv IDE的串行终端检测到有发送数据,但是430接收不到数据 ,不知道是接收代码的中断有问题还是其他原因,请大佬们指导一下

以下是我通过相关文章自己写的一个代码:大致是开了430的两个串口,当openmv识别到红色物体时发送数据a且430的串口0接收到后会将LED1亮,openmv没有识别到红色物体时发送数据b且430的串口0接收到后会将LED1灭

开发环境为CCS,OPENMV的P4引脚(TX)接430的P3.4(RX),OPENMV的P5引脚(RX)接430的P3.3(TX)

OPENMV代码:

import sensor, image, time
from pyb import UART

# 初始化摄像头
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.skip_frames(time=2000)

# 初始化UART
uart = UART(3, 9600)

while True:
    img = sensor.snapshot()
    blobs = img.find_blobs([(30, 100, 15, 127, 15, 127)], pixels_threshold=200, area_threshold=200)

    if blobs:
        uart.write('a')  # 发送'a'给MSP430
        print('a')
    else:
       uart.write('b')  # 发送'b'给MSP430
       print('b')

MSP430代码:

#include <msp430.h>

void initUART(void) {
    WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器
    P3SEL |= BIT4 + BIT3; // P4.4 = USCI_A1 TXD, P4.5 = USCI_A1 RXD

    UCA0CTL1 |= UCSWRST; // 进入软件复位状态
    UCA0CTL1 |= UCSSEL_2; // 选择 SMCLK 作为时钟源

    UCA0BR0 = 6; // 波特率设置为9600,时钟频率 = 1MHz
    UCA0BR1 = 0;
    UCA0MCTL |= UCBRS_0 + UCBRF_13 + UCOS16; // 调制设置

    UCA0CTL1 &= ~UCSWRST; // 退出软件复位状态
    UCA0IE |= UCRXIE; // 使能接收中断

    P4SEL |= BIT4 + BIT5; // P4.4 = USCI_A1 TXD, P4.5 = USCI_A1 RXD

    UCA1CTL1 |= UCSWRST; // 进入软件复位状态
    UCA1CTL1 |= UCSSEL_2; // 选择 SMCLK 作为时钟源

    UCA1BR0 = 6; // 波特率设置为9600,时钟频率 = 1MHz
    UCA1BR1 = 0;
    UCA1MCTL |= UCBRS_0 + UCBRF_13 + UCOS16; // 调制设置

    UCA1CTL1 &= ~UCSWRST; // 退出软件复位状态
    UCA1IE |= UCRXIE; // 使能接收中断
}

void sendUART(char *data) {
    while (*data != '\0') { // 发送直到遇到字符串结束符 '\0'
        while (!(UCA1IFG & UCTXIFG)); // 等待发送缓冲区空闲
        UCA1TXBUF = *data++; // 发送数据
    }
}


int main(void) {
    P1DIR |= BIT0; // 设置 P1.0 为输出(LED 控制)
    initUART();
    __enable_interrupt(); // 使能全局中断

    __bis_SR_register(LPM0_bits); // 进入低功耗模式0,等待中断唤醒

    return 0;
}

#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void) {
    switch(__even_in_range(UCA0IV, 4)) {
        case 0: break; // 无中断
        case 2: // 接收中断
            if (UCA0RXBUF == 'a') {
                           P1OUT |= BIT0; // 如果接收到 'a',则点亮 P1.0(LED1)
                       } else if (UCA0RXBUF == 'b') {
                           P1OUT &= ~BIT0; // 如果接收到 'b',则关闭 P1.0(LED1)
                       }
            break;
        case 4: break; // 发送中断
        default: break;
    }
}

#pragma vector=USCI_A1_VECTOR
__interrupt void USCI_A1_ISR(void) {
    switch(__even_in_range(UCA1IV, 4)) {
        case 0: break; // 无中断
        case 2: // 接收中断
            sendUART("Received: ");
            sendUART((char *)&UCA1RXBUF); // 发送接收到的数据给串口助手
            sendUART("\r\n");
            break;
        case 4: break; // 发送中断
        default: break;
    }
}

要在msp430F5529接收openmv发送的数据,你可以使用UART模块进行通信。根据引用\[1\]中的代码,你可以编写一个函数来接收数据。首先,你需要初始化UART模块,设置数据位为8位,无奇偶校验,1位停止位,波特率为115200,可以参考引用\[2\]中的配置。然后,你可以使用USCI_A_UART_receiveData函数来接收已发送到UART模块的字节,具体的代码实现如下: ```c #include <msp430.h> void UART_Init() { // 配置UART模块 UCA1CTL1 |= UCSWRST; // 进入软件复位状态 UCA1CTL0 = 0; // 8位数据位,无奇偶校验,1位停止位 UCA1CTL1 |= UCSSEL_2; // 选择SMCLK作为时钟源 UCA1BR0 = 8; // 设置波特率为115200 UCA1BR1 = 0; UCA1MCTL = UCBRS_6; // 设置调制解调器参数 UCA1CTL1 &= ~UCSWRST; // 退出软件复位状态 } uint8_t UART_ReceiveData() { while (!(UCA1IFG & UCRXIFG)); // 等待接收缓冲区有数据 return UCA1RXBUF; // 返回接收到的数据 } void main() { WDTCTL = WDTPW | WDTHOLD; // 停用看门狗定时器 UART_Init(); // 初始化UART模块 while (1) { uint8_t data = UART_ReceiveData(); // 接收数据 // 处理接收到的数据 } } ``` 在上述代码中,UART_Init函数用于初始化UART模块,UART_ReceiveData函数用于接收数据。你可以在main函数中处理接收到的数据。请注意,你需要根据你的具体硬件配置和需求进行适当的修改。 #### 引用[.reference_title] - *1* *2* *3* [【MSP430F5529基于库函数的学习】电赛速学及小车实战](https://blog.csdn.net/weixin_56760882/article/details/125841604)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值