#include "sys.h" #include "usart.h" #include "string.h" #include <stdarg.h> #define Usart1ReadLen 50 //ֵ char Usart1ReadBuff[Usart1ReadLen]={0}; //�������ݻ��� u32 Usart1ReadCnt = 0;//����1���յ������ݸ��� #if 1 #pragma import(__use_no_semihosting) //������Ҫ��֧�ֺ��� struct __FILE { int handle; }; FILE __stdout; //����_sys_exit()�Ա���ʹ�ð�����ģʽ _sys_exit(int x) { x = x; } //�ض���fputc���� int fputc(int ch, FILE *f) { while((USART1->SR&0X40)==0);//ѭ������,ֱ��������� USART1->DR = (u8) ch; return ch; } #endif void uart_init(u32 bound){ //GPIO�˿����� GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //ʹ��USART1��GPIOAʱ�� //USART1_TX GPIOA.9 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //����������� GPIO_Init(GPIOA, &GPIO_InitStructure);//��ʼ��GPIOA.9 //USART1_RX GPIOA.10��ʼ�� GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//�������� GPIO_Init(GPIOA, &GPIO_InitStructure);//��ʼ��GPIOA.10 //Usart1 NVIC ���� NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//��ռ���ȼ�3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //�����ȼ�3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ��ʹ�� NVIC_Init(&NVIC_InitStructure); //����ָ���IJ�����ʼ��VIC�Ĵ��� //USART ��ʼ������ USART_InitStructure.USART_BaudRate = bound;//���ڲ����� USART_InitStructure.USART_WordLength = USART_WordLength_8b;//�ֳ�Ϊ8λ���ݸ�ʽ USART_InitStructure.USART_StopBits = USART_StopBits_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); //��ʼ������1 USART_ITConfig(USART1, USART_IT_IDLE, ENABLE); USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//�������ڽ����ж� USART_Cmd(USART1, ENABLE); //ʹ�ܴ���1 } void UsartSendData(u8 *p,char len) { while(len--) { while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); USART_SendData(USART1, *p++); } } extern u8 jr_flag; extern u8 mode_flag; void USART1_IRQHandler(void) //����1�жϷ������ { u8 Res,rxes; if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //�����ж�(���յ������ݱ�����0x0d 0x0a��β) { Res =USART_ReceiveData(USART1); //��ȡ���յ������� if(Usart1ReadCnt < Usart1ReadLen-1) { Usart1ReadBuff[Usart1ReadCnt] = Res; } else { Usart1ReadCnt=0; } Usart1ReadCnt ++; //���ݸ��� } if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)//�����ж� { //�ö�SR��DR�ķ������IDLE rxes = USART1->SR; rxes = USART1->DR; if(Usart1ReadCnt>5) { if(strstr(Usart1ReadBuff,"open")!=NULL) { jr_flag=1; }else if(strstr(Usart1ReadBuff,"open")!=NULL) { jr_flag=0; } else if(strstr(Usart1ReadBuff,"mode1")!=NULL) { mode_flag=1; }else if(strstr(Usart1ReadBuff,"mode0")!=NULL) { mode_flag=0; } } Usart1ReadCnt=0; memset(Usart1ReadBuff,0,Usart1ReadLen-1); } }