STM8L 串口初始化疑问
STM8L串口初始化,必须先写BRR2吗?看到好多例程里这么写,为什么?如何先写BRR1会怎么样?
void USART1_Init (void)
{
uint16_t buad;
USART1_CR2 = 0x00; //禁止UART发送和接收
USART1_CR1 = 0x00; //b5=0允许UART,b2=0,禁止校验。8位数据位,无校验
USART1_CR3 = 0x00; //b5,b4=00,1个停止位
//设置波特率,注意:(1) 必须先写BRR2(2) BRR1存放的是分频系数的第11位到第4位,(3) BRR2存放的是分频系数的第15位到第12位,和第3位到第0位
//4000000/9600=417=0x01A1 0x1A,0x01;
buad = (uint16_t)(FSYS / USART1_BUAD);
USART1_BRR2 = (uint8_t)(((buad >> 8) & 0xF0) | (buad & 0x0F));
USART1_BRR1 = (uint8_t)(buad >> 4);
//USART1_BRR2 = 0x01;
//USART1_BRR1 = 0x1A;
USART1_CR2 = 0x2C; //b2=1,允许接收。b3=1,允许发送。b5=1,允许产生接收中断 。
}
页:
[1]