纸薄情。 2025-04-22 00:15 采纳率: 0%
浏览 89

asrpro核心板的串口无法接收数据

今天在使用stm32给asrpro核心板通讯时发现asrpro的串口一直接收不到来自stm32的数据,后来烧录了asrpro官方的串口接收数据打开继电器的例程,然后用串口助手给asrpro发数据"on"(例程中为接收到on时打开继电器),但是发现asrpro并没有如期打开继电器,后来又试了一下aspro的串口发送功能又是正常的,在b站里祝良友的视频之下的评论区中也有很多反应该模块的串口接收功能无效。所以发文请教大家是否遇到过同样的问题?是否有解决办法呢?因为这是我的毕设项目,串口是能能够正常接收数据对我来说十分重要,希望各路da佬赐教!

img

  • 写回答

3条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2025-04-22 09:52
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 问题关键点分析
      - STM32与ASRPro核心板通讯时,ASRPro串口接收不到STM32的数据。
      - 烧录ASRPro官方串口接收数据打开继电器例程后,用串口助手发送数据“on”,但未明确后续现象及问题所在。目前关键在于排查串口通讯链路中存在的问题,可能涉及硬件连接、双方串口配置以及数据传输协议等方面。
    2. 解决方案
      - 硬件连接检查
      • 确认STM32与ASRPro核心板的串口硬件连接是否正确。检查TX、RX引脚是否交叉连接,VCC和GND是否连接稳定。例如,STM32的TX应连接到ASRPro的RX,STM32的RX应连接到ASRPro的TX。
      • STM32串口配置检查
      • 检查STM32端的串口初始化代码。以下是一个简单的STM32串口初始化示例(以CubeMX生成的代码为例):
    #include "main.h"
    
    UART_HandleTypeDef huart1;
    
    void SystemClock_Config(void);
    static void MX_GPIO_Init(void);
    static void MX_USART1_UART_Init(void);
    
    int main(void)
    {
      HAL_Init();
      SystemClock_Config();
      MX_GPIO_Init();
      MX_USART1_UART_Init();
    
      char data[] = "Hello, ASRPro!";
      HAL_UART_Transmit(&huart1, (uint8_t *)data, sizeof(data), HAL_MAX_DELAY);
    
      while (1)
      {
        // 主循环可以做其他事情
      }
    }
    
    void SystemClock_Config(void)
    {
      // 系统时钟配置代码
    }
    
    static void MX_GPIO_Init(void)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
    
      // GPIO端口时钟使能
      __HAL_RCC_GPIOA_CLK_ENABLE();
    
      // 配置PA9为复用推挽输出,用于USART1_TX
      GPIO_InitStruct.Pin = GPIO_PIN_9;
      GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
      // 配置PA10为浮空输入,用于USART1_RX
      GPIO_InitStruct.Pin = GPIO_PIN_10;
      GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
      // 使能USART1复用功能时钟
      __HAL_RCC_USART1_CLK_ENABLE();
    }
    
    static void MX_USART1_UART_Init(void)
    {
      huart1.Instance = USART1;
      huart1.Init.BaudRate = 115200;
      huart1.Init.WordLength = UART_WORDLENGTH_8B;
      huart1.Init.StopBits = UART_STOPBITS_1;
      huart1.Init.Parity = UART_PARITY_NONE;
      huart1.Init.Mode = UART_MODE_TX_RX;
      huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
      huart1.Init.OverSampling = UART_OVERSAMPLING_16;
      if (HAL_UART_Init(&huart1) != HAL_OK)
      {
        Error_Handler();
      }
    }
    
    void Error_Handler(void)
    {
      // 错误处理代码
    }
    
    #ifdef  USE_FULL_ASSERT
    void assert_failed(uint8_t *file, uint32_t line)
    {
      // 断言失败处理代码
    }
    #endif
    
     - 确保波特率、数据位、停止位、校验位等配置与ASRPro一致。例如,如果ASRPro默认配置为115200 8N1,那么STM32也应如此配置。
    
    • ASRPro核心板串口配置检查
      • 参考官方例程检查ASRPro的串口配置。如果官方例程能正常接收数据,对比自己的代码与例程在串口初始化部分的差异。例如,检查串口中断配置、数据接收处理函数等。
      • 确认ASRPro核心板的串口驱动是否正确加载。有些核心板可能需要特定的驱动程序来支持串口通讯。
    • 数据传输测试
      • 在STM32发送数据后,使用示波器观察ASRPro核心板串口引脚上的信号,看是否有数据传输过来。如果没有信号,说明硬件连接或STM32配置有问题。
      • 可以在ASRPro核心板的串口接收中断处理函数中添加调试代码,比如打印接收到的数据,以确定数据是否真正被接收。例如:
    void USART1_IRQHandler(void)
    {
      if(__HAL_UART_GET_IT(&huart1, UART_IT_RXNE) != RESET)
      {
        uint8_t received_data;
        HAL_UART_Receive(&huart1, &received_data, 1, HAL_MAX_DELAY);
        // 打印接收到的数据,这里假设已经有printf函数支持
        printf("Received: %c\n", received_data);
      }
    }
    
    1. 多种解决方案的优缺点
      - 硬件连接检查优先
      • 优点:如果是硬件连接问题,通过简单的检查(如万用表测量引脚连通性)就能快速定位并解决问题,效率高。
      • 缺点:需要一定的硬件知识和工具,如果硬件连接较为复杂,可能需要花费一些时间仔细排查。
      • 配置检查全面进行
      • 优点:能全面排查软件层面的配置问题,确保双方串口参数一致,避免因配置错误导致的数据接收异常。
      • 缺点:需要对STM32和ASRPro的串口配置有深入了解,代码检查可能比较繁琐,容易遗漏一些细节。
      • 数据传输测试逐步深入
      • 优点:通过示波器等工具能直观地看到数据传输情况,有助于判断问题是出在发送端还是接收端,定位更准确。
      • 缺点:需要额外的测试设备,成本较高,且操作相对复杂,对测试人员的技能要求较高。
    2. 总结
      - 首先要对STM32与ASRPro核心板的串口硬件连接进行仔细检查,确保物理链路正常。
      - 接着全面对比双方的串口配置参数,保证一致。
      - 最后通过数据传输测试(如示波器观察、串口接收中断调试打印等)来确定问题所在,逐步排查,找到解决串口无法接收数据的问题。

    通过以上步骤的排查和解决,应该能够找到ASRPro核心板串口无法接收数据的原因并解决该问题。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 4月22日