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 串口固件库中定义的几个中断标志什么意思?相关推荐
- 结构体在固件库中的应用
上次介绍了一般结构体的定义以及引用方法,那么接下来将对结构体在官方固件库是如何具体使用的做出简单说明. 结构体指针成员变量引用方法是通过"→"符号来实现,比如要访问student1 ...
- STM32官方固件库
1 基于标准外设库的软件开发 1.1 STM32标准外设库概述 STM32标准外设库之前的版本也称固件函数库或简称固件库,是一个固件函数包,它由程序.数据结构和宏组成,包括了微控制器所有外设的性能特征 ...
- #STM32标准固件库的硬件SPI(NSS为软件)封装函数库
#基于STM32标准固件库的硬件SPI(NSS为软件)封装函数库: 最近来回顾之前写过的SPI_Flash,打算重写一次SPI配置文件 spi协议最大的特点大概就是全双工了,因此stm32硬件spi的 ...
- STM32基于固件库学习笔记(11)RTC实时时钟
实时时钟(RTC) 小容量产品是指闪存存储器容量在16K至32K字节之间的STM32F101xx.STM32F102xx和STM32F103xx微控制器. 中容量产品是指闪存存储器容量在64K至128 ...
- STM32官方固件库代码解读--GPIO
最近闲得无聊,又把 stm32 拿了出来.之前学的时候是看的库函数版本,现在和寄存器版本的一起看感觉比一开始接触的时候看得顺畅多了,详细了解了底层寄存器的功能.之前用 stm32 只是调用函数,看了寄 ...
- STM32之固件库的调用(参考洋桃电子视频)
STM32固件库中有许多函数,每个函数代表着不同的意义. 在工程中,后缀为.s的是汇编语言编写的文件,后缀为.c的是C语言编写的文件. 在整个工程中,只有Startup中的startup_stmf10 ...
- STM32基于固件库学习笔记(4)(通用定时器)TIM3定时1S中断
STM32F103ZE系列定时器资源 有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器. 通用定时器:是一个通过可 ...
- STM32建立固件库小结
最近在复习固件库的使用,顺便写一下当作日记方便复习 1.找到固件库模板下载(已经上传) 2.新设置文件夹将模板里面的内容cv进去 3.打开keil,点击project建立new uvision pro ...
- 【STM32】获取STM32官方固件库
以STM32F103ZET6为例: 第一步:进入ST官网 http://www.st.com/content/st_com/en.html 第二步:搜索需要下载固件库芯片型号,例如: 第三步:找到对 ...
最新文章
- javascript中的constructor
- 案例实作图解Asp.Net MVC教程
- C++学习 优雅的实现对象到文件的序列化/反序列化 关键字serialize
- matlab记录路径,matlab对文件目录路径的操作
- linux vi 编辑命令
- Centos7下基于Pseudo-Distributed的Hadoop环境搭建
- 基于IAR for RH850的瑞萨RH850 FCL库用法介绍(二)
- 企业无线产品认证好吗
- MP3音频文件转换成caf格式
- Linux系统下常用的中文输入法
- java多文件代码在线运行网站
- Visual Studio Code下c语言环境的安装与运行
- PhotoShop: PSD精准切图
- 基于网络爬虫的新闻实时监测分析可视化系统(Java+MySQL+Web+Eclipse)
- alpine的介绍与使用
- 跟小丸子学基础口语21-25
- 升级WIFI6路由器,笔记本电脑找不到WIFI
- 陆军步兵学院文职面试计算机,2018军队文职文职面试试题回忆版(2018年第二号)...
- 小码哥iOS--玩转【斗鱼直播APP】系列之直播总体概览
- HDFS分布式文件系统具有哪些优点?
热门文章
- [转帖]紫光与群联联盟,长江存储NAND+群联主控+紫光品牌SSD可期
- 学习UI设计需要什么样的电脑配置?
- 基于微信小程序的新闻发布系统
- 3-20 附: DSL搜索 - 排序
- Android开发模拟测试题
- 企业内部钉钉H5微应用(免登录)Spring Boot项目实战
- 写了两个月的黑白棋对战程序,发现早就有了GGS,互联网上的游戏。
- 【100个 Unity实用技能】☀️ | 修改Unity UI控件中默认字体配置
- adb命令截屏和录屏
- matlab有仿真小灯泡吗,基于Matlab电力变压器励磁涌流的分析和仿真