/* ***************************************************************** 头文件 ***************************************************************** */ #include "usart1_sdi.h" #include "bsp.h" /* ************************************************************************************ 变量定义 ************************************************************************************ */ char USART1_SDI_RX_BUF[USART1_SDI_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节. char USART1_SDI_TX_BUF[100]; //接收状态 //bit15, 接收完成标志 //bit14, 接收到0x0d //bit13~0, 接收到的有效字节数目 u16 USART_SDI_RX_STA=0; //接收状态标记 /* ********************************************************************************************************* * 函 数 名: USART1_Configuration() * 功能说明: 串口1配置 * 输 入 :波特率baund * 输 出 :无 ********************************************************************************************************* */ void USART1_SDI_Configuration(u32 baund) { USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; Enable_SDI_RS232=0; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //使能USART1_SDI_SDI RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE); //GPIOA时钟 //NVIC_Configuration(); USART_DeInit(USART1); //复位串口1 //USART1_SDI_SDI_TX PB.6--TX PB.7--RX GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1); USART_InitStructure.USART_BaudRate = baund; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_Even; //奇校验,数据位变为7位 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); USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);//开启USART1_SDI_SDI的接收中断 //USART1_SDI_SDI NVIC 配置 NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口3中断通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority =3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器、 USART_ClearFlag(USART1,USART_FLAG_TC); //清除发送完成标志位 } /* ********************************************************************************************************* * 函 数 名: USART1_SDI_CLR_RXBuf() * 功能说明: 串口1数组清空 * 输 入 :无 * 输 出 :无 ********************************************************************************************************* */ void USART1_SDI_CLR_RXBuf(void) { memset(USART1_SDI_RX_BUF, 0, USART1_SDI_REC_LEN); USART_SDI_RX_STA=0; } /* ********************************************************************************************************* * 函 数 名: USART1_SDI_SDI_CLR_TXBuf() * 功能说明: 串口1数组清空 * 输 入 :无 * 输 出 :无 ********************************************************************************************************* */ void USART1_SDI_SDI_CLR_TXBuf(void) { memset(USART1_SDI_TX_BUF, 0, 100); } /* ********************************************************************************************************* * 函 数 名: u1_printf() * 功能说明: 串口1输出 * 输 入 : * 输 出 : ********************************************************************************************************* */ void u1_printf(char* fmt,...) { u16 i,j; va_list ap; va_start(ap,fmt); vsprintf((char*)USART1_SDI_TX_BUF,fmt,ap); va_end(ap); i=strlen((const char*)USART1_SDI_TX_BUF); //此次发送数据的长度 for(j=0;j