关于STM8S库里面的这段UART通信的波特率设置代码问题请教
关于STM8S库里面的这段UART通信的波特率设置代码,看不懂,请高手指教下,代码如下CLK_GetClockFreq() 系统时钟
BaudRate 设置的波特率
/* Set the UART1 BaudRates in BRR1 and BRR2 registers according to UART1_BaudRate value */
BaudRate_Mantissa = ((uint32_t)CLK_GetClockFreq() / (BaudRate << 4));
BaudRate_Mantissa100 = (((uint32_t)CLK_GetClockFreq() * 100) / (BaudRate << 4));
/* Set the fraction of UART1DIV*/
UART1->BRR2 |= (uint8_t)((uint8_t)(((BaudRate_Mantissa100 - (BaudRate_Mantissa * 100)) << 4) / 100) & (uint8_t)0x0F);
/* Set the MSB mantissa of UART1DIV*/
UART1->BRR2 |= (uint8_t)((BaudRate_Mantissa >> 4) & (uint8_t)0xF0);
/* Set the LSB mantissa of UART1DIV*/
UART1->BRR1 |= (uint8_t)BaudRate_Mantissa;
敢来个人指点下吗? 看看芯片手册里面的介绍吧,挺详细的。 高二毛 发表于 2016-11-1 08:31
看看芯片手册里面的介绍吧,挺详细的。
谢谢,数据手册里我已经看明白了,我就是纯粹想了解下 这个算法! 苹果核 发表于 2016-11-1 08:37
谢谢,数据手册里我已经看明白了,我就是纯粹想了解下 这个算法!
这个就跟芯片内部的连接走线有关系了。:P :lol:lol:lol:lol:lol 根据时钟频率和波特率来计算分频系数,然后把分频系数放入对应的两个寄存器里。。。:) 时钟分频了 其实你用寄存器看得更直接 主时钟频率/波特率 比如:16M/9600 =16 000 000/9600=1666 转换成16进制 =0x0682
根据数据手册:BRR2 写入第4位:0 与第1位:2
根据数据手册:BRR1 写入第3位:6 与第2位:8
用寄存器表示就是:BRR2=0x02;BRR1 = 0x68;
页:
[1]
2