请问串口波特率计算DIV_Fraction为什么要把小数*16?

2019-07-14 17:48发布

问题如下
1、如下图,串口波特率计算这里,为什么计算DIV_Fraction时,需要把小数*16啊?以前我就按部就班这么做了,原因一直没想清楚。

2、STM32 的外部中断 0~4 都有单独的中断服务函数,但是外部中断 5~9、10~15都是共用一个,比如,void EXTI9_5_IRQHandler(void),
那么怎么区分到底是哪个中断啊?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
ke3978
1楼-- · 2019-07-15 00:11
1,UART有个专用定时器产生波特率。应该是72M的1/16具体可以看看手册。2,中断公用可以根据标志判断是哪个中断。这个问题不大。
Jaionm
2楼-- · 2019-07-15 05:09
tianyou15 发表于 2018-9-13 15:31
1、16进制的取小数部分,所以除以16(分母乘以16);
2、可以判断相应IO口状态,(好像也可以通过 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) 来判断)

汗,这个是中断,判断端口没用的吧。
wq644921241
3楼-- · 2019-07-15 06:24
本帖最后由 netlhx 于 2015-2-5 12:07 编辑

1. 这个是UART以16倍速采样信息,能减少误差,硬件实现的,按部就班就好
2. 需要在中断函数里面检测中断源,根据中断源执行相应操作,具体可以检测EXTI->PR寄存器来判断
hal库里有这样一个宏定义,供参考:
jasonzhang_001
4楼-- · 2019-07-15 06:32
1、乘以16是为了便于将小数存储在寄存器中
2、可以读取每隔IO的中断标志位


jasonzhang_001
5楼-- · 2019-07-15 10:10
 精彩回答 2  元偷偷看……
tianyou15
6楼-- · 2019-07-15 15:12
Jaionm 发表于 2018-9-13 15:52
汗,这个是中断,判断端口没用的吧。

判断IO口在部分场合还是有用的,比如下降沿中断,可以在进中断后判断该端口是否为低电平;另外,还可以通过获取端口的中断状态来实现

一周热门 更多>