USART_ClearITPendingBith和 USART_ClearFlag的区别

2023-05-16

一个是清除标志,判断中断是否处理完。 一个是清除中断标志位,根据标志位来执行相应的中断函数。 一个是在入口(是否触发某个中断),一个是在出口(是否完成某个中断)

起初

stm32 v3.5 库函数里面,对于串口USART有这样两个函数:
�0�2 �0�2 �0�2 �0�2 �0�2 �0�2 �0�2 �0�2 USART_ClearFlag()和USART_ClearITPendingBit()


查库函数定义,说一个是清除标志,一个是清除中断预处理位。然后我看了stm32f10x_usart.c文件,发现两个函数都操作的是USART->SR寄存器,但是这个寄存器只有一组标志位,没有什么中断预处理位。。

实际上两个函数实现的功能是一样的,都是清除相对应的标志位,只是标志位和中断位含义不一样,是标志位但
是不一定会产生中断。例如:
#define USART_IT_TXE                         ((uint16_t)0x0727)
#define USART_IT_TC                          ((uint16_t)0x0626)
#define USART_IT_RXNE                        ((uint16_t)0x0525)
这是中断位,可以产生中断

#define USART_FLAG_TXE                       ((uint16_t)0x0080)
#define USART_FLAG_TC                        ((uint16_t)0x0040)
#define USART_FLAG_RXNE                      ((uint16_t)0x0020)
这是标志位,有的标志位不能产生中断

标志位在程序中可以作为判定条件,支持程序的运行,中断则是跳转到中断函数执行。两个函数实现的功能是一
样的,在中断程序中可以用两个中的任一个。我想区分两个函数是为了更清晰吧。
还有
#define USART_IT_TC                          ((uint16_t)0x0626)
#define USART_FLAG_TC                        ((uint16_t)0x0040)

这两个数值不同是因为标志位只是为了清除标志位而设的,而中断位设置成这个值是因为在其他函数中这一位还
有其他用途。而且还要注意:
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
  assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */   
   
  USARTx->SR = (uint16_t)~USART_FLAG;
}

 这一步 USARTx->SR = (uint16_t)~USART_FLAG; 似乎应该是  USARTx->SR &= (uint16_t)~USART_FLAG;
其实状态位只能有硬件置位,软件只能读和清零,所以这样写也是正确的

没有很明白,所以转在这里,等我哪天灵光乍现了,再来加上我的理解
上面的内容是别人的,我略作修改,下面的内容是我原创。不知道本文到底是属于原创还是转载,但是......我的更简洁、精辟

�0�2-----------------------------------------------------------------------------------------------------------------------

灵光乍现了

我是在使用TC的时候遇见这个问题的,所以这里就只分析TC这个位

先研究简单点的USART_ClearFlag函数

//调用形式
USART_ClearFlag(USART3,USART_FLAG_TC);

//USART_FLAG_TC的定义
#define USART_FLAG_TC               ((uint16_t)0x0040)

//USART_ClearFlag函数的原型
void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG)
{
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CLEAR_FLAG(USART_FLAG));
  assert_param(IS_USART_PERIPH_FLAG(USARTx, USART_FLAG)); /* The CTS flag is not available for UART4 and UART5 */   
   
  USARTx->SR = (uint16_t)~USART_FLAG;
}

一目了然,最后USARTx->SR = ~(0100'0000);

再来研究复杂点的USART_ClearITPendingBit函数(注意,这两个函数的第二个参数,是不一样的

//调用形式
USART_ClearITPendingBit(USART3,USART_IT_TC);

//USART_IT_TC的定义
#define USART_IT_TC           ((uint16_t)0x0626)//=0000'0110'0010'0110

//USART_ClearITPendingBit的函数原型
void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT)
{
  uint16_t bitpos = 0x00, itmask = 0x00;
  /* Check the parameters */
  assert_param(IS_USART_ALL_PERIPH(USARTx));
  assert_param(IS_USART_CLEAR_IT(USART_IT));
  assert_param(IS_USART_PERIPH_IT(USARTx, USART_IT)); /* The CTS interrupt is not available for UART4 and UART5 */
  
  bitpos = USART_IT >> 0x08;                     //=0000'0110
  itmask = (uint16_t)((uint16_t)0x01 << bitpos); //=0100'0000
  USARTx->SR = (uint16_t)~itmask;                //=~(0100'0000)
}

可以看到最后还是USARTx->SR=~(0100'0000);

对比一下USART_ClearFlag和USART_ClearITPendingBit的参数

USART_ClearFlag的参数USART_ClearITPendingBit的参数
USART_FLAG_CTS �0�2 �0�2=�0�20x0200USART_IT_CTS�0�2 �0�2=�0�20x096A
USART_FLAG_LBD �0�2 �0�2=�0�20x0100USART_IT_LBD�0�2 �0�2 =�0�20x0846
USART_FLAG_TC �0�2 �0�2 �0�2=�0�20x0040USART_IT_TC�0�2 �0�2 �0�2 =�0�20x0626
USART_FLAG_RXNE =�0�20x0020USART_IT_RXNE =�0�20x0525

这里可以发现一个规律USART_ClearFlag参数只有一个位是“1”,其位置正好等于USART_ClearITPendingBit的参数左移八位后的结果,所以这里可以非常非常肯定的讲:函数USART_ClearFlag和函数USART_ClearITPendingBit的功能totally一样

----------------------------------------------------------------------------------------------------------------------------

涉及内容扩展:

STM32的USART发送数据时如何使用TXE和TC标志

�0�2 �0�2 �0�2在USART的发送端有2个寄存器,一个是程序可以看到的寄存器——发送数据寄存器(通过USART_DR查看),另一个是程序看不到的寄存器——发送移位寄存器,对应的有两个USART数据发送标志,一个是TXE=发送数据寄存器空,另一个是TC=发送移位寄存器空。

(这粗箭头和这细箭头,简直不要太形象哦,粗箭头是八位八位的传,细箭头是一位一位的传)

�0�2 �0�2 当USART_DR中的数据传送到移位寄存器后,TXE被设置,此时移位寄存器开始向TX信号线按位传输数据,但因为TDR已经变空,所以程序可以把下一个要发送的字节(操作USART_DR)写入TDR中,而不必等到移位寄存器中所有位发送结束,所有位发送结束时(送出停止位后)硬件会设置TC标志。

  另一方面,在刚刚初始化好USART还没有发送任何数据时,也会有TXE标志,因为这时发送数据寄存器是空的。TXEIE和TCIE的意义很简单,TXEIE允许在TXE标志为'1'时产生中断,而TCIE允许在TC标志为'1'时产生中断。

  至于什么时候使用哪个标志,需要根据你的需要自己决定。但我认为TXE允许程序有更充裕的时间填写TDR寄存器,保证发送的数据流不间断。TC可以让程序知道发送结束的确切时间,有利于程序控制外部数据流的时序。

�0�2

位7

TXE:发送数据寄存器空 (Transmit data register empty)

当TDR寄存器中的数据被硬件转移到移位寄存器的时候,该位被硬件置位。如果USART_CR1寄存器中的TXEIE为1,则产生中断。对USART_DR的写操作,将该位清零。

0:数据还没有被转移到移位寄存器;
1:数据已经被转移到移位寄存器。
注意:单缓冲器传输中使用该位。
位6

TC:发送完成 (Transmission complete)

当包含有数据的一帧发送完成后,并且TXE=1时,由硬件将该位置’1’。如果USART_CR1中的TCIE为’1’,则产生中断。由软件序列清除该位(先读USART_SR,然后写入USART_DR)。 TC位也可以通过写入’0’来清除,只有在多缓存通讯中才推荐这种清除程序。

0:发送还未完成;
1:发送完成
位5RXNE:读数据寄存器非空 (Read data register not empty)
当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果USART_CR1寄存器中的RXNEIE为1,则产生中断。对USART_DR的读操作可以将该位清零。 RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。
0:数据没有收到;
1:收到数据,可以读出。

三种发送方法

1、不开发送完成中断:

/*******************************************************************************
* 函数名  : UART1_SendString
* 描述    : USART1发送字符串
* 输入    : *s字符串指针
* 注释    :0==RESET,表示发送还未完成
USART_FLAG_TC!=RESET,就是=SET,表示发送完成,此时执行USART_GetFlagStatus会把USART_FLAG_TC清零(未证实)
*******************************************************************************/
void UART1_SendString(u8* s)
{
  while(*s)//检测字符串结束符
  {
   //USART_FLAG_TC==RESET时,表示发送还未完成。
    while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET); 
    USART_SendData(USART1 ,*s++);//发送当前字符
  }
}

2、开中断,额外设置一个标志:

u8 FLAG_TC=0;//定义全局变量
/*******************************************************************************
* 函数名  : UART1_SendString
* 描述    : USART1发送字符串
* 输入    : *s字符串指针
*******************************************************************************/
void UART1_SendString(char* s)
{
  FLAG_TC=0;//提前准备一下
  while(*s)//检测字符串结束符
  {
    USART_SendData(USART1 ,*s++);//发送当前字符
    while( FLAG_TC==0);	//0:发送还未完成;1:发送完成
    FLAG_TC=0;
  }
}


void USART1_IRQHandler(void)
{
  if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)//发送完成中断,= SET
  {
    USART_ClearITPendingBit(USART1,USART_IT_TC);
    FLAG_TC=1;
  }
}

�0�2

开中断时,就不能通过简单的判断标志位USART_FLAG_TC的状态去决定能否发送下一个字符。比方说,使用�0�2

while(*s)
{

�0�2 �0�2USART_SendData(USART1 ,*s++);//发送字符

�0�2 �0�2while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);�0�2

�0�2 �0�2...
}

执行完发送字符的语句后,因为不可能这么快完成发送,所以程序接下来执行的是while语句。在等待期间,字符发送完毕,这时就会进入到中断,如果在中断里清除标志位,退出中断后,标志位USART_FLAG_TC仍然是RESET;如果不在中断里清除标志位,就不能退出中断。所以程序就会死在while里。

所以这里就需要额外设置一个标志。

3、开中断,数据发送由函数启动,在中断里完成:

//定义全局变量。也可以为了简化,把这四个参数结合起来包含在一个结构体里
u8 TxLength;   //发送数据长度
u8 TxIndicator;//发送指示器,表示目前发送完成哪一位了,下面要发送的是第(TxIndicator+1)位
u8 TxBuff[256];//Data 
u8 TxFnd;      //发送完成标志
     
/*************************************************************************
*程序名称    :   SendFirstByte
*功能        :   启动发送第一个字节
*@Notes     :   鸡贼啊,剩下的都放在USART_FLAG_TC中断里面,因为这个中断是
                 发送完成中断,是利用“发送第一个字节”来“启动发送”
*@Notes     :   需要注意,如果发送结果是乱码的话,一种供参考的解决方案是
                把数据直接赋值给TxBuff,而不要通过函数的形参传递
*输入参数    :   u8 txbuf[]: 需要发送的数据,u8 len : 数据中的字节数
*返回值      :   无
*************************************************************************/
void SendFirstByte( u8 txbuf[], u8 len )
{
	TxBuff      = txbuf;//需要发送的数据
	TxLength    = len  ;//发送数据长度
	TxIndicator = 1    ;//0已经发送,也是用来启动发送的

	USART_SendData(USART1, txbuf[0]);  /**@Notes:只发送了txbuf的第一个字节*/
}

/*************************************************************************
*程序名称    :   USART1_IRQHandler
*功能        :   完成发送数据   
*************************************************************************/
void USART1_IRQHandler(void)
{
	if (USART_GetITStatus(USART1, USART_IT_TC) != RESET)
	{
		USART_ClearITPendingBit(USART1,USART_IT_TC);
		if( TxIndicator < TxLength  )//数组的索引max永远小于数组元素的个数
		{
			USART_SendData(USART1, TxBuff[TxIndicator++]);
		}
		else//最后一字节数据发送完成
		{
			TxFnd = 0;
			TxIndicator = 0;
		}
	}
}

USART收发过程中常遇问题总结:

Q:为什么使用USART发送一串字符,最后自接收到了最后一个?

A:是因为发送的间隔太短了,可以在发送每个字符之前先判断一下上一个字符是否发送完成,可以参考上面的“三种发送方法”

Q:为什么使用USART发送一串字符,有时候接收不到第一个字符,有时候又可以接收得到?

A:解决方案是把判断能否发送的语句放在发送数据之前

功德圆满

这下算是功德圆满了吧

USART_ClearITPendingBith和 USART_ClearFlag的区别_飞由于度的博客-CSDN博客_usart_clearflag

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

USART_ClearITPendingBith和 USART_ClearFlag的区别 的相关文章

  • 树莓派3 B+ 的串口(USART)使用问题 (也是用C写的)

    这个也是用C写的 摘自 xff1a https www cnblogs com uestc mm p 7204429 html 树莓派3 B 43 的串口 xff08 USART xff09 使用问题 转载 xff1a http ukonl
  • 笔记(STM32篇)day12——USART串口介绍、串口初始化结构体

    目录 一 USART介绍 1 USART简介 2 USART功能框图 二 串口初始化结构体 参考 一 USART介绍 1 USART简介 通用同步异步收发器 Universal Synchronous Asynchronous Receiv
  • STM32库USART_ITConfig的坑

    USART ITConfig只能使用一个中断标志 xff01 看看中断参数的定义 xff1a define USART IT PE uint16 t 0x0028 define USART IT TXE uint16 t 0x0727 de
  • STM32串口读取一帧数据USART_IT_IDLE

    stm32 串口读取数据中断 USART IT RXNE xff1a 读取到一个数据产生中断USART IT IDLE xff1a 读取到一帧数据产生中断 以前串口读取一帧数据的方法 xff1a 收到数据后重置定时器的值 xff0c 等到定
  • 第20章 USART—串口通讯—零死角玩转STM32-F429系列

    第20章 USART 串口通讯 全套 200 集视频教程和 1000 页 PDF 教程请到秉火论坛下载 xff1a www firebbs cn 野火视频教程优酷观看网址 xff1a http i youku com firege 本章参考
  • 串口应用(USART)

    串行口应用 1 USART介绍 通用同步异步收发器 USART 提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的 外部设备之间进行全双工数据交换 USART利用分数波特率发生器提供宽范围的波特率选择 它支持同步单向通信和半双工单线
  • STM32F103RCTX 串口USART 不定长接收

    串口不定长接收的方法有多种 xff0c 这里我所介绍的是通过设置IDLE中断来检测串口是否接收完毕 xff0c 从而结束串口接受中断 1 首先设置串口 xff0c 如下图所示 xff1a 2 使用IDLE中断检测 xff0c 所以需要开启对
  • STM32 USART 一些问题

    SECTION 1 1 2 3 4 5 6 7 8 9 10 11 12 13
  • STM32串口接受和发送数据的程序(USART/UART)

    本实验中 STM32通过串口1和串口2上位机对话 xff0c STM32通过串口1在收到上位机发过来的字符串 以回车换行结束 后 xff0c 通过串口2原原本本的返回给上位机 串口 xff08 USART UART xff09 通信配置详解
  • STM32CubeMX串口USART中断发送接收数据

    本文代码使用 HAL 库 文章目录 前言一 中断控制二 USART中断使用1 中断优先级设置 xff1a 2 使能中断3 使能UART的发送 接收中断4 中断收发函数5 中断处理函数6 中断收发回调函数 三 串口中断实验串口中断发送数据点亮
  • usart串口发送与接收问题

    项目场景 xff1a 串口通信可以说很常用的一种通信方式 xff0c 例如 蓝牙通信 openmv 与串口 通信 等等 问题描述 1 我们在进行数据传输过程中数据不时出现丢失的情况 xff0c 偶尔会丢失一部分数据 xff0c 导致数据部分
  • STM32F30X USART串口初始化顺序

    void InitUart void GPIO InitTypeDef GPIO InitStructure if 1 USART USED 61 61 USART1 RCC AHBPeriphClockCmd RCC AHBPeriph
  • STM32学习--USART

    串口工作方式 1 查询 xff1a 串口程序不断循环查询 xff0c 看看有没有数据需要它发送 2 中断 xff1a 平时串口只要打开中断即可 如果有中断来即需要传输数据 xff0c 它就马上进行数据的传输 STM32编程 xff1a 1
  • 串口通讯(USART)

    对于通讯协议 xff0c 我们也以分层的方式来理解 xff0c 最基本的是把它分为物理层和协议层 物理层规定通讯系统中具有机械 电子功能部分的特性 xff0c 确保原始数据在物理媒体的传输 协议层主要规定通讯逻辑 xff0c 统一收发双方的
  • USART_ClearITPendingBith和 USART_ClearFlag的区别

    一个是清除标志 xff0c 判断中断是否处理完 一个是清除中断标志位 xff0c 根据标志位来执行相应的中断函数 一个是在入口 xff08 是否触发某个中断 xff09 xff0c 一个是在出口 xff08 是否完成某个中断 xff09 起
  • STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

    目录 一 串口通信1 1通信接口1 2串口通信1 2 1简介1 2 2硬件电路1 2 3串口参数及时序 二 STM32的USART外设2 1USART简介2 2USART框图 三 数据传输3 1数据帧3 2输入数据策略3 2 1起始位侦测3
  • STM32使用FIFO实现USART串口发送中断

    fifo就不要造轮子了 xff0c 用现成的就行了 linux内核中有目前人类写出的基于c语言的最强FIFO xff0c 请自行搜索学习 巧夺天工的kfifo xff0c kfifo精妙无比 xff0c 实在是高 xff0c 其中用到的环回
  • 【STM32】HAL库-串口USART

    USART简介 通用同步异步收发器 USART 提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换 USART利用分数波特率发生器提供宽范围的波特率选择 一个波特率寄存器 USART BRR xff0c
  • STM32的USART发送中断标志位USART_IT_TXE和USART_IT_TC

    与STM32的发送中断相关的标志位有USART IT TXE和USART IT TC 根据ST芯片手册的信息可知 USART在发送移位寄存器 Transmit Shift Register 前面 还有一个TDR Transmit data
  • STM32 上的 ADC 单次转换

    我正在研究 STM32 F103x 上的 ADC 编程 并从最简单的情况 单次转换开始 测量内部温度传感器 连接到 ADC1 的值 并使用 USART 将其发送到 COM 端口 目标似乎很明确 但是当我尝试将源代码下载到闪存时 它不会向 C

随机推荐

  • php curl请求信息和返回信息设置代码实例

    在用curl抓取网页内容的时候 xff0c 经常要知道 xff0c 网页返回的请求头信息 xff0c 和请求的相关信息 xff0c 特别是在请求过程中存在重定向的时候获取请求返回头信息对分析请求内容很有帮助 下面就是一个请求中存在重定向的例
  • URL特殊字符转义

    问题描述 xff1a 在工作中 xff0c 因为需要将另外一个系统的一批产品转移到自己系统 xff0c 产品基础资料什么的 xff0c 都没问题 xff0c 直接给字段插入数据库就好 xff0c 但是遇到了图片的问题 xff0c 图片是在别
  • PHP中GET/POST方法参数传递空格+逗号等特殊字符处理办法

    自己在项目开发中写了个自用接口 xff0c 用GET方法传参 xff08 用户名和密码 xff09 最近收到用户反馈 xff1a 密码为特殊字符时会出错 我一开始想是不是php的mysql real escape string函数将特殊字符
  • canvas 背景透明

    theCanvas 61 document getElementById 39 canvasOne 39 var context 61 theCanvas getContext 39 2d 39 context fillStyle 61 3
  • Http压力测试工具HttpTest4Net

    HttpTest4Net是一款基于C 实现的和HTTP压力测试工具 通过工具可以简单地对HTTP服务进行一个压力测试 虽然VS NET也集成了压力测试项目 但由于VS自身占用的资源导致了在配置不高的PC上难以做到高并发压力测试 再加上需要装
  • PHP获取今天、昨天、明天的日期

    php view plain copy lt php echo 34 今天 34 date 34 Y m d 34 34 lt br gt 34 echo 34 昨天 34 date 34 Y m d 34 strtotime 34 1 d
  • Http协议与TCP协议简单理解

    https blog csdn net sundacheng1989 article details 28239711 在C 编写代码 xff0c 很多时候会遇到Http协议或者TCP协议 xff0c 这里做一个简单的理解 TCP协议对应于
  • LINUX重启MYSQL的命令

    LINUX重启MYSQL的命令 标签 xff1a mysqllinuxservice脚本web服务server 2010 06 25 10 21 62152人阅读 评论 0 收藏 举报 分类 xff1a Linux xff08 6 xff0
  • PHP:curl模拟form表单上传文件

    lt form action 61 34 34 method 61 34 post 34 enctype 61 34 multipart form data 34 gt lt input type 61 34 file 34 name 61
  • HTTP状态码大全

    1 信息类 xff1a 表示接收到请求并且继续处理 100 客户必须继续发出请求 101 客户要求服务器根据请求转换HTTP协议版本 2 响应成功 xff1a 表示动作被成功接收 理解和接受 200 表明该请求被成功地完成 xff0c 所请
  • 如何准备电赛?19年电赛经验总结!

    关注 星标公众号 xff0c 直达精彩内容 写在前面的话 最近忙着各大厂的实习面试 xff0c 趁着准备简历的功夫回顾了一下19年电赛的比赛经历 xff0c 总体来说还算说得过去 现在把我参加电赛的经验分享出来 xff0c 希望对之后的学弟
  • Arduino(5) 使用Mega2560设计上下位机串口通信系统的下位机

    前言 因项目需求 xff0c 我们要从PC端去控制一些外部设备 xff0c 比如激光器 光放大器等 xff0c 这些设备一般使用到的都是低速的串口通信 xff0c 所以我们需要设计一个上下位机串口通信系统来控制这些设备 这篇文章先讲如何使用
  • vue地址去掉 #

    vue router 设置 history 模式 vue 项目往往会搭配 vue router 官方路由管理器 xff0c 它和 vue js 的核心深度集成 xff0c 让构建单页面应用变得易如反掌 vue router 默认为 hash
  • Jetson Nano 入坑之路 ---- (6)GPIO使用(输入输出与回收)

    1 安装 Jetson GPIO 库 Jetson GPIO库 已经预装在Nano xff0c 如果卸载或者丢失 xff0c 就需要自己重新安装一次了 sudo pip install Jetson GPIO sudo pip3 insta
  • Liunx下的Cmake编译C/C++程序方法精要

    前言 我们在很多第三方库中都能够看到CMakeLists txt的身影 这就是我们熟悉的Cmake编译方法所需要的文件 本篇博客就来讲解一下此文件大致需要如何撰写和使用 如果后续有需要 xff0c 会再写个 详解 本例程是笔者项目中所用的内
  • FPGA入门实验-基于状态机实现串口回环收发

    任务目标 基于状态机实现串口回环收发 最近生产实习的FPGA培训课程内容 xff0c 还是挺简单的 具体原理其他文章应该都烂大街了 xff0c 重点是状态机的写法 xff0c 还是很少博主写 xff0c 没怎么看到 xff0c 基本上都是时
  • Linux C/C++之TCP / UDP通信

    目录 1 什么是网络 1 1 网络的定义 1 2 网络的实质 1 3 主机的类型 1 4 信息的传递 2 网络分层 2 1 五层模型 2 2 七层模型 xff08 OSI Open System Interconnection xff09
  • 什么是栈,栈及其特点和应用详解

    同顺序表和链表一样 栈也是用来存储逻辑关系为 一对一 数据的线性存储结构 如图 nbsp 1 所示 nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp
  • 四款经典3.7v锂电池充电电路图详解 - 全文锂电池的内部结构所致,必须保留一部分锂离子在负极,锂电池不能过放电

    3 7v锂电池充电电路图 xff08 一 xff09 1 锂电池的充电 xff1a 根据锂电池的结构特性 xff0c 最高充电终止电压应为4 2V xff0c 不能过充 xff0c 否则会因正极的锂离子拿走太多 xff0c 而使电池报废 其
  • USART_ClearITPendingBith和 USART_ClearFlag的区别

    一个是清除标志 xff0c 判断中断是否处理完 一个是清除中断标志位 xff0c 根据标志位来执行相应的中断函数 一个是在入口 xff08 是否触发某个中断 xff09 xff0c 一个是在出口 xff08 是否完成某个中断 xff09 起