1.接线图
2.代码展示
因为需要使用接收RX,则PA10口需要进行初始化,选择上拉输入
//初始化GPIOA
// GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
初始化USART,我们既要接收又要发送,则选择接收和发送模式
//初始化USART
// USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate=9600;//波特率
USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//不使用流控
USART_InitStructure.USART_Mode=USART_Mode_Tx | USART_Mode_Rx;//选择发送模式和接受模式
USART_InitStructure.USART_Parity=USART_Parity_No;//选择校验位,无校验
USART_InitStructure.USART_StopBits=USART_StopBits_1;//停止位长度
USART_InitStructure.USART_WordLength=USART_WordLength_8b;//字长,8位
USART_Init(USART1,&USART_InitStructure);
这里我们使用中断方式来接收数据
首先打开USART的中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//打开串口接受数据的中断
然后配置NVIC
//NVIC配置,中断查询接受模式
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中断优先级分组
// NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQn;//USART1通道
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//抢占优先级
NVIC_InitStructure.NVIC_IRQChannelSubPriority=1;//响应优先级
NVIC_Init(&NVIC_InitStructure);
最后写出中断函数
void USART1_IRQHandler(void)
{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE) == SET)
{
Serial_RxData=USART_ReceiveData(USART1);
Serial_RXFlag=1;
USART_ClearFlag(USART1,USART_FLAG_RXNE);
}
}