/************************************************************** ** 串口路由器 ** 功能描述: STM32串口操作 ** 版本:V1.0 ***************************************************************/ #include "usart.h" //#include "string.h" #include "stm32f0xx_gpio.h" #include "stm32f0xx_usart.h" #include "stm32f0xx_rcc.h" #include "ALL_Includes.h" unsigned char uart1Buf[100],uart1BufIndex=0; extern unsigned char USART1_Finish_Flag; uint32_t baudrateval = 9600; extern uint8_t sendbuf[10]; uint32_t baudrate_send = 9600; void AutoBauRate_StartBitMethod(void) { USART_AutoBaudRateConfig(USART1, USART_AutoBaudRate_StartBit); USART_AutoBaudRateCmd(USART1, ENABLE); while(USART_GetFlagStatus(USART1, USART_FLAG_REACK) == RESET) {} while(USART_GetFlagStatus(USART1, USART_FLAG_TEACK) == RESET) {} /* Loop until the end of Autobaudrate phase */ while(USART_GetFlagStatus(USART1, USART_FLAG_ABRF) == RESET) {} /* If AutoBaudBate error occurred */ if (USART_GetFlagStatus(USART1, USART_FLAG_ABRE) != RESET) { } else { /* Wait until RXNE flag is set */ while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET) {} /* Wait until TXE flag is set */ while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET) {} //将收到的数据发送到串口 USART_SendData(USART1, USART_ReceiveData(USART1)); while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {} //计算波特率 baudrateval = 72000000 / USART1->BRR; USART1_NVIC_Config(); } } void USART1_NVIC_Config(void) //配置IO口和中断配置 { NVIC_InitTypeDef NVIC_InitStructure; NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn; //通道设置为串口1中断 NVIC_InitStructure.NVIC_IRQChannelPriority = 1; //中断占先等级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //打开中断 NVIC_Init(&NVIC_InitStructure); } void USART1_Init_Config(void) //配置IO口和中断配置 { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_1); GPIO_PinAFConfig(GPIOA,GPIO_PinSource3,GPIO_AF_1); GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2|GPIO_Pin_3; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); } void USART1_Send_Init(void) { USART_InitTypeDef Usart_InitStructure; USART_ITConfig(USART1, USART_IT_IDLE, DISABLE); USART_ITConfig(USART1, USART_IT_RXNE, DISABLE); USART_Cmd(USART1, DISABLE); USART_DeInit(USART1); Usart_InitStructure.USART_BaudRate=9600; Usart_InitStructure.USART_WordLength=USART_WordLength_8b; Usart_InitStructure.USART_Parity=USART_Parity_No; Usart_InitStructure.USART_StopBits=USART_StopBits_1; Usart_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None; Usart_InitStructure.USART_Mode=USART_Mode_Tx; USART_Init(USART1,&Usart_InitStructure); USART_Cmd(USART1,ENABLE); } void USART1_Send_Buffer(void) { int i; if (uart1BufIndex>0) { LED_On(); USART1_Send_Init(); for (i=0;i=99) uart1BufIndex = 0; } if(USART_GetITStatus(USART1,USART_IT_IDLE) == SET) { USART_ClearITPendingBit(USART1, USART_IT_IDLE); temp = USART_ReceiveData(USART1); USART1_Finish_Flag = 1; //一帧数据接收完成 } if(USART_GetFlagStatus(USART1,USART_FLAG_ORE) == SET) //溢出 { USART_ClearFlag(USART1,USART_FLAG_ORE); //读SR USART_ReceiveData(USART1); //读DR } } void BLE_init(void) { USART1_Init(9600); //为初始化蓝牙配置 delay_ms_(50); USART_SendData(USART1, 0x41); USART_SendData(USART1, 0x54); USART_SendData(USART1, 0x2B); USART_SendData(USART1, 0x48); USART_SendData(USART1, 0x4F); USART_SendData(USART1, 0x53); USART_SendData(USART1, 0x54); USART_SendData(USART1, 0x45); USART_SendData(USART1, 0x4E); USART_SendData(USART1, 0x30); USART_SendData(USART1, 0x0D); USART_SendData(USART1, 0x0A); delay_ms_(10); USART_SendData(USART1, 0x41); USART_SendData(USART1, 0x54); USART_SendData(USART1, 0x2B); USART_SendData(USART1, 0x52); USART_SendData(USART1, 0x53); USART_SendData(USART1, 0x54); USART_SendData(USART1, 0x0D); USART_SendData(USART1, 0x0A); delay_ms_(100); } void Uart_Process(void) { int i=0,j=1; u8 tem; if (uart1BufIndex>0) { while(i<100 && uart1Buf[i]!=0x00) { if(0x24==uart1Buf[i++]) { if(0x31==uart1Buf[i++]) { LED_On(); USART1_Send_Init(); for(j=0;j<6;j++) sendbuf[j] = uart1Buf[j+4]; for(j=1;j<5;j++) { if (sendbuf[j]>0x30) {tem = sendbuf[0]; sendbuf[0] = 0x20; sendbuf[j-1] = tem; break;} else sendbuf[j] = 0x20; } for(j=1;j<6;j++) USART_SendData(USART1, sendbuf[j]); USART_SendData(USART1, 0x0D); WatchDog_Feed(); LED_Off(); } } } uart1BufIndex = 0; } } /******************** End of File**************************/