关于串口波特率 & EXTI的问题
问题如下1、如下图,串口波特率计算这里,为什么计算DIV_Fraction时,需要把小数*16啊?以前我就按部就班这么做了,原因一直没想清楚。
2、STM32 的外部中断 0~4 都有单独的中断服务函数,但是外部中断 5~9、10~15都是共用一个,比如,void EXTI9_5_IRQHandler(void),
那么怎么区分到底是哪个中断啊?
1、16进制的取小数部分,所以除以16(分母乘以16);
2、可以判断相应IO口状态,(好像也可以通过 ITStatus EXTI_GetITStatus(uint32_t EXTI_Line) 来判断) 1,UART有个专用定时器产生波特率。应该是72M的1/16具体可以看看手册。2,中断公用可以根据标志判断是哪个中断。这个问题不大。
dsjsjf 发表于 2015-2-4 20:08
1、16进制的取小数部分,所以除以16(分母乘以16);
2、可以判断相应IO口状态,(好像也可以通过 ITStatus...
汗,这个是中断,判断端口没用的吧。 本帖最后由 netlhx 于 2015-2-5 12:07 编辑
1. 这个是UART以16倍速采样信息,能减少误差,硬件实现的,按部就班就好
2. 需要在中断函数里面检测中断源,根据中断源执行相应操作,具体可以检测EXTI->PR寄存器来判断
hal库里有这样一个宏定义,供参考:
#define __HAL_GPIO_EXTI_GET_IT(__EXTI_LINE__) (EXTI->PR & (__EXTI_LINE__))
1、乘以16是为了便于将小数存储在寄存器中
2、可以读取每隔IO的中断标志位
https://www.stmcu.org.cn/module/forum/data/attachment/forum/201501/31/123007lmpip39339gau91s.jpg _ilikerome_ 发表于 2015-2-5 11:45
汗,这个是中断,判断端口没用的吧。
怎么没有用,5-9虽然占用的同一个中断向量,但是每个端口还是有自己的中断标志的
https://www.stmcu.org.cn/module/forum/data/attachment/forum/201501/31/123007lmpip39339gau91s.jpg _ilikerome_ 发表于 2015-2-5 11:45
汗,这个是中断,判断端口没用的吧。
判断IO口在部分场合还是有用的,比如下降沿中断,可以在进中断后判断该端口是否为低电平;另外,还可以通过获取端口的中断状态来实现 dsjsjf 发表于 2015-2-5 15:24
判断IO口在部分场合还是有用的,比如下降沿中断,可以在进中断后判断该端口是否为低电平;另外,还可以通 ...
大体明白了 _ilikerome_ 发表于 2015-2-5 21:28
大体明白了
希望早点实现代码
页:
[1]