RT-Thread论坛
直播中

一刀两断

8年用户 1011经验值
私信 关注

如何移植STM32F429 RTT 4.10串口V2?

本人在使用串口时想要使用串口V2版本,我是按照以下流程进行移植
1.将RT-thread-settings中的uart版本设置为uartV2
2.在uart_configuration文件中将tx_pin_name , rx_pin_name定义屏蔽掉
3.将board.h中添加

    #define BSP_UART1_TX_BUFSIZE    512
    #define BSP_UART1_RX_BUFSIZE    0
目前编译无报错,但串口不进行输出。(目前使用的是控制台串口)
串口硬件已测试,可以正常收发。

回帖(1)

hxjq

2024-9-29 16:41:08
根据您的描述,您已经完成了RT-Thread 4.10串口V2的移植工作,但串口输出仍然存在问题。以下是一些建议和步骤,以帮助您解决问题:

1. 确认串口配置正确:
   确保在`uart_configuration.c`文件中,UART设备的配置参数(如波特率、数据位、停止位等)与您的硬件设置相匹配。

2. 检查串口初始化:
   在`board.c`文件中,确保正确初始化了UART设备。例如:

   ```c
   #include "stm32f4xx_hal.h"
   #include "drv_usart.h"

   void board_init(void)
   {
       /* 初始化硬件 */
       hal_uart_init(UART1);
   }
   ```

3. 检查串口中断配置:
   确保在`drv_usart.c`文件中,正确配置了UART设备的中断。例如:

   ```c
   void HAL_UART_MspInit(UART_HandleTypeDef *huart)
   {
       if (huart->Instance == USART1)
       {
           __HAL_RCC_USART1_CLK_ENABLE();
           __HAL_RCC_GPIOA_CLK_ENABLE();

           /* 配置TX和RX引脚 */
           GPIO_InitTypeDef GPIO_InitStruct = {0};
           GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10;
           GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
           GPIO_InitStruct.Pull = GPIO_NOPULL;
           GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
           GPIO_InitStruct.Alternate = GPIO_AF7_USART1;
           HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

           /* 配置中断 */
           HAL_NVIC_SetPriority(USART1_IRQn, 5, 0);
           HAL_NVIC_EnableIRQ(USART1_IRQn);
       }
   }
   ```

4. 检查串口中断处理函数:
   确保在`drv_usart.c`文件中,正确实现了UART设备的中断处理函数。例如:

   ```c
   void USART1_IRQHandler(void)
   {
       HAL_UART_IRQHandler(&huart1);
   }
   ```

5. 检查RT-Thread串口驱动:
   确保在`drv_usart.c`文件中,正确实现了RT-Thread串口驱动的相关函数。例如:

   ```c
   static rt_size_t uart1_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
   {
       /* 实现读取函数 */
   }

   static rt_size_t uart1_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
   {
       /* 实现写入函数 */
   }

   static struct rt_uart_ops uart1_ops =
   {
       uart1_configure,
       uart1_control,
       uart1_read,
       uart1_write,
   };

   static const struct rt_uart_device uart1 =
   {
       .ops = &uart1_ops,
       .config = {.baud_rate = BAUD_RATE_115200, .data_bits = DATA_BITS_8, .stop_bits = STOP_BITS_1, .parity = PARITY_NONE},
   };

   int rt_hw_usart_init(void)
   {
       /* 初始化串口设备 */
       rt_hw_usart_register(&uart1, "uart1", RT_DEVICE_FLAG_RDWR, NULL);
       return 0;
   }
   INIT_BOARD_EXPORT(rt_hw_usart_init);
   ```

6. 检查串口输出代码:
   确保您的应用程序中正确使用了RT-Thread的串口输出函数。例如:

   ```c
   #include

   int main(void)
   {
       rt_kprintf("Hello, RT-Thread!n");
       return 0;
   }
   ```

7. 检查串口调试输出:
   如果您仍然无法解决问题,可以尝试使用调试工具(如ST-Link)来检查串口输出。这有助于确定问题是否出在硬件或软件层面。

通过以上步骤,您应该能够找到并解决串口输出问题。如果问题仍然存在,请提供更多详细信息,以便进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分