SMT32F407串口2的配置

************************************************************
* 函数名称: Usart2_Init
*
* 函数功能: 串口2初始化
*
* 入口参数: baud:设定的波特率
*
* 返回参数: 无
*
* 说明: TX-PA2 RX-PA3
************************************************************

void Usart2_Init(unsigned int bound)
{

GPIO_InitTypeDef gpio_initstruct;
USART_InitTypeDef usart_initstruct;
NVIC_InitTypeDef nvic_initstruct;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //使能GPIOA时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);//使能USART1时钟
//串口1对应引脚复用映射
GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_USART2); //GPIOA2复用为USART1
GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_USART2); //GPIOA3复用为USART1

//USART2端口配置
gpio_initstruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3; //GPIOA9与GPIOA10
gpio_initstruct.GPIO_Mode = GPIO_Mode_AF;//复用功能
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHz
gpio_initstruct.GPIO_OType = GPIO_OType_PP; //推挽复用输出
gpio_initstruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA,&gpio_initstruct); //初始化PA9,PA10

//USART2 初始化设置
usart_initstruct.USART_BaudRate = bound;//波特率设置
usart_initstruct.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
usart_initstruct.USART_StopBits = USART_StopBits_1;//一个停止位
usart_initstruct.USART_Parity = USART_Parity_No;//无奇偶校验位
usart_initstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
usart_initstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式
USART_Init(USART2, &usart_initstruct); //初始化串口1

USART_Cmd(USART2, ENABLE); //使能串口2

USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //使能接收中断

//Usart2 NVIC 配置
nvic_initstruct.NVIC_IRQChannel = USART2_IRQn;//串口1中断通道
nvic_initstruct.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
nvic_initstruct.NVIC_IRQChannelSubPriority =3; //子优先级3
nvic_initstruct.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能
NVIC_Init(&nvic_initstruct); //根据指定的参数初始化VIC寄存器、

}

//==========================================================
// 函数名称: USART2_IRQHandler
//
// 函数功能: 串口2收发中断
//
// 入口参数: 无
//
// 返回参数: 无
//
// 说明:
//==========================================================

void USART2_IRQHandler(void)
{

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中断
{
if(esp8266_cnt >= sizeof(esp8266_buf)) esp8266_cnt = 0; //防止串口被刷爆
esp8266_buf[esp8266_cnt++] = USART2->DR;

USART_ClearFlag(USART2, USART_FLAG_RXNE);
}

}


/*
************************************************************
* 函数名称: Usart_SendString
*
* 函数功能: 串口数据发送
*
* 入口参数: USARTx:串口组
* str:要发送的数据
* len:数据长度
*
* 返回参数: 无
*
* 说明:
************************************************************
*/
void Usart2_SendString(unsigned char *str, unsigned short len)
{

unsigned short count = 0;

for(; count < len; count++)
{
USART_SendData(USART2, *str++); //发送数据
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); //等待发送完成
}
}

 

posted @ 2021-04-04 12:47  逆水行舟,是进是退  阅读(437)  评论(0编辑  收藏  举报