//初始化IO 串口2 //pclk1:PCLK1时钟频率(Mhz) //bound:波特率 void USART3_Init(u32 bound) { NVIC_InitTypeDef NVIC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // GPIOB时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); USART_DeInit(USART3 ); //复位串口1 //USART3_TX PB.10 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //PB.10 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 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(USART3, &USART_InitStructure); //初始化串口 2 //波特率设置 // USART3->BRR=(pclk1*1000000)/(bound);// 波特率设置 //USART3->CR1|=0X200C; //1位停止,无校验位. USART_DMACmd(USART3,USART_DMAReq_Tx,ENABLE); //使能串口3的DMA发送 UART_DMA_Config(DMA1_Channel7,(u32)&USART3->DR,(u32)USART3_TX_BUF);//DMA1通道7,外设为串口2,存储器为USART3_TX_BUF USART_Cmd(USART3, ENABLE); //使能串口 #ifdef USART3_RX_EN //如果使能了接收 //使能接收中断 USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);//开启中断 NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子优先级3 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能 NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器 TIM4_Init(99,7199); //10ms中断 USART3_RX_STA=0; //清零 TIM4_Set(0); //关闭定时器4 #endif }
//初始化IO 串口2 //pclk1:PCLK1时钟频率(Mhz) //bound:波特率 void USART2_Init(u32 pclk1,u32 bound) { RCC->APB2ENR|=1<<8; //使能PORTG口时钟 GPIOG->CRH&=0XFFFFFF0F; //IO状态设置 GPIOG->CRH|=0X00000030; //IO状态设置 RCC->APB2ENR|=1<<2; //使能PORTA口时钟 GPIOA->CRL&=0XFFFF00FF; //IO状态设置 GPIOA->CRL|=0X00008B00; //IO状态设置 RCC->APB1ENR|=1<<17; //使能串口时钟 RCC->APB1RSTR|=1<<17; //复位串口2 RCC->APB1RSTR&=~(1<<17);//停止复位 //波特率设置 USART2->BRR=(pclk1*1000000)/(bound);// 波特率设置 USART2->CR1|=0X200C; //1位停止,无校验位. USART2->CR3=1<<7; //使能串口2的DMA发送 UART_DMA_Config(DMA1_Channel7,(u32)&USART2->DR,(u32)USART2_TX_BUF);//DMA1通道7,外设为串口2,存储器为USART2_TX_BUF #ifdef USART2_RX_EN //如果使能了接收 //使能接收中断 USART2->CR1|=1<<8; //PE中断使能 USART2->CR1|=1<<5; //接收缓冲区非空中断使能 MY_NVIC_Init(2,3,USART2_IRQChannel,2);//组2,最低优先级 #endif }