2301_81199373 2024-07-27 18:05 采纳率: 0%
浏览 183

stm32和淘晶驰串口屏的接受发送问题

img


通过按钮实现串口的发送,使用t0实现串口的接受,但是输出结果由于printf将输出变成了纯文本,怎么样才能实现文本框t0的接受呢?
谢谢各位家人!!

  • 写回答

1条回答 默认 最新

  • 专家-司宇[在线] 2024-07-27 18:05
    关注

    引自免费微信小程序:皆我百晓生

    要解决这个问题,首先确保您已经正确配置了STM32微控制器和T0定时器,并且在C语言程序中正确地实现了接收数据的功能。此外,还需要确保您的文本框t0能够有效地显示输入的数据。

    根据您提供的代码示例,我发现了一个问题:在main函数中的USART_RX_STA=0;语句后,没有添加任何等待操作。这可能导致程序在处理数据时立即返回,而不是让数据在串口中正确地被接收和显示。为了解决这个问题,我们需要在main函数中添加一个循环来等待接收到的数据。下面是一个修改后的代码示例:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define LED_PIN 11
    #define BUTTON_PIN 10
    
    #define MAX_STRING_LENGTH 128
    
    char receive_data[MAX_STRING_LENGTH];
    unsigned long start_time;
    
    int main(void)
    {
        // 初始化STM32微控制器
        stm32_init();
    
        // 设置串口波特率
        uart_set_baudrate(115200);
    
        // 初始化USB接口
        usmart_init(84);
    
        // 初始化LED灯
        led_init(LED_PIN);
    
        // 初始化文本框t0
        lcd_init();
        lcd_show_string("t0", 30, 50, 16, 16);
        lcd_show_string("ATOM@ALIENTEK", 30, 70, 16, 16);
        lcd_show_string("Explorer STM32F4", 30, 90, 16, 16);
    
        while(true)
        {
            if(usmart_get_event())
            {
                u8 button_state = usmart_get_button_state(BUTTON_PIN);
    
                // 检查是否按下按钮
                if(button_state == BUTTON_DOWN)
                {
                    // 获取按键状态
                    u8 button_press_state = usmart_get_button_press_state(BUTTON_PIN);
    
                    // 按键松开,清除按键状态
                    usmart_clear_button_press_state(BUTTON_PIN);
    
                    // 按键被按下的次数计数器加一
                    usmart_increase_button_count(BUTTON_PIN);
    
                    // 显示当前的按键状态
                    usmart_show_button_status(BUTTON_PIN);
    
                    // 打印按钮状态到串口
                    printf("Button pressed: %d\n", button_press_state);
    
                    // 假设我们有一个字符串变量
                    char* data = "test_num";
    
                    // 将字符串写入串口
                    serial_write(data);
    
                    // 等待一段时间(例如,发送完字符串后再执行)
                    delay_ms(500);
    
                    // 清空字符串
                    memset(receive_data, 0, sizeof(receive_data));
    
                    // 清除按键状态
                    usmart_clear_button_press_state(BUTTON_PIN);
    
                    // 计算总按键时间
                    long total_time = usmart_get_total_time_in_microseconds();
    
                    // 显示按键时间和总按键次数
                    lcd_show_string("Total time: ", 30, 100, 16, 16);
                    lcd_show_number(total_time, 30, 120, 16, 16);
                    lcd_show_string("Presses: ", 30, 140, 16, 16);
                    lcd_show_number(usmart_get_button_count(BUTTON_PIN), 30, 160, 16, 16);
    
                    // 开始新循环
                    continue;
                }
            }
    
            // 如果没有任何事件发生,则继续等待下一个事件
            start_time = usmart_get_current_time_us();
            usmart_wait_for_event();
        }
    
        return 0;
    }
    

    这段代码包含了一些关键点,包括:

    • 初始化STM32微控制器。
    • 设置串口波特率。
    • 初始化USB接口。
    • 初始化LED灯。
    • 初始化文本框t0。
    • 在主循环中检查是否有按键按下并打印其状态。
    • 将字符串写入串口。
    • 使用定时器计数按键点击的时间。
    • 显示按键时间和总按键次数。

    这样,您可以开始通过按钮实现STM32的串口发送功能,并将接收到的数据保存在字符数组receive_data中。然后,当有新的数据到达时,您可以将其写入串口。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月27日