STM32固件库中提供了串口收发的标志位函数,包括USART_GetFlagStatus(…,…);和USART_GetITStatus(…,…);,两者容易混淆,重点区别就在于:前者返回值是中断标志位状态(读SR寄存器),后者返回值是中断发生与否的判断(读CR寄存器),以下主要对这两个函数进行分析。 一、USART_GETFlagStatus(…,…) 20FlagStatus USART...
都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启,也会返回false。 ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint32_t USART_IT) 该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。所以在串口中断函数中,如果要获取中断标志位,通常使用该函数。
一、ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)在判断相应位是否置1(读SR寄存器)前会先判断相应位的中断是否使能(读CR寄存器)。所以若使用 while(USART_GetITStatus(USART1,USART_IT_TC) != SET); 来进行判断数据是否发送完成,注意需使能TC中断 U... ...
在困惑中稍微看了下源码,原来它们都操作SR,但GetITStatus还有额外的对几个CR的访问。经过反复单步调试,发现其访问CR就是为了看几个中断源的使能情况,于是恍然大悟,原来这俩函数的区别也就在于是否开启了标志位对应的中断,可以说有些情况下可以互换,而有些情况下就要通过搭配其他操作才能替换,最好根据需要选择配套的...
建议你去看库函数的源代码。都是些状态标志位,这里简单讲下,IT主要就是与中断相关的,检查USART中断产生与否,当USART发送完成后会有USART_IT_TC中断,因此可以用来判断,而USART_GetFlagStatus是USART标志位设置与否,其中就有发送完成标志位USART_Flag_TC所以也可用来判断。而最终都是操作SR寄存器 ...
声明: 本网站大部分资源来源于用户创建编辑,上传,机构合作,自有兼职答题团队,如有侵犯了你的权益,请发送邮箱到feedback@deepthink.net.cn 本网站将在三个工作日内移除相关内容,刷刷题对内容所造成的任何后果不承担法律上的任何义务或责任
作用:前者发送数据到串口,后者从串口接收数据。4个状态位函数 FlagStatus USART_GetFlagStatus(USART_...
USART_GetITStatus函数与USART_GetFlagStatus函数类似用来获取标志位状态,但USART_GetITStatus函数是专门用来获取中断事件标志的, 并返回该标志位状态。使用if语句来判断是否是真的产生USART数据接收这个中断事件, 如果是真的就使用USART数据读取函数USART_ReceiveData读取数据到指定存储区。 然后再调用USART数据发送函数USART...
USART_GetITStatus USART_ReceiveData时不能加断点 如果USART_ReceiveData加断点的话,会导致一次中断丢失造成程序出错。 断点后程序依然正常运行 但是如果将133行断点去掉,就会出错。另外两者之间也不能加断点。 同事经验:调用的库函数的一般不要加,特别是对时序有要求的函数。此处产生了溢出错误,并进入溢出中断(ORE...