69 lines
2.4 KiB
C
69 lines
2.4 KiB
C
#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
|
||
}
|