|  | 
 
| 
#define usart2_MAX 100
×
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有账号?立即注册 
  extern uchar usart2_data[usart2_MAX];
 extern uchar usart2_rx;
 void usart2_init(u32 Baud_rate);
 void USART2_Sned_Char(uchar pchar);//串口发出一个16进制数
 void empty_usart2_data(uchar q);//清除
 
 
 
 uchar usart2_data[usart2_MAX];
 uchar usart2_rx;
 
 void usart2_init(u32 Baud_rate)
 {
 GPIO_InitTypeDef GPIO_Initusartgpio;
 USART_InitTypeDef USART_Initusart2;
 NVIC_InitTypeDef Init_NVIC;
 
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);
 
 GPIO_Initusartgpio.GPIO_Mode=GPIO_Mode_AF_PP;
 GPIO_Initusartgpio.GPIO_Pin=GPIO_Pin_2;
 GPIO_Initusartgpio.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init(GPIOA,&GPIO_Initusartgpio);
 
 GPIO_Initusartgpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;
 GPIO_Initusartgpio.GPIO_Pin=GPIO_Pin_3;
 GPIO_Initusartgpio.GPIO_Speed=GPIO_Speed_50MHz;
 GPIO_Init(GPIOA,&GPIO_Initusartgpio);//初始化IO口
 
 USART_Initusart2.USART_BaudRate=Baud_rate;
 USART_Initusart2.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
 USART_Initusart2.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
 USART_Initusart2.USART_Parity=USART_Parity_No;
 USART_Initusart2.USART_StopBits=USART_StopBits_1;
 USART_Initusart2.USART_WordLength=USART_WordLength_8b;
 USART_Init(USART2,&USART_Initusart2);//配置串口工作模式
 
 USART_Cmd(USART2,ENABLE);//使能中断
 
 USART_ITConfig(USART2,USART_IT_RXNE,ENABLE);//开启中断服务
 
 
 Init_NVIC.NVIC_IRQChannel=USART2_IRQn;//指出哪一个通道
 Init_NVIC.NVIC_IRQChannelCmd=ENABLE;
 Init_NVIC.NVIC_IRQChannelPreemptionPriority=1;
 Init_NVIC.NVIC_IRQChannelSubPriority=2;
 NVIC_Init(&Init_NVIC);
 
 
 }
 void USART2_IRQHandler()//串口1接收 中断
 {
 u8 buffer;
 if(USART_GetITStatus(USART2,USART_IT_RXNE))
 {
 buffer=USART_ReceiveData(USART2);
 usart2_data[usart2_rx++]=buffer;
 USART_ClearITPendingBit(USART2,USART_IT_RXNE);//清除标志位
 }
 }
 void USART2_Sned_Char(uchar pchar)//串口发出一个16进制数
 {
 //    USART_SendData(USART2,(uchar)temp);
 //    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
 USART2->DR = pchar;
 while((USART2->SR&0X40)==0);//循环发送,直到发送完毕
 
 }
 
 //void USART2_Sned_Char(uchar temp)//串口发出一个16进制数
 // {
 //    USART_SendData(USART2,(uchar)temp);
 //    while(USART_GetFlagStatus(USART2,USART_FLAG_TXE)==RESET);
 //}
 void empty_usart2_data(uchar q)
 {
 uint w;
 for(w=0;w<usart2_MAX;w++)
 {
 usart2_data[w]=q;
 }
 }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 | 
 |