问题描述
我使用的是带有 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 (将#修改为@)