| 串口初始化函数 void usart_init()
 {
 GPIO_InitTypeDef GPIO_InitStructure; //声明一个结构体变量,用来初始化 GPIO
 USART_InitTypeDef USART_InitStructure; //串口结构体定义
 NVIC_InitTypeDef NVIC_InitStructure;//中断结构体定义
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  //打开时钟
 /* 配置 GPIO 的模式和 IO 口 */
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX //串口输出 PA9
 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出
 GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化串口输入 IO */
 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX //串口输入 PA10
 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;  //模拟输入
 GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化 GPIO */
 USART_InitStructure.USART_BaudRate=9600; //波特率设置为 9600 //波特率
 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; //开启发送和接受模式
 USART_Init(USART1,&USART_InitStructure); /* 初始化 USART1 */
 USART_Cmd(USART1, ENABLE);  /* 使能 USART1 */
 USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//使能或者失能指定的USART中断 接收中断
 USART_ClearFlag(USART1,USART_FLAG_TC);//清除 USARTx 的待处理标志位
 /* 设置 NVIC 参数 */
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //打开 USART1 的全局中断
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //抢占优先级为 0
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //响应优先级为 0
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //使能
 NVIC_Init(&NVIC_InitStructure);
 }
 
 
 |