STM32F103串口设置波特率为1200和2400初始化,使用STM32的标准外设库程序举例
时间: 2025-02-15 14:18:50 浏览: 93
在STM32F103单片机上,使用HAL库进行串口通信时,你可以通过`USART_Init`函数来设置串口的波特率。这里是一个简单的示例,演示如何分别将波特率配置为1200和2400:
```c
#include "stm32f1xx_hal.h"
#include "usart.h"
void configure_USART_BaudRate(USART_HandleTypeDef* USARTx, uint32_t baudRate)
{
// 配置串口时钟源,假设你已知USARTx对应的GPIO时钟频率(如72MHz)
RCC_PeriphCLKInitTypeDef PeriphClkInitStruct;
PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_USARTx;
PeriphClkInitStruct.PLLUsart.PLLSource = RCC_PLLSOURCE_HSI;
PeriphClkInitStruct.PLLUsart.PLLM = 8; // 根据你的系统设置合适的倍数
PeriphClkInitStruct.PLLUsart.PLLN = 16; // 设置USARTx的时钟频率为GPIO时钟的1/2
PeriphClkInitStruct.PLLUsart.PLLP = RCC_PLLP_DIV2;
PeriphClkInitStruct.PLLUsart.PLLQ = 2;
HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct);
// 初始化串口
USART_InitTypeDef USART_InitStruct;
USART_InitStruct.Instance = USARTx;
// 波特率计算公式:baudRate = (USARTxClock / 16) * (USART_InitStruct.BaudRate Prescaler / (1 + USART_InitStruct.WordLength))
switch(baudRate)
{
case 1200:
USART_InitStruct.BaudRate = 1200;
USART_InitStruct.Prescaler = 2; // 1/(USARTxClock/16 * 1200) ≈ 2
break;
case 2400:
USART_InitStruct.BaudRate = 2400;
USART_InitStruct.Prescaler = 1; // 1/(USARTxClock/16 * 2400) ≈ 1
break;
// 其他波特率以此类推...
}
USART_InitStruct.DataSize = USART_DATA_SIZE_8BIT;
USART_InitStruct.StopBits = USART_STOPBITS_1;
USART_InitStructparity = USART_PARITY_NONE;
USART_InitStruct.HardwareFlowControl = USART_NO_HARDWARE_FLOW_CONTROL;
HAL_UART_Init(USARTx);
}
// 调用方式
void setup1200Baud(void)
{
configure_USART_BaudRate(&huart1, 1200);
}
void setup2400Baud(void)
{
configure_USART_BaudRate(&huart1, 2400);
}
```
阅读全文
相关推荐
















