一、
1.1USART引脚GPIO设置
1.2USART发送接收数据格式
void USART1_Init(uint32_t bound)
{
//定义结构体:GPIO结构体、USART结构体、NVIC结构体
GPIO_InitTypeDef GPIO_InitStructure;
USART_InitTypeDef USART_InitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
//开启外设时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//配置USART1的RX和TX端口引脚(查看复用功能重映射)
//TX
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Mhz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//RX
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
//输入不需要配置引脚速度 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50Mhz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA,&GPIO_InitStructure);
//设置USART结构体
//设置波特率
USART_InitStructure.USART_BaudRate=bound;
//设置字长
USART_InitStructure.USART_WordLength=USART_WordLength_8b;
//设置停止位
USART_InitStructure.USART_StopBits=USART_StopBits_1;
//设置奇偶校验
USART_InitStructure.USART_Parity=USART_Parity_No;
//设置硬件流控
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
//设置USART模式
USART_InitStructure.USART_Mode=USART_Mode_Rx|USART_Mode_Tx;
//选择USART1并根据上述参数初始化
USART_Init(USART1,&USART_InitStructure);
//开启USART1外设
USART_Cmd(USART1,ENABLE);
//清除传输完成标志
USART_ClearFlag(USART1,USART_FLAG_TC);
//开启接收数据寄存器不空中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
//USART1中断优先级配置
//中断优先级分组:2位抢占优先级,2位子优先级
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
//中断通道
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
//USART1中断服务函数
void USART1_IRQHandler(void)
{
uint8_t r;
//接收到数据
if(USART_GetITStatus(USART1,USART_IT_RXNE)!=RESET)
{
//读取数据
r=USART_ReceiveData(USART1);
//发送数据
USART_SendData(USART1,r);
//发送结束跳出循环
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
//清除传输完成标志
USART_ClearFlag(USART1,USART_FLAG_TC);
}