对于STM32F103的USART的通讯调试

USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。

STM32F103USART对应的引脚分别为:


USART1:

RX:PA10

TX:PA9


USART2:

RX:PA3

TX:PA2


USART3:

RX:PB11

TX:PB10


一:只使用一个USART接口进行通讯测试,例如使用USART1进行测试

在示例程序中找到下列代码:

#define DEBUG_USARTx USART1

#define DEBUG_USARTx_BAUDRATE 115200

#define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART1_CLK_ENABLE()

#define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART1_CLK_DISABLE()


#define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOA_CLK_ENABLE()

#define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_9

#define DEBUG_USARTx_Tx_GPIO GPIOA

#define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_10

#define DEBUG_USARTx_Rx_GPIO GPIOA


#define DEBUG_USART_IRQn USART1_IRQn


如果只使用一个USART接口进行测试的话只用在此处修改定义即可

通过串口调试工具测试结果如下:

 

 

可根据个人不同的需求更换不同的USART 接口,例如更换为USART3

#define DEBUG_USARTx USART3

#define DEBUG_USARTx_BAUDRATE 115200

#define DEBUG_USART_RCC_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()

#define DEBUG_USART_RCC_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()


#define DEBUG_USARTx_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()

#define DEBUG_USARTx_Tx_GPIO_PIN GPIO_PIN_10

#define DEBUG_USARTx_Tx_GPIO GPIOB

#define DEBUG_USARTx_Rx_GPIO_PIN GPIO_PIN_11

#define DEBUG_USARTx_Rx_GPIO GPIOB


#define DEBUG_USART_IRQn USART3_IRQn





.同时使用USART1USART3进行测试

1).在自定义的头文件中添加USART3的定义:

#define DEBUG_USART3 USART3

#define DEBUG_USART3_BAUDRATE 115200

#define DEBUG_USART3_RCC_CLK_ENABLE() __HAL_RCC_USART3_CLK_ENABLE()

#define DEBUG_USART3_RCC_CLK_DISABLE() __HAL_RCC_USART3_CLK_DISABLE()


#define DEBUG_USART3_GPIO_ClK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE()

#define DEBUG_USART3_Tx_GPIO_PIN GPIO_PIN_10

#define DEBUG_USART3_Tx_GPIO GPIOB

#define DEBUG_USART3_Rx_GPIO_PIN GPIO_PIN_11

#define DEBUG_USART3_Rx_GPIO GPIOB


#define DEBUG_USART3_IRQn USART3_IRQn

2).voidHAL_UART_MspInit(UART_HandleTypeDef* huart)增加USART3的端口配置:

voidHAL_UART_MspInit(UART_HandleTypeDef* huart)

{


GPIO_InitTypeDef GPIO_InitStruct;

if(huart->Instance==DEBUG_USARTx)

{

DEBUG_USART_RCC_CLK_ENABLE();

GPIO_InitStruct.Pin = DEBUG_USARTx_Tx_GPIO_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(DEBUG_USARTx_Tx_GPIO, &GPIO_InitStruct);


GPIO_InitStruct.Pin = DEBUG_USARTx_Rx_GPIO_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(DEBUG_USARTx_Rx_GPIO, &GPIO_InitStruct);

}

else if(huart->Instance==DEBUG_USART3)

{

DEBUG_USART3_RCC_CLK_ENABLE();

GPIO_InitStruct.Pin = DEBUG_USART3_Tx_GPIO_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;

GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;

HAL_GPIO_Init(DEBUG_USART3_Tx_GPIO, &GPIO_InitStruct);


GPIO_InitStruct.Pin = DEBUG_USART3_Rx_GPIO_PIN;

GPIO_InitStruct.Mode = GPIO_MODE_INPUT;

GPIO_InitStruct.Pull = GPIO_NOPULL;

HAL_GPIO_Init(DEBUG_USART3_Rx_GPIO, &GPIO_InitStruct);

}

}


3).voidHAL_UART_MspDeInit(UART_HandleTypeDef* huart)增加USART3的配置:

void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)

{


if(huart->Instance==DEBUG_USARTx)

{

DEBUG_USART_RCC_CLK_DISABLE();

HAL_GPIO_DeInit(DEBUG_USARTx_Tx_GPIO, DEBUG_USARTx_Tx_GPIO_PIN);

HAL_GPIO_DeInit(DEBUG_USARTx_Rx_GPIO, DEBUG_USARTx_Rx_GPIO_PIN);

HAL_NVIC_DisableIRQ(DEBUG_USART_IRQn);

}

else if(huart->Instance==DEBUG_USART3)

{

DEBUG_USART3_RCC_CLK_DISABLE();

HAL_GPIO_DeInit(DEBUG_USART3_Tx_GPIO, DEBUG_USART3_Tx_GPIO_PIN);

HAL_GPIO_DeInit(DEBUG_USART3_Rx_GPIO, DEBUG_USART3_Rx_GPIO_PIN);

 

HAL_NVIC_DisableIRQ(DEBUG_USART3_IRQn);

}

}


4).添加USART3的初始化设置函数及数据发送函数:

UART_HandleTypeDef husart3_debug;

void MX_DEBUG_USART3_Init(void)

{

DEBUG_USART3_GPIO_ClK_ENABLE();

husart3_debug.Instance = DEBUG_USART3;

husart3_debug.Init.BaudRate = DEBUG_USART3_BAUDRATE;

husart3_debug.Init.WordLength = UART_WORDLENGTH_9B;

husart3_debug.Init.StopBits = UART_STOPBITS_1;

husart3_debug.Init.Parity = UART_PARITY_EVEN;

husart3_debug.Init.Mode = UART_MODE_TX_RX;

husart3_debug.Init.HwFlowCtl = UART_HWCONTROL_NONE;

husart3_debug.Init.OverSampling = UART_OVERSAMPLING_16;

HAL_UART_Init(&husart3_debug);

}

voiduart3_write(uint8_t* data, uint32_tlen)

{

HAL_UART_Transmit(&husart3_debug, data, len, 0xffffff);

}

在主函数中添加USART3的初始化:

 

 

5).将完成后的程序编译烧录至STM32,同时通过串口调试工具连接USART1USART3观察通讯结果:

 

 

 

 

USART1USART3可同时向外发送数据。

完成对USART接口的通讯测试。

 


 

posted @ 2020-05-31 14:31  丶尘丶  阅读(802)  评论(0编辑  收藏  举报