记录一下开启低功耗串口lpuart1的问题点和临时解决办法,希望官方早日修复 
问题现象: 
使用rtt studio基于芯片创建了STM32h750的基础工程,log串口选用的LPUART1(tx:PB6/rx:PB7) 
编译下载后程序可以运行,但无log输出,硬件上串口指示灯变常亮。 
问题原因: 
1. 缺少LPUART1定义 
这个问题在编译时就会报错,在uart_config.h文件末尾仿造其他串口增加配置即可 
#if defined(BSP_USING_LPUART1) 
#ifndef LPUART1_CONFIG 
#define LPUART1_CONFIG                                                 
    {                                                                
        .name = "lpuart1",                                             
        .Instance = LPUART1,                                          
        .irq_type = LPUART1_IRQn,                                     
        .tx_pin_name = BSP_LPUART1_TX_PIN,                             
        .rx_pin_name = BSP_LPUART1_RX_PIN,                             
    } 
#endif /* LPUART1_CONFIG */ 
#if defined(BSP_LPUART1_RX_USING_DMA) 
#ifndef LPUART1_DMA_RX_CONFIG 
#define LPUART1_DMA_RX_CONFIG                                          
    {                                                                
        .Instance = LPUART1_RX_DMA_INSTANCE,                           
        .channel = LPUART1_RX_DMA_CHANNEL,                             
        .dma_rcc = LPUART1_RX_DMA_RCC,                                 
        .dma_irq = LPUART1_RX_DMA_IRQ,                                 
    } 
#endif /* LPUART1_DMA_RX_CONFIG */ 
#endif /* BSP_LPUART1_RX_USING_DMA */ 
#if defined(BSP_LPUART1_TX_USING_DMA) 
#ifndef LPUART1_DMA_TX_CONFIG 
#define LPUART1_DMA_TX_CONFIG                                          
    {                                                                
        .Instance = LPUART1_TX_DMA_INSTANCE,                           
        .channel = LPUART1_TX_DMA_CHANNEL,                             
        .dma_rcc = LPUART1_TX_DMA_RCC,                                 
        .dma_irq = LPUART1_TX_DMA_IRQ,                                 
    } 
#endif /* LPUART1_DMA_TX_CONFIG */ 
#endif /* BSP_LPUART1_TX_USING_DMA */ 
#endif /* BSP_USING_LPUART1 */ 
2. 缺少LPUART1对应的引脚定义 
static const struct gpio_uart_af uart_afs[] = 
{ 
        { .pin_index = GET_PIN(A,  0), .afs[0] = {.uart_num = UART_IS_TX|4, .af_num =  8}}, 
        { .pin_index = GET_PIN(A,  1), .afs[0] = {.uart_num = UART_IS_RX|4, .af_num =  8}}, 
        ... 
} 
上述代码是drv_usart.c中的stm32_gpio_configure()函数里的数组uart_afs的一部分片段。 
第一行元素中.uart_num = UART_IS_TX|4表示引脚作为UART4的TX引脚,af_num =  8引脚复用号 
同理,第二行是将PA1作为UART4的RX引脚,复用号也是8 
然而uart_afs中无对LPUART的uart_num定义,我用的是B6和B7(AF8),把LPUART编号为9(第三点问题的时候用到),增加如下两行: 
{ .pin_index = GET_PIN(B,  6), .afs[0] = {.uart_num = UART_IS_TX|9, .af_num =  8}}, 
{ .pin_index = GET_PIN(B,  7), .afs[0] = {.uart_num = UART_IS_RX|9, .af_num =  8}}, 
3. 当前串口号定义判断不合理 
问题还在stm32_gpio_configure()尾部。正常来讲1~8号串口的命名为uartx,rtt通过串口名字的第4字节来计算串口号,这样对于低功耗串口lpuart1的计算就会出现偏差,我增加了一下判断,当uart_num大于8的时候就赋值为9 
   /* get tx/rx pin index */ 
   uart_num = config->name[4] - '0'; 
   /* add by jone */ 
   if(uart_num > 8) 
   { 
     uart_num = 9; 
   } 
 |