#include "USART2.h" void USART2_Init(u32 bound) { GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; #if USART2_EN RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);//GPIOA时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); //USART2时钟使能 //USART2_TX GPIOA2 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA2 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART2_RX GPIOA3 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); //USART配置 USART_InitStructure.USART_BaudRate = bound;//波特率设置 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_Mode_Tx; //收发模式 USART_Init(USART2, &USART_InitStructure); //初始化串口2 USART_ITConfig(USART2, USART_IT_RXNE, ENABLE); //开始串口接收中断 USART_Cmd(USART2, ENABLE); #endif } //------------------------------------------------- //char SendUartByte (u16 Sendbyte,USART_TypeDef* Uart) //{ // send a byte down a uart // while(USART_GetFlagStatus(Uart, USART_FLAG_TXE) == RESET) //wait for send out // { // } // USART_SendData(Uart,Sendbyte); // return 1; //} //char SendUartStr(const char *s, USART_TypeDef* Uart) //{ // send a string from rom // char c; // if (!s) return 1; // for (;*s;) // { // c = *s++; // if (c == '\n') // { // insert a CR (\r) before the LF (\n) // if (!SendUartByte('\r', Uart)) return 0; // Send byte // } // if (!SendUartByte(c, Uart)) return 0; // Send byte // } // return 1; //} //char SendUartData(char *s, u16 len, USART_TypeDef* Uart) //{ // Send data down a uart // char c; // if (!s) return 1; // for (; len; len--) // { // c = *s++; // if (!SendUartByte(c, Uart)) return 0; // Send byte // } // return 1; //} //void SendUSART1Data(u8 *d, u16 len) //{ // send data from ram // SendUartData(d, len,USART1); //} //void SendUSART2Data(u8 *d, u16 len) //{ // send data from ram // SendUartData(d, len,USART2); //} //void SendUSART2Str(char *d) //{ // SendUartStr(d,USART2); //} #if EN_USART2_RX u8 USART2_RX_BUF[USART2_REC_LEN]; u8 USART2_TX_CNT; //发送计数 u8 USART2_RX_CNT; //接收计数 u16 USART2_REC_Status; //接收完成标志位 #endif void USART2_IRQHandler(void) { u8 res; if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); //清除中断标志 res = USART_ReceiveData(USART2); USART2_RX_BUF[USART2_RX_CNT] = res; USART2_RX_CNT ++; } if(USART_GetFlagStatus(USART2,USART_FLAG_ORE) == SET) //溢出 { USART_ClearFlag(USART2,USART_FLAG_ORE); //读SR USART_ReceiveData(USART2); //读DR } }