串口3的初始化程序
void uart_init3(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<<3; //使能PORTB口时钟
GPIOB->CRH&=0XFFFF00FF;//IO状态设置
GPIOB->CRH|=0X0000BB00;//IO状态设置
RCC->APB2ENR|=1<<7; //使能PORTF口时钟
GPIOF->CRH&=0XFFFF0FFF;//IO状态设置
GPIOF->CRH|=0X00003000;//IO状态设置
UsartIO=1;//发送状态
RCC->APB1ENR|=1<<18; //使能串口时钟
RCC->APB1RSTR|=1<<18; //复位串口1
RCC->APB1RSTR&=~(1<<18);//停止复位
//波特率设置
USART3->BRR=mantissa; // 波特率设置
USART3->CR1|=0X200C; //1位停止,无校验位.
}
主程序初始化
Stm32_Clock_Init(9);//初始化工作频率
delay_init(72);//初始化延时函数
uart_init3(72,9600); //串口3初始化
上面的是串口3 RS485的方式和外面通讯的 但是我初始化的波特率是9600 但是在电脑上调试的时候 实际的波特率是4800 (发送出来的数据全部是对的) 请问谁遇到过这个问题? |