/*
*********************************************************************************************************
*
*
* UART Driver Package
* UART驱动程序包
* File : bsp_uart.c
* By :
* Date :
* version :
* NOTE(s) :
* History :
*
*
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* INCLUDES 头文件
*********************************************************************************************************
*/
#include "bsp_uart.h"
#include<stdarg.h>
#if SYSTEM_SUPPORT_OS
#include "os_cpu.h"
#endif
/*
*********************************************************************************************************
* CONSTANTS 常量
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* VARIABLES 变量
*********************************************************************************************************
*/
UartDriverCtrl DriverUart1 = {USART1,USART1_IRQn ,0,UART_TTL_EN,0,0,0,0,0,};
UartDriverCtrl DriverUart2 = {USART2,USART2_IRQn ,0,UART_TTL_EN,0,0,0,0,0,};
UartDriverCtrl DriverUart3 = {USART3,USART3_IRQn ,0,UART_TTL_EN,0,0,0,0,0,};
UartDriverCtrl DriverUart4 = {UART4 ,UART4_IRQn ,0,UART_TTL_EN,0,0,0,0,0,};
UartDriverCtrl DriverUart5 = {UART5 ,UART5_IRQn ,0,UART_TTL_EN,0,0,0,0,0,};
/*
*********************************************************************************************************
* LOCAL FUNCTIONS 静态函数
*********************************************************************************************************
*/
/**@brief 串口中断优先级设置及中断使能函数
*@param None
*@ret None
*/
static void uart_enable_int_inNcv(u8 u8NVIC_IRQChannel)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = u8NVIC_IRQChannel ; //设置串口中断
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/**@brief 串口初始化通用函数
*@param None
*@ret None
*/
static void USART_Config(USART_TypeDef* USARTx,u32 baud)
{
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = baud; //速率 baud bps
USART_InitStructure.USART_WordLength = USART_WordLength_8b; //数据位8位
USART_InitStructure.USART_StopBits = USART_StopBits_1; //停止位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; //收发模式
/* Configure USART */
USART_Init(USARTx, &USART_InitStructure); //配置串口参数函数
/* Enable USART1 Receive and Transmit interrupts */
USART_ITConfig(USARTx, USART_IT_RXNE, ENABLE); //使能接收中断
//USART_ITConfig( USARTx , USART_IT_TXE, ENABLE); //发送中断使能
/* Enable the USART */
USART_Cmd(USARTx, ENABLE);
}
/*
*********************************************************************************************************
* API FUNCTIONS API接口函数
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* USART1_Config()
*
* Description : Initialize USART1 Default IO. 初始化串口1默认IO
*
* Arguments : void
*
* Return : void
*
*Note(s):
*********************************************************************************************************
*/
void USART1_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 时钟配置 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
/* 串口1对应引脚复用映射 */
GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1); //GPIOA9复用为USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1); //GPIOA10复用为USART1
/* USART端口配置 USART1_Tx (PA9) USART1_Rx (PA10) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA9,PA10
}
//串口2 使用复用IO的初始化函数
//void USART2_Config(void)
//{
// GPIO_InitTypeDef GPIO_InitStructure;
// //PD5,PD6 复用IO口功能用于配置串口。因此要使能AFIO(复用功能IO)时钟。
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //因为串口1已经使能了
// RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //因为串口1已经使能了
// RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
// GPIO_PinRemapConfig(GPIO_Remap_USART2,ENABLE);
// //usart_init----------------------------------------------------
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //浮空输入模式
// GPIO_Init(GPIOD, &GPIO_InitStructure);
// /* Configure USART2 Tx (PD.2) as alternate function push-pull */
// GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5;
// GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
// GPIO_Init(GPIOD, &GPIO_InitStructure);
//}
/*
*********************************************************************************************************
* USART2_Config()
*
* Description : Initialize USART2 Default IO. 初始化串口2默认IO
*
* Arguments : void
*
* Return : void
*
*Note(s):
*********************************************************************************************************
*/
void USART2_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/* 时钟配置 */
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE);
/* 串口2对应引脚复用映射 */
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART2
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART2
/* USART端口配置 USART2_Tx (PA2) USART2_Rx (PA3) */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA2与GPIOA3
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; //复用功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽复用输出
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&GPIO_InitStructure); //初始化PA2,PA3
}
/*
*********************************************************************************************************
*