#include "sys.h" #include "usart.h" #if SYSTEM_SUPPORT_OS #include "includes.h" //ucos 使用 #endif ////////////////////////////////////////////////////////////////// // 加入以下代码,支持printf函数,而不需要选择use MicroLIB #if 1 #pragma import(__use_no_semihosting) // 标准库需要的支持函数 struct __FILE { int handle; }; FILE __stdout; // 定义_sys_exit()以避免使用半主机模式 _sys_exit(int x) { x = x; } // 重定义fputc函数 int fputc(int ch, FILE *f) { while ((USART1->SR & 0X40) == 0); // 使用串口1 USART1->DR = (u8)ch; return ch; } #endif /************************************************************************** Function: Serial port 1 initialization Input : bound:Baud rate Output : none 函数功能:串口1初始化 入口参数:bound:波特率 返回 值:无 **************************************************************************/ void uart_init(u32 bound) { // GPIO端口设置 GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); // 使能USART1,GPIOA时钟 // USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // 复用推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA.9 // USART1_RX GPIOA.10初始化 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; // PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; // 浮空输入 GPIO_Init(GPIOA, &GPIO_InitStructure); // 初始化GPIOA.10 // USART 初始化设置 USART_InitStructure.USART_BaudRate = bound; // 串口波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; // 字长为8位数据格式 USART_InitStructure.USART_StopBits = USART_StopBits_1; // 一个停止位 USART_InitStructure.USART_Parity = USART_Parity_No; // 无奇偶校验位 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; // 无硬件数据流控制 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; // 收发模式 USART_Init(USART1, &USART_InitStructure); // 初始化串口1 USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); // 开启串口接受中断 USART_Cmd(USART1, ENABLE); // 使能串口1 }