#include "sys.h" #include "usart.h" #include "string.h" #include <stdarg.h> #include "delay.h" #include "stdio.h" #include "stdlib.h" #include "stdio.h" #include "oled.h" #define Usart3ReadLen 120 //ֵ char Usart3ReadBuff[Usart3ReadLen]={0}; //�������ݻ��� u32 Usart3ReadCnt = 0;//����1���յ������ݸ��� u32 Usart3IdleCnt = 0;//���м���� #define Usart1ReadLen 100 //ֵ char Usart1ReadBuff[Usart1ReadLen]={0}; //�������ݻ��� u32 Usart1ReadCnt = 0;//����1���յ������ݸ��� #define Usart2ReadLen 100 //ֵ char Usart2ReadBuff[Usart2ReadLen]={0}; //�������ݻ��� u32 Usart2ReadCnt = 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 uart3_init(u32 bound) { USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE); //ʹ��USART3�� RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, ENABLE);//���ö˿ڲ�����ӳ�� ���� /* Enable the USART1 Interrupt */ NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; // ͨ������Ϊ����3�ж� NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0 ; // ��ռ���ȼ� NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; // �ж���Ӧ���ȼ�0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; // ���ж� NVIC_Init(&NVIC_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB10 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //����������� GPIO_Init(GPIOB, &GPIO_InitStructure); //��ʼ��PB10 //USART3_RX PB.11 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//�������� GPIO_Init(GPIOB, &GPIO_InitStructure); //��ʼ��PB11 /* ��4��������USART3���� - BaudRate = 115200 baud - Word Length = 8 Bits - One Stop Bit - No parity - Hardware flow control disabled (RTS and CTS signals) - Receive and transmit enabled */ 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_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART3, &USART_InitStructure); //USART_IT_IDLE USART_ITConfig(USART3, USART_IT_IDLE, ENABLE); USART_ITConfig(USART3, USART_IT_RXNE, ENABLE); // �����ж�ʹ�� USART_Cmd(USART3,ENABLE);// ʹ��U3 } void uart2_init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //ʹ��USART2��GPIOAʱ�� RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // USART_DeInit(USART2); //��λ����2 //USART2_TX PA.2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //����������� GPIO_Init(GPIOA, &GPIO_InitStructure); //��ʼ��PA2 //USART2_RX PA.3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//�������� GPIO_Init(GPIOA, &GPIO_InitStructure); //��ʼ��PA3 //USART ��ʼ������ USART_InitStructure.USART_BaudRate = bound;//һ������Ϊ9600; 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(USART2, &USART_InitStructure); //��ʼ������2 // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//��ռ���ȼ�0 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //�����ȼ�2 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨ��ʹ�� NVIC_Init(&NVIC_InitStructure); //����ָ���IJ�����ʼ��VIC�Ĵ��� USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//�����ж� USART_ITConfig(USART2, USART_IT_IDLE, ENABLE); USART_Cmd(USART2, ENABLE); //ʹ�ܴ��� } void USART2_SendByte(u8 data) { while((USART2->SR&0X40)==0);//ѭ������,ֱ��������� USART2->DR = (u8) data; } void USART2_String(char *pdat,int len) { TIM_Cmd(TIM4, DISABLE); //ʹ�ܶ�ʱ��2 while(len>0) { USART2_SendByte(*pdat++); len--; } TIM_Cmd(TIM4, ENABLE); } void USART3_SendByte(u8 data) { while((USART3->SR&0X40)==0);//ѭ������,ֱ��������� USART3->DR = (u8) data; } void USART3_String(char *pdat,int len) { TIM_Cmd(TIM4, DISABLE); //ʹ�ܶ�ʱ��2 while(len>0) { USART3_SendByte(*pdat++); len--; } TIM_Cmd(TIM4, ENABLE); } void USART1_SendByte(u8 data) { while((USART1->SR&0X40)==0);//ѭ������,ֱ��������� USART1->DR = (u8) data; } void USART1_String(char *pdat,int len) { TIM_Cmd(TIM4, DISABLE); //ʹ�ܶ�ʱ��2 while(len>0) { USART1_SendByte(*pdat++); len--; } TIM_Cmd(TIM4, ENABLE); } char String_Sub(char *pcBuf, char *pcRes,const char *pStart,const char *pEnd); void USART2_IRQHandler(void) //����2�жϷ������ { u8 Res=0,rxes; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //�����ж� { Res =USART_ReceiveData(USART2); //��ȡ���յ������� if(Usart2ReadCnt < Usart2ReadLen-1) { Usart2ReadBuff[Usart2ReadCnt] = Res; } else { Usart2ReadCnt=0; } Usart2ReadCnt ++; //���ݸ��� } if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)//�����ж� { //�ö�SR��DR�ķ������IDLE rxes = USART2->SR; rxes = USART2->DR; Usart2ReadCnt=0; memset(Usart2ReadBuff,0,Usart2ReadLen); } } /**************************************************** * �������� ��void String_Sub(char *pcBuf, char *pcRes,char *pStart,char *pEnd) * �������� : ��ȡ���������ַ���֮����ַ��� NB-iot���ݽ����� * ��д���� ��2019/7/26 * ��д�� ��С�Ƶ��ӿƼ� * ���� �� *pcBuf Դ�ַ��� *pcResĿ���ַ��� *pStart�ַ���1 *pEnd�ַ���2 * �汾��¼ ��V1.0 * : ****************************************************/ char String_Sub(char *pcBuf, char *pcRes,const char *pStart,const char *pEnd) { char *pcBegin = NULL; char *pcEnd = NULL; pcBegin = strstr((char*)pcBuf,pStart); pcEnd = strstr((char*)pcBegin+strlen(pStart)+1, pEnd); if(pcBegin == NULL || pcEnd == NULL || pcBegin > pcEnd) { return 0;//���� } else { pcBegin += strlen(pStart); // memcpy(pcRes, pcBegin, pcEnd-pcBegin);//�ڴ濽���� strncpy(pcRes, pcBegin, pcEnd-pcBegin);//��ʼ�������� // pcRes[(pcEnd-pcBegin)+1]='\0'; } return 1; } void USART3_IRQHandler(void) //����3�жϷ������ { u8 Res=0,rxes; if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //�����ж� { Res =USART_ReceiveData(USART3); //��ȡ���յ������� if(Usart3ReadCnt < Usart3ReadLen-1) { Usart3ReadBuff[Usart3ReadCnt] = Res; } else { Usart3ReadCnt=0; } Usart3ReadCnt ++; //���ݸ��� Usart3IdleCnt = 0; } if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET)//�����ж� { //�ö�SR��DR�ķ������IDLE rxes = USART3->SR; rxes = USART3->DR; USART1_String(Usart3ReadBuff,Usart3ReadCnt); //memset(Usart3ReadBuff,0,Usart3ReadLen); Usart3ReadCnt=0; } } 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; printf("%s",Usart1ReadBuff); Usart1ReadCnt=0; } }