关于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; |
初次接触STM8,请问在STVD中,为什么这个Struct会报错
STMS005K6T6 如何采集内部参考电压。
stm8s003 adc中断和通道切换的问题
adc施密特触发器stm8
stm8l051f3 TSSOP20 封装,待机模式下,2天后,电流突然增加到140UA
STM8S用STVP烧录怎么加密?
如何使用ST官网例程_LIN总线通讯_STM8AF
STM8 LIN
IAR代码编辑太费劲了,想问一下有没有好的方法,试了VScode但是头文件老是报错,调了很久也没调好,想换个方法了。
想问一下各位大佬,IAR下载调试代码时出现 warning: is an illegal data sample expression IAR是什么意思啊?
谢谢,数据手册里我已经看明白了,我就是纯粹想了解下 这个算法!
这个就跟芯片内部的连接走线有关系了。
评分
查看全部评分
评分
查看全部评分
根据数据手册:BRR2 写入第4位:0 与第1位:2
根据数据手册:BRR1 写入第3位:6 与第2位:8
用寄存器表示就是:BRR2=0x02;BRR1 = 0x68;
评分
查看全部评分
BaudRate_Mantissa = ((uint32_t)CLK_GetClockFreq() / (BaudRate << 4));
这个计算出: BaudRate_Mantissa = 主时钟/(波特率*16) 当于 主时钟/波特率 右移4位
(16M/9600*16)=104=0x68;
BaudRate_Mantissa100 = (((uint32_t)CLK_GetClockFreq() * 100) / (BaudRate << 4));
BaudRate_Mantissa100 = 主时钟*1000/(波特率/16) 当于 主时钟/波特率 扩大1000 右移4位
16M*1000/(9600*16)=104166=0x196E6
UART1->BRR2 |= (uint8_t)((uint8_t)(((BaudRate_Mantissa100 - (BaudRate_Mantissa * 100)) << 4) / 100) & (uint8_t)0x0F);
UART1->BRR2 |=((104166-(104*100))/16)/100) &0x0F =0x3A*0x0f=0x02
也就是第1位
/* Set the MSB mantissa of UART1DIV */
UART1->BRR2 |= (uint8_t)((BaudRate_Mantissa >> 4) & (uint8_t)0xF0);
UART1->BRR2 |=0x68/16 &0xF0 =0;
就是BBR2第4位:
UART1->BRR2=0x02
/* Set the LSB mantissa of UART1DIV */
UART1->BRR1 |= (uint8_t)BaudRate_Mantissa; 得到第3、2位
UART1->BRR1=0x68;
终上所讲算得来的就是
BRR2=0x02;BRR1 = 0x68;