嵌入式技术william hill官网
直播中

李俊

7年用户 1319经验值
私信 关注
[问答]

RTT studio添加串口V2报错怎么办

使用rtt studio、4.0.5版本的内核,创建工程,使用串口V2,然后编译会报错

1.jpg

回帖(6)

刘桂英

2022-9-23 11:16:01
我刚刚尝试了一下,在RT-Stduio环境下,使用STM32L431+ RT-Thread 4.0.5移植V2成功。威廉希尔官方网站 上USART2作为Console输出。

具体流程如下:

1.新建工程

1.jpg
2.jpg
3.jpg
1.jpg
6.board.c中添加USART硬件初始化
  • void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
  • {
  •   GPIO_InitTypeDef GPIO_InitStruct = {0};
  •   RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
  •   if(uartHandle->Instance==USART2)
  •   {
  •   /* USER CODE BEGIN USART2_MspInit 0 */
  •   /* USER CODE END USART2_MspInit 0 */
  •     /* USART2 clock enable */
  •     __HAL_RCC_USART2_CLK_ENABLE();
  •     __HAL_RCC_GPIOA_CLK_ENABLE();
  •     /**USART2 GPIO Configuration
  •     PA2     ------> USART2_TX
  •     PA3     ------> USART2_RX
  •     */
  •     GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
  •     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_USART2;
  •     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  •   /* USER CODE BEGIN USART2_MspInit 1 */
  •   /* USER CODE END USART2_MspInit 1 */
  •   }
  • }
  • void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
  • {
  •   if(uartHandle->Instance==USART2)
  •   {
  •   /* USER CODE BEGIN USART2_MspDeInit 0 */
  •   /* USER CODE END USART2_MspDeInit 0 */
  •     /* Peripheral clock disable */
  •     __HAL_RCC_USART2_CLK_DISABLE();
  •     /**USART2 GPIO Configuration
  •     PA2     ------> USART2_TX
  •     PA3     ------> USART2_RX
  •     */
  •     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
  •   /* USER CODE BEGIN USART2_MspDeInit 1 */
  •   /* USER CODE END USART2_MspDeInit 1 */
  •   }
  • }


7.修改board.h
  • #define BSP_USING_UART2
  • #define BSP_UART2_RX_BUFSIZE   512
  • #define BSP_UART2_TX_BUFSIZE   0


8.顺利运行
1.jpg


举报

李俊

2022-9-23 11:19:10
我的是407芯片,按照你的步骤,不报错了,我的控制台是uart1,编译完成后,程序直接死掉。控制台都不输出
举报

刘桂英

2022-9-23 11:19:21
我在429上也做过了的,你是不是BSP_UART1_TX_BUFSIZE没有设置为0?

是不是开启了DMA?控制台部分不能开DMA发送。

另外,检查一下UART MSP代码,是否正确设置了引脚。
V2版本中,不会帮用户完成底层的引脚初始化,需要自行介入处理。

也可以debug一下看看,大概率程序是在show_version中使用rt_kprintf的时候挂掉了。跟踪断点,看看能否进入到stm32_putc函数中。
举报

李俊

2022-9-23 11:19:32
谢谢,解决了。控制台可以了。如果,我要使用在其他串口使用DMA功能,是不是和V1一样啊,在board.h里面定义串口DMA的宏定义啊
举报

刘桂英

2022-9-23 11:19:52
请问,如何解决的?是因为底层msp没有写好的原因吗?我看了你刚刚新发布的帖子,自己用407的板子+4.1.0,按照我回帖流程,又做了一遍,没发现有问题。我只能想到msp的原因了。

其他串口要使用DMA,有好多种组合方式。

记得要修改rtdef.h
在board.h设置TX和RX的buf size
在board.h中打开DMA,如#define BSP_UART2_RX_USING_DMA

我测试过RT_DEVICE_FLAG_RX_NON_BLOCKING和RT_DEVICE_FLAG_TX_NON_BLOCKING。

对于串口的RT_DEVICE_FLAG_RX_NON_BLOCKING,每次使用rt_device_read的时候,返回值是内部缓冲区中已有的数据长度。
举报

李俊

2022-9-23 11:19:59
解决就是您说的,控制台的引脚部分需要自己初始化,不想V1一样不用初始化
举报

更多回帖

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