微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Nucleo32 USART2 引脚上没有数据

如何解决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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?