本帖最后由 t469116416 于 2017-5-29 22:14 编辑
今天调试一个STM32L011K4的板子,用的是官方的开发板,nucleo这个系列的,板子上有2个串口,一个是LPUART和USART,历程里面提供了USART的程序,测试串口收发正常了,但是将这个程序替换到LPUART就发送失败了,然后定位寄存器发现 9600波特率情况下 USART是0x00000DA,LPUART是0x0000DA3F。
这里贴部分代码,基本上 就是完全按照例程来的,就是改了下参数
#define USARTx LPUART1
#define USARTx_CLK_ENABLE() __HAL_RCC_LPUART1_CLK_ENABLE()
#define USARTx_RX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define USARTx_TX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()
#define USARTx_FORCE_RESET() __HAL_RCC_LPUART1_FORCE_RESET()
#define USARTx_RELEASE_RESET() __HAL_RCC_LPUART1_RELEASE_RESET()
/* Definition for USARTx Pins */
#define USARTx_TX_PIN GPIO_PIN_1
#define USARTx_TX_GPIO_PORT GPIOA
#define USARTx_TX_AF GPIO_AF4_LPUART1
#define USARTx_RX_PIN GPIO_PIN_0
#define USARTx_RX_GPIO_PORT GPIOA
#define USARTx_RX_AF GPIO_AF4_LPUART1
/* Definition for USARTx's NVIC */
#define USARTx_IRQn LPUART1_IRQn
#define USARTx_IRQHandler LPUART1_IRQHandler
以上修改的参数
初始化部分
UartHandle.Instance = USARTx;
UartHandle.Init.BaudRate = 9600;
UartHandle.Init.WordLength = UART_WORDLENGTH_8B;
UartHandle.Init.StopBits = UART_STOPBITS_1;
UartHandle.Init.Parity = UART_PARITY_NONE;
UartHandle.Init.HwFlowCtl = UART_HWCONTROL_NONE;
UartHandle.Init.Mode = UART_MODE_TX_RX;
if(HAL_UART_DeInit(&UartHandle) != HAL_OK)
{
Error_Handler();
}
if(HAL_UART_Init(&UartHandle) != HAL_OK)
{
Error_Handler();
}
/*##-1- Reset peripherals ##################################################*/
USARTx_FORCE_RESET();
USARTx_RELEASE_RESET();
/*##-2- Disable peripherals and GPIO Clocks #################################*/
/* Configure UART Tx as alternate function */
HAL_GPIO_DeInit(USARTx_TX_GPIO_PORT, USARTx_TX_PIN);
/* Configure UART Rx as alternate function */
HAL_GPIO_DeInit(USARTx_RX_GPIO_PORT, USARTx_RX_PIN);
/*##-3- Disable the NVIC for UART ##########################################*/
HAL_NVIC_DisableIRQ(USARTx_IRQn);
发送函数
if(HAL_UART_Transmit_IT(&UartHandle, (uint8_t*)aTxBuffer, TXBUFFERSIZE)!= HAL_OK)
{
Error_Handler();
}
|