如题,例程中,为什么不能改 uart_init(72,9600); //串口1初始化 72改为36,改后就不能正常发送数据?
因为我想双串口发送数据,而uart2 在说明中最高只能是36,我改后uart2可以正常使用,但是uart1不能正常使用?为什么uart1不能为36?
求大神指点。
void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissa;
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp; //得到整数部分
fraction=(temp-mantissa)*16; //得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENR|=1<<2; //使能PORTA口时钟
RCC->APB2ENR|=1<<14; //使能串口1时钟
RCC->APB1ENR|=1<<17; //使能串口2时钟
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO状态设置 PA9 推挽输出 PA10 上拉下拉
GPIOA->CRL&=0XFFFF00FF;
GPIOA->CRL|=0X00008B00;//IO状态设置 PA2 PA3
RCC->APB2RSTR|=1<<14; //复位串口1
RCC->APB2RSTR&=~(1<<14);//停止复位
RCC->APB1RSTR|=1<<17; //复位串口2
RCC->APB1RSTR&=~(1<<17);//停止复位
//波特率设置
USART1->BRR=mantissa; // 波特率设置
USART1->CR1|=0X200C; //1位停止,无校验位.
USART2->BRR=mantissa; // 波特率设置
USART2->CR1|=0X200C; //1位停止,无校验位.
|