Nucleo32 USART2 引脚上没有数据

问题描述

我使用的是带有 STM32L011KT6 芯片的 Nucleo32L011 开发板。我想在芯片的 LPUART1 上接收数据并通过 USART2 转发。我已将相应的 GPIO 设置为适当的 AF,配置了 USART 参数并启用了时钟。 LPUART1 在阻塞模式下工作正常。我可以在板针上传输和接收数据。使用USB-ttl,我连接到USART2的TX引脚,没有数据出来。当我尝试发送数据时,TDR 寄存器被写入,但引脚没有输出

GPIO 和 USART 配置:

GPIO_InitTypeDef GPIO_InitStruct;

__HAL_RCC_GPIOA_CLK_ENABLE()
;
__HAL_RCC_USART2_CLK_ENABLE();

GPIO_InitStruct.Pin = GPIO_PIN_9;           //PA9 USART2 TX    --- D1 board
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_10;        //PA10 UART2 RX      ---D0 board
GPIO_InitStruct.Alternate = GPIO_AF4_USART2;
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);

HAL_NVIC_SetPriority(USART2_IRQn,0);
HAL_NVIC_EnableIRQ(USART2_IRQn);

__HAL_RCC_GPIOA_CLK_ENABLE()
;
__HAL_RCC_LPUART1_CLK_ENABLE();

GPIO_InitStruct.Pin = GPIO_PIN_2;  //PA2    LP_UART1_TX
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF6_LPUART1;

HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);

GPIO_InitStruct.Pin = GPIO_PIN_3;       //PA3 LP_UART1_RX
GPIO_InitStruct.Alternate = GPIO_AF6_LPUART1;
HAL_GPIO_Init(GPIOA,&GPIO_InitStruct);

HAL_NVIC_SetPriority(LPUART1_IRQn,0);
HAL_NVIC_EnableIRQ(LPUART1_IRQn);


__HAL_RCC_USART2_CLK_ENABLE();

UartHandle_2.Instance = USART2;
UartHandle_2.Init.Baudrate = 115200; 
UartHandle_2.Init.WordLength = USART_WORDLENGTH_8B;
UartHandle_2.Init.StopBits = USART_STOPBITS_1;
UartHandle_2.Init.Parity = USART_PARITY_NONE;
UartHandle_2.Init.Mode = USART_MODE_TX_RX;

if (HAL_USART_DeInit(&UartHandle_2) != HAL_OK) {
    Error_Handler();
}

if (HAL_USART_Init(&UartHandle_2) != HAL_OK) {
    Error_Handler();
}

__HAL_RCC_LPUART1_CLK_ENABLE();

UartHandle.Instance = LPUART1;
UartHandle.Init.Baudrate = 9600; 
UartHandle.Init.WordLength = UART_WORDLENGTH_9B; //UART_WORDLENGTH_9B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_EVEN;
UartHandle.Init.Mode = UART_MODE_TX_RX;

if (HAL_UART_Init(&UartHandle) != HAL_OK) {
    Error_Handler();
}



/**
* @brief  System Clock Configuration
*         The system Clock is configured as follow :
*            System Clock source            = MSI
*            SYSCLK(Hz)                     = 2000000
*            HCLK(Hz)                       = 2000000
*            AHB Prescaler                  = 1
*            APB1 Prescaler                 = 1
*            APB2 Prescaler                 = 1
*            Flash Latency(WS)              = 0
*            Main regulator output voltage  = Scale3 mode
* @retval None
*/

    void SystemClock_Config(void) {
        RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 };
        RCC_OscInitTypeDef RCC_OscInitStruct = { 0 };

    /* Enable MSI Oscillator */
    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_MSI;
    RCC_OscInitStruct.MSIState = RCC_MSI_ON;
    RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_5;
    RCC_OscInitStruct.MSICalibrationValue = 0x00;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
    if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
        /* Initialization Error */
        while (1)
            ;
    }

    /* Select MSI as system clock source and configure the HCLK,PCLK1 and PCLK2
     clocks dividers */
    RCC_ClkInitStruct.ClockType = (RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_HCLK
            | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2);
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct,FLASH_LATENCY_0) != HAL_OK) {
        /* Initialization Error */
        while (1)
            ;
    }
    /* Enable Power Control clock */
    __HAL_RCC_PWR_CLK_ENABLE();

    /* The voltage scaling allows optimizing the power consumption when the device is
     clocked below the maximum system frequency,to update the voltage scaling value
     regarding system frequency refer to product datasheet.  */
    __HAL_PWR_VOLTAGESCALING_CONfig(PWR_REGULATOR_VOLTAGE_SCALE3);
}

如果我打电话:

if (HAL_USART_Transmit(&UartHandle_2,(uint8_t*) g_SerialNumber,8,0xff)
        != HAL_OK) {
    Error_Handler();
}

USB-ttl 上什么也没有出现。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...