GPIOC,BIT10,AF_PP, SPEED_10M); //PC10,TXD只能设置成复用推挽输出 GPIOx_Init(GPIOD,BIT11,IN_FLOATING,IN_IN); //浮空输入 DeviceReset(DEV_UART4);//复位串口3 irq_n = IRQ_UART4;//串口3中断号 }break; case 4: //通道4,UART5 ,TX:PC12;RX:PD2 { DeviceClockEnable(DEV_GPIOC,ENABLE);//GPIO C 时钟使能 DeviceClockEnable(DEV_GPIOD,ENABLE);//GPIO D 时钟使能 DeviceClockEnable(DEV_UART5,ENABLE);//UART 5 时钟使能 GPIOx_Init(GPIOC,BIT12,AF_PP, SPEED_10M); //PC12,TXD只能设置成复用推挽输出 GPIOx_Init(GPIOD,BIT2,IN_FLOATING,IN_IN); //浮空输入 DeviceReset(DEV_UART5);//复位串口3 irq_n = IRQ_UART5;//串口3中断号 }break; default : return 1;//端口号超出范围,返回错误 } //设置波特率分频系数 clock = SYS_CLK * 1000000;//USART1时钟 if(ch > 0) clock /= 2; //USART2,3,4,5时钟 fclk = (float)clock / 16.0 / Speed;//计算波特率分频系数 clock = (u16)fclk;//得到波特率分频系数整数部分
UARTx->BRR = clock << 4;//设置波特率整数部分 fclk -= clock;//得到波特率分频系数小数部分 fclk *= 16; UARTx->BRR |= 0xf & (u16)fclk;//设置波特率小数部分 //配置UART UARTx->CR1 = 0x2000;//使能USART,1个开始位,8位数据 UARTx->CR1 |= 0x8;//置TE = 1;发送使能;发送第一个空闲位 UARTx->CR1 |= 0x04;//RE = 1;接收使能 SetUartRxBuff(ch,0,NULL);//设置串口接收缓冲区 UARTx_ClearRxInt(ch); //清除串口接收中断标志 if(RX_Int) { UARTx->CR1 |= 0x20;//RXNEIE = 1,开RXNE中断,即开启接收中断 NVIC_IntEnable(irq_n,1);//开启USART1全局中断 UartRx[ch].IntRx = SET;//中断接收标志有效 } else { NVIC_IntEnable(irq_n,0); //关闭USART全局中断 UartRx[ch].IntRx = RESET;//中断接收标志无效 } UARTx_SendByte(0,'S');//发送一字节数据 return 0; //初始化成功,返回0 }
|