123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- /**************************************************************
- ** 串口路由器
- ** 功能描述: 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<uart1BufIndex;i++)
- {
- USART_SendData(USART1, uart1Buf[i]);
- }
- uart1BufIndex=0;
- WatchDog_Feed();
- LED_Off();
- }
- }
- void USART1_Init(uint32_t baud)
- {
- USART_InitTypeDef USART_InitStructure;
- //NVIC_InitTypeDef NVIC_InitStructure;
-
- USART_Cmd(USART1, DISABLE);
- USART_DeInit(USART1);
- /* USART1的基本配置 */
- USART_InitStructure.USART_BaudRate = baud; //波特率
- 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(USART1, &USART_InitStructure);
- USART_Cmd(USART1, ENABLE);
- }
- void USART1_Receive_Init(uint32_t bound,uint32_t Parity,uint32_t StopBits)
- {
- USART_InitTypeDef USART_InitStructure;
- USART_Cmd(USART1, DISABLE);
- USART_DeInit(USART1);
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //使能GPIOA的时钟
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);//使能USART的时钟
- USART_InitStructure.USART_BaudRate = bound; //波特率1200
- 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_Init(USART1, &USART_InitStructure);
-
- USART1_Finish_Flag=0;
- USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
- USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);
- USART_Cmd(USART1, ENABLE);
- }
- void USART1_IRQHandler(void)
- {
- unsigned char temp=0;
- if(USART_GetITStatus(USART1,USART_IT_RXNE) != RESET)
- {
- USART_ClearITPendingBit(USART1,USART_IT_RXNE);
- USART_ClearFlag(USART1,USART_FLAG_RXNE);
- temp = USART_ReceiveData(USART1);
- uart1Buf[uart1BufIndex++]=temp;
- if (uart1BufIndex>=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**************************/
|