STM32 串口固件库中定义的几个中断标志什么意思?

发布者:TranquilBreeze最新更新时间:2018-06-09 来源: eefocus关键字:STM32  串口固件库  中断标志 手机看文章 扫描二维码
随时随地手机看文章

#define USART_IT_PE                       ((uint16_t)0x0028)

#define USART_IT_TXE                      ((uint16_t)0x0727)

#define USART_IT_TC                       ((uint16_t)0x0626)

#define USART_IT_RXNE                     ((uint16_t)0x0525)

#define USART_IT_IDLE                     ((uint16_t)0x0424)

#define USART_IT_LBD                      ((uint16_t)0x0846)

#define USART_IT_CTS                      ((uint16_t)0x096A)

#define USART_IT_ERR                      ((uint16_t)0x0060)

#define USART_IT_ORE                      ((uint16_t)0x0360)

#define USART_IT_NE                       ((uint16_t)0x0260)

#define USART_IT_FE                       ((uint16_t)0x0160)


可见,在stm32f10x_usart.h中宏定义的以上几个宏,很没有规律,咋一看还真不知道为什么会这么定义,其实通过代码就很容易明白:

D7~D5:代表中断标志位对应的中断使能位在 CR1、CR2还是CR3寄存器中

D4~D0:代表中断标志位对应的中断使能位在CRx寄存器的哪一位

D15~D8:代表中断标志位在SR寄存器中的哪一位

上面我们仅仅是给出了这个结论,其实仅仅是看上面的几行宏定义是看不出来各位代表什么意思的,只有从代码中推理出来,下面给出stm32f10x_usart.c中USART_GetITStatus函数的实现就可以推理出上面为什么将上面的那几个宏定义成那种形式了!

/**

  * @brief Checks whether the specified USART interrupt has occurred or not.

  * @param USARTx: Select the USART or the UART peripheral.

  * This parameter can be one of the following values:

  * USART1, USART2, USART3, UART4 or UART5.

  * @param USART_IT: specifies the USART interrupt source to check.

  * This parameter can be one of the following values:

  * @arg USART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)

  * @arg USART_IT_LBD: LIN Break detection interrupt

  * @arg USART_IT_TXE: Tansmit Data Register empty interrupt

  * @arg USART_IT_TC: Transmission complete interrupt

  * @arg USART_IT_RXNE: Receive Data register not empty interrupt

  * @arg USART_IT_IDLE: Idle line detection interrupt

  * @arg USART_IT_ORE: OverRun Error interrupt

  * @arg USART_IT_NE: Noise Error interrupt

  * @arg USART_IT_FE: Framing Error interrupt

  * @arg USART_IT_PE: Parity Error interrupt

  * @retval The new state of USART_IT (SET or RESET).

  */

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)

{

  uint32_t bitpos = 0x00, itmask = 0x00, usartreg = 0x00;

  ITStatus bitstatus = RESET;

  /* Check the parameters */

  assert_param(IS_USART_ALL_PERIPH(USARTx));

  assert_param(IS_USART_GET_IT(USART_IT));

  /* The CTS interrupt is not available for UART4 and UART5 */

  if (USART_IT == USART_IT_CTS)

  {

    assert_param(IS_USART_123_PERIPH(USARTx));

  }

 

  /* Get the USART register index */

  usartreg = (((uint8_t)USART_IT) >> 0x05);     //由此可见D7~D5:代表中断标志位对应的中断使能位在 CR1、CR2还是CR3寄存器中

  /* Get the interrupt position */

  itmask = USART_IT & IT_Mask;

  itmask = (uint32_t)0x01 << itmask;    //由此可见D4~D0:代表中断标志位对应的中断使能位在CRx寄存器的哪一位

 

  if (usartreg == 0x01) /* The IT is in CR1 register */

  {

    itmask &= USARTx->CR1;

  }

  else if (usartreg == 0x02) /* The IT is in CR2 register */

  {

    itmask &= USARTx->CR2;

  }

  else /* The IT is in CR3 register */

  {

    itmask &= USARTx->CR3;

  }

 

  bitpos = USART_IT >> 0x08;    //由此可见D15~D8:代表中断标志位在SR寄存器中的哪一位

  bitpos = (uint32_t)0x01 << bitpos;

  bitpos &= USARTx->SR;

  if ((itmask != (uint16_t)RESET)&&(bitpos != (uint16_t)RESET))

  {

    bitstatus = SET;

  }

  else

  {

    bitstatus = RESET;

  }

 

  return bitstatus;

}


关键字:STM32  串口固件库  中断标志 引用地址:STM32 串口固件库中定义的几个中断标志什么意思?

上一篇:STM32中发送中断标志位
下一篇:stm32中关于读取状态标志位函数的自我理解

推荐阅读最新更新时间:2024-03-16 16:05

FPGA和STM32的区别是什么 stm32与fpga的优缺点分析
FPGA基本原理和内部结构 一、FPGA原理 FPGA中的基本逻辑单元是CLB模块,一个CLB模块一般包含若干个基本的查找表、寄存器和多路选择器资源,因此FPGA中的逻辑表达式基于LUT的。 FPGA内部的编程信息一般存储在SRAM单元中,因此通常的FPGA都是基于SRAM的,所以掉电后信息会丢失,下次上电需要先配置才能使用。 着重介绍Xilinx FPGA, 二、FPGA产品的速度等级 速度等级一般反映一款芯片的性能,速度等级越高,说明芯片内的逻辑延时和布线延时越小,设计的性能要求也越容易达到,随之付出的成本也越大。 对Xilinx FPGA,速度等级一般有“-1”、“-2”、“-3”等,数字越大,速度等级越高,芯片价钱
[单片机]
FPGA和<font color='red'>STM32</font>的区别是什么 <font color='red'>stm32</font>与fpga的优缺点分析
stm32嵌入式操作系统具有怎样的优缺点
  STM32简单介绍   一、背景   如果你正为项目的处理器而进行艰难的选择:一方面抱怨16位单片机有限的指令和性能,另一方面又抱怨32位处理器的高成本和高功耗,那么,基于 ARM Cortex-M3内核的STM32系列处理器也许能帮你解决这个问题。使你不必在性能、成本、功耗等因素之间做出取舍和折衷。   即使你还没有看完STM32的产品手册,但对于这样一款融合ARM和ST技术的“新生儿”相信你和我一样不会担心这款针对16位MCU应用领域 的32位处理器的性能,但是从工程的角度来讲,除了芯片本身的性能和成本之外,你或许还会考虑到开发工具的成本和广泛度;存储器的种类、规模、性能和容 量;以及各种软件获得的难易,我相信你看完本
[单片机]
<font color='red'>stm32</font>嵌入式操作系统具有怎样的优缺点
STM32串口发送数据第一个字节丢失的解决办法
1.代码 void Uart1SendData(uint8_t Sdata) { while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); USART_SendData(USART1, Sdata); } 2.分析 发送数据前先执行 while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET); 即可解决。
[单片机]
STM32 ADC用DMA方式传输数据出错的解决方法
在ADC高速采集数据时,通过DMA一次性获取大量的转换数据。比如5个通道,一次获取1000组数据。获得1000组数据后再统一处理,然后触发下一次转换。在调试过程中发现获取的通道数据序号出错。经过一番折腾终于调通,程序如下 定义 #define adNum 10000 u16 adsample ; //#define DMA1_Channel4_IRQn_EN 1//DMA 电压采集中断 #ifdef DMA1_Channel4_IRQn_EN #define DMA1_Channel4_IRQn_PreemptionPriority 1 #define DMA1_Channel4_IRQn_SubPriority
[单片机]
stm32程序升级SD卡读取hex文件写入flash
参考文献: 1、了解hex文件: https://wenku.baidu.com/view/930d6583ec3a87c24028c403.html 2、stm32SD卡hex文件升级:看这位博客的【MCU实战经验】+ 通过SD卡升级HEX格式程序(附源码): https://blog.csdn.net/niepangu/article/details/50683754 【MCU实战经验】+ 通过SD卡升级HEX格式程序(附源码) 3、boot与app的切换可以了解一下正点原子的教程: www.openedv.com/posts/list/11494.htm 4、stm32的flash读写和SD卡可以看正点原子的教程 程序步骤
[单片机]
STM32学习体会
学习STM32也有一段时间了,周围的人也在学习这款单片机,感觉它是越来越流行,没办法,功能强大,又便宜,谁不愿意用呢。搞不懂AVR,现在都快被挤兑成诺基亚了,还是死守价格不便宜!没学的就跳过啊,STM32,MSP430都是不错的选择 因为暑假的时候学了MSP430,所以现在学STM32让我感觉很容易就上手了,相比51,主要是初始化更加繁琐了,没办法嘛,功能强大,寄存器就多,多了配置起来就复杂一些。 个人感觉一开始还是走寄存器路线,因为只有学懂了底层的东西才能更好的理解它的功能是怎么实现的,才能从中找出来捷径。以后的话貌似还可以走库函数路线,那样可以大大的缩短开发周期。 几乎所有的单片机开始都是在介绍IO口,但是我感觉在
[单片机]
stm32基础之独立看门狗
stm32基本都内置两种看门狗(另外还有外置的看门狗芯片),窗口看门狗和独立看门狗,两种看门狗的使用方法和应用场景各不相同,今天主要讲讲最常用的独立看门狗(工作这么多年,没见谁用过窗口看门狗,这种估计在时序严格的场合会用上)。 所谓独立(Independent watchdog),就是该看门狗有独立的时钟源供看门狗使用,VIP专属。这样即使程序跑飞,或者主时钟挂掉,照样运行。但是精度嘛,你懂的(VIP用户一般比较飘)。 所谓看门狗,外形虽然不像(一堆电子电路,肯定不像),但行为真的狗,还是一条疯狗。为啥这么说呢? 这只狗一定要在规定以内的时间(这个时间自己设置)喂食,超出一点都不行,否则就咬人(复位整个程序,让你的人生重新
[单片机]
<font color='red'>stm32</font>基础之独立看门狗
STM32单片机中断详解
中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。 1 EXTI控制器 外部中断/事件控制器(EXTI)管理了控制器的 23 个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 外部信号进入经过1的边沿检测电路,检测是否符合(有2和3的上升沿和下降沿选择寄存器决定),产生信号,然后和4软件
[单片机]
<font color='red'>STM32</font>单片机<font color='red'>中断</font>详解
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved