对于STM32F103的USART的通讯调试
USART:(Universal Synchronous/Asynchronous Receiver/Transmitter)通用同步/异步串行接收/发送器USART是一个全双工通用同步/异步串行收发模块,该接口是一个高度灵活的串行通信设备。
STM32F103的USART对应的引脚分别为:
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
二.同时使用USART1和USART3进行测试
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,同时通过串口调试工具连接USART1和USART3观察通讯结果:
USART1和USART3可同时向外发送数据。
完成对USART接口的通讯测试。
专业的物联网解决方案提供商,提供基于wifi和蓝牙的从app 到模组芯片的一体化解决方案,长期承接乐鑫,BES,stm32,Telink等芯片的方案设计开发及服务。 商务合作和技术探讨:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |