问题描述
我正在使用带有单个STM32L071芯片的定制devBoard。使用调试模式(系统工作台),我可以看到USART2的TDR寄存器,并且我要传输的数据在那里,但是板上的引脚没有信号。 没有硬件问题,我检查了主板。
我在线找到了GPIO配置,而USART配置正是我所需要的。
我的主要功能:
HAL_Init();
GPIO_Config();
Configure_USART();
char message[] = { 0x41,0x42,0x43,0x44,0x45,0x55 };
HAL_UART_Transmit(&g_meterUart,(uint8_t*)message,sizeof(message),0xFFFF);
GPIO配置
__HAL_RCC_GPIOA_CLK_ENABLE()
;
GPIO_InitTypeDef USART_GPIO_InitStruct;
USART_GPIO_InitStruct.Pull = GPIO_nopULL;
USART_GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
USART_GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
USART_GPIO_InitStruct.Pin = GPIO_PIN_2;
USART_GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
HAL_GPIO_Init(GPIOA,&USART_GPIO_InitStruct);
USART_GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
USART_GPIO_InitStruct.Pin = GPIO_PIN_3;
HAL_GPIO_Init(GPIOA,&USART_GPIO_InitStruct);
配置USART
__USART2_CLK_ENABLE();
g_meterUart.Instance = USART2;
g_meterUart.Init.Baudrate = 9600;
g_meterUart.Init.WordLength = UART_WORDLENGTH_8B;
g_meterUart.Init.StopBits = UART_STOPBITS_1;
g_meterUart.Init.Parity = UART_PARITY_NONE;
g_meterUart.Init.HwFlowCtl = UART_HWCONTROL_NONE;
g_meterUart.Init.Mode = UART_MODE_TX_RX;
g_meterUart.Init.OverSampling = UART_OVERSAMPLING_16;
if (HAL_UART_DeInit(&g_meterUart) != HAL_OK) {
}
if (HAL_UART_Init(&g_meterUart) != HAL_OK) {
};
解决方法
在快速回顾STM32L071 datasheet时,发现了一些可疑的问题。根据第49页的表16:
- PA2是USART2_TX,但是您已为GPIO_MODE_INPUT配置了GPIO_PIN_2。您是否将PA2和PA3的方向颠倒了?
- 通过备用功能4选择了PA2和PA3的USART2功能,但是您已指定LL_GPIO_AF_7。