当前位置:网站首页 > 技术博客 > 正文

标志位寄存器的作用



下面通过485半双工的通信过程,记录USART串口的几个使能位、标志位。

 

说明:USART_IT_TC 和 USART_IT_RXNE是一个常量,并不代表(TC、RXNE)这两位。

 

一、以发送多个字符为例:

       1. 初始化串口(UE使能位)

由于这个程序非常通用,也比较长。 

注意的一点,初始化中,对UE进行使能; 即USART模块可以被使用。

 

     

 2. 使能(USART)的发送或接收中断位(TCIE、RXNEIE)

通过对485的使能脚的高、低电平的控制,达到串口分别收、发的控制。

 

以上,1-2步,主要是对USART的控制寄存器(CR)的3个使能位进行设置。

 

3. 将需要发送的数据放到USART->DR中,触发中断

当需要发送一组字符时,首先将第一个字符放到USART->DR中,然后开启发送使能中断。

USART就会将该字符发送出去。

 

  4. 发送完1个字节之后,进行入中断服务, 进入中断服务函数USARTx_IRQHandler(TC、RXNE)

当第一个字符被发送完之后,DR(数据寄存器)为空,此时,TC被硬件置位,产生中断。

在中断函数里面,再次调用字符(字节)发送函数,并且清除TC标志位。

不停地触发发送中断,直到所有字符被发送完。    

 

以上3-4步,涉及对状态寄存器(USART_SR)的标志位的操作。

对SR操作的函数: 

        1. USART_ClearITPendingBit(USART2, USART_IT_TC)  //清除待处理的发送完成中断标志位

         2. USART_ClearFlag(USART3,USART_FLAG_TC);      //清除发送完成标志位

          

         3. USART_ClearITPendingBit(USART2, USART_IT_RXNE) //清除待处理的接收完成中断标志位

         4. USART_ClearFlag(USART3,USART_FLAG_ RXNE);    //清除接收完成标志位

注意:1和2 , 3和4的作用完全一样;只是名称不同,在不同场合中应用更加明确。

 

 

二、接收数据的过程,是一样的。只是不需要第3步。

(初始化---使能接收----接收到数据,触发中断---中断服务程序)

 

三、补充一点

有时候,我们会遇到下面的代码:(这个代码和上面的代码不在一个工程里面)

上述代码是通过串口1,发送一串字符,例如: char *s = "hello."

一定要注意: 这里并不需要配置: 

这时因为,上述的发送函数,使用的while(),读取的是 USART->SR中的TC位。

这个TC位,是由硬件置位的。每次发送完1个字符后,硬件自动置位为1.

 

 

  • 上一篇: python环境怎么搭建
  • 下一篇: 破解hash加密
  • 版权声明


    相关文章:

  • python环境怎么搭建2024-12-24 19:30:01
  • azw3阅读器电脑版2024-12-24 19:30:01
  • css选择器的写法2024-12-24 19:30:01
  • 密码学学什么课程2024-12-24 19:30:01
  • 游标sql语句2024-12-24 19:30:01
  • 破解hash加密2024-12-24 19:30:01
  • iframe标签是什么2024-12-24 19:30:01
  • 左公子66微博2024-12-24 19:30:01
  • 苏联t100轻坦2024-12-24 19:30:01
  • ftl202024-12-24 19:30:01