请帮我使用标准库,写一份STM32F103ZET6的串口5的初始化程序
时间: 2024-10-27 22:06:11 浏览: 29
在STM32F103ZET6单片机上使用标准库初始化串口5(USART5),通常需要以下几个步骤:
```c
#include "stm32f10x.h" // 包含STM32官方库文件
// 函数声明
void USART5_Init(void);
int main(void) {
// 首先配置复位系统
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
// 初始化时钟系统
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; // 使用HSE作为时钟源
RCC_OscInitStruct.HSEState = RCC_HSE_ON; // 启动HSE
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; // 启用PLL
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; // PLL源来自HSE
RCC_OscInitStruct.PLL.PLLM = 8; // 分频系数M
RCC_OscInitStruct.PLL.PLLN = 336; // PLL倍频系数N
RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; // PLL预分频
RCC_OscInitStruct.PLL.PLLQ = 7; // PLL输出分频Q值
HAL_RCC_OscConfig(&RCC_OscInitStruct); // 设置时钟源
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5); // 配置时钟树
// 初始化串口5
USART5_Init();
while (1) {
// 主循环,这里可以添加串口通信处理代码
}
}
void USART5_Init(void) {
GPIO_InitTypeDef GPIO_InitStruct;
// 串口5相关的GPIO配置
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE); // 启动GPIOD时钟
GPIO_InitStruct.Pin = GPIO_PIN_9 | GPIO_PIN_10; // PA9和PA10连接到USART5的数据接收和发送端口
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; //推挽模式
GPIO_InitStruct.Pull = GPIO_NOPULL; //无拉力
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; //高速
GPIO_InitStruct.Alternate = GPIO_AF7_USART5; //功能选择为USART5
HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
// 初始化串口5
USART5.Instance = USART5;
USART5.Init.BaudRate = 9600; // 设置波特率
USART5.Init.WordLength = USART_WordLength_8b; // 8位数据传输
USART5.Init.StopBits = USART_StopBits_1; // 1位停止位
USART5.Init.Parity = USART_Parity_No; //无奇偶校验
USART5.Init.HardwareFlowControl = USART_HardwareFlowControl_None; //无硬件流控
USART5.Init.Mode = USART_Mode_TxRx; //全双工模式
USART5.Init.ClockPrescaler = USART_ClockPrescaler_Div8; //时钟分频因子为8
HAL_UART_Init(&USART5);
// 开启串口
HAL_UART被列入低优先级组,防止与其他任务抢占CPU资源
HAL_NVIC_SetPriority(USART5_IRQn, 0, 0);
HAL_NVIC_EnableIRQ(USART5_IRQn);
}
```
阅读全文