游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

GD32开发实战指南第10章串口通信

  开发环境:
  MDK:Keil5。30
  开发板:GD32F207IEVAL
  MCU:GD32F207IK10。1串口简介
  USART(UniversalSynchronousAsynchronousReceiverandTransmitter,通用同步异步接收发射器)提供了一种灵活的方法与使用工业标准NRZ异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTSRTS)操作。它还允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
  虽然USART既可以同步又可以异步,但是常见的最常用的就是使用功能的异步功能,如果作为异步通信就是UART(UniversalAsynchronousReceiverandTransmitter),可以说,UART是USART的子集,但是同步通信相比异步通信多了一根时钟同步信号线。
  下面简单介绍下同步和异步。
  在同步通讯中,收发设备双方会使用一根信号线表示时钟信号,在时钟信号的驱动下双方进行协调,同步数据,见下图。通讯中通常双方会统一规定在时钟信号的上升沿或下降沿对数据线进行采样。
  图1同步通讯
  在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些同步用的信号位,或者把主体数据进行打包,以数据帧的格式传输数据,见下图,某些通讯中还需要双方约定数据的传输速率,以便更好地同步。
  图2异步通讯
  在同步通讯中,数据信号所传输的内容绝大部分就是有效数据,而异步通讯中会包含有帧的各种标识符,所以同步通讯的效率更高,但是同步通讯双方的时钟允许误差较小,而异步通讯双方的时钟允许误差较大。
  从上面的介绍可以看出,USART以同步方式通信需要时钟同步信号,但不需要额外的起始、停止位,可以实现更快的传输速度。但USART控制起来更复杂,因此本文主要讲解以异步通信。
  异步串行通信以字符为单位,即一个字符一个字符地传送。
  图3异步串口通信协议
  串口外设的架构图看起来十分复杂,实际上对于软件开发人员来说,我们只需要大概了解串口发送的过程即可。从下至上,我们看到串口外设主要由三个部分组成,分别是波特率控制、收发控制和数据存储转移。波特率控制
  波特率,即每秒传输的二进制位数,用bs(bps)表示,通过对时钟的控制可以改变波特率。在配置波特率时,我们向波特比率寄存器USARTBAUD写入参数,修改了串口时钟的分频值USARTDIV。USARTBAUD寄存器包括两部分,分别是INTDIV(USARTDIV的整数部分)和FRADIV(USARTDIV的小数)部分,最终,计算公式为USARTDIVINTDIV(FRADIV16)。
  USARTDIV是对串口外设的时钟源进行分频的,USART05的系统时钟为PCLK2,USART12和UART3467的系统时钟为PCLK1,串口的时钟源经过USARTDIV分频后分别输出作为发送器时钟及接收器时钟,控制发送和接收的时序。在使能USART之前,必须在时钟控制单元使能系统时钟。
  图4USART框图收发控制
  围绕着发送器和接收器控制部分,有好多个寄存器:STAT0、USARTCTL0、USARTCTL1、USARTCTL2和STAT1,即USART的三个控制寄存器(ControlRegister)及一个状态寄存器(StatusRegister)。通过向寄存器写入各种控制参数来控制发送和接收,如奇偶校验位、停止位等,还包括对USART中断的控制;串口的状态在任何时候都可以从状态寄存器中查询得到。其中停止位的配置如下图所示。
  图5停止位配置发送配置步骤:
  1。在USARTCTL0寄存器中置位UEN位,使能USART;
  2。通过USARTCTL0寄存器的WL设置字长;
  3。在USARTCTL1寄存器中写STB〔1:0〕位来设置停止位的长度;
  4。如果选择了多级缓存通信方式,应该在USARTCTL2寄存器中使能DMA(DENT位);
  5。在USARTBAUD寄存器中设置波特率;
  6。在USARTCTL0寄存器中设置TEN位;
  7。等待TBE置位;
  8。向USARTDATA寄存器写数据;
  9。若DMA未使能,每发送一个字节都需重复步骤78;
  10。等待TC1,发送完成。
  图6USART发送步骤
  在禁用USART或进入低功耗状态之前,必须等待TC置位。先读USARTSTAT0然后再写USARTDATA可将TC位清0。在多级缓存通信方式(DENT1)下,直接向TC写0,也能清TC。接收配置步骤:
  1。写USARTCTL0寄存器的WL位去设置字长;
  2。在USARTCTL1寄存器中写STB〔1:0〕位来设置停止位的长度;
  3。如果选择了多级缓存通信方式,应该在USARTCTL2寄存器中使能DMA(DENR位);
  4。在USARTBAUD寄存器中设置波特率;
  5。在USARTCTL0寄存器中置位UEN位,使能USART;
  6。在USARTCTL0中设置REN位。
  接收器在使能后若检测到一个有效的起始脉冲便开始接收码流。在接收一个数据帧的过程中会检测噪声错误,奇偶校验错误,帧错误和过载错误。
  当接收到一个数据帧,USARTSTAT0寄存器中的RBNE置位,如果设置了USARTCTL0寄存器中相应的中断使能位RBNEIE,将会产生中断。在USARTSTAT0寄存器中可以观察接收状态标志。
  软件可以通过读USARTDATA寄存器或者DMA方式获取接收到的数据。不管是直接读寄存器还是通过DMA,只要是对USARTDATA寄存器的一个读操作都可以清除RBNE位。
  在接收过程中,需使能REN位,不然当前的数据帧将会丢失。
  以上对串口通信进行了简单介绍,为了方便各位读者朋友更好的理解,在这里笔者将引入一个新的思想系统分层思想。既然各位对着有意于嵌入式,那么必须得有对整个系统的架构要有一定的认知。对GD32裸机开发,我们可以将分为三层:物理层、协议层和应用层。前文讲了这么多也是对串口协议进行分析,常用的物理层的串口通信标准有232和485。
  【注】UART和USART的区别
  USART(universalsynchronousasynchronousreceiverandtransmitte):通用同步异步收发器,USART是一个串行通信设备,可以灵活地与外部设备进行全双工数据交换。
  UART(universalasynchronousreceiverandtransmitter):通用异步收发器,异步串行通信口(UART)就是我们在嵌入式中常说的串口,它还是一种通用的数据通信议。从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型。
  当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如GD32的USART可以提供时钟支持ISO7816的智能卡接口。
  USART是指单片机的一个端口模块,可以根据需要配置成同步模式(SPI,I2C),也可以将其配置为异步模式,后者就是UART。所以说UART姑且可以称之为一个与SPI,I2C对等的协议,而USART则不是一个协议,而是更应该理解为一个实体。相比于同步通讯,UART不需要统一的时钟线,接线更加方便。但是,为了正常的对信号进行解码,使用UART通讯的双方必须事先约定好波特率,即每个码元的长度。
  关于串口的深入理解,请参看笔者文章:
  https:blog。bruceou。cn202101detailedexplanationofstm32serialcommunication55510。2串口通信的寄存器描述
  串口常用的寄存器有状态寄存器(USARTSTATx)、数据寄存器(USARTDATA)、波特比率寄存器(USARTBAUD)、控制寄存器(USARTCTLx)。
  图7状态寄存器
  图8数据寄存器
  图9波特比率寄存器
  图10控制寄存器010。3串口硬件
  串口的接口通过三个引脚与其他设备连接在一起。任何USART双向通信至少需要两个脚:接收数据输入(RX)和发送数据输出(TX)。RX:接收数据串行输入。通过采样技术来区别数据和噪音,从而恢复数据。TX:发送数据输出。当发送器被禁止时,输出引脚恢复到它的IO端口配置。当发送器被激活,并且不发送数据时,TX引脚处于高电平。在单线和智能卡模式里,此IO口被同时用于数据的发送和接收。
  图11USB转232
  板子使用串口0,接口用的232,但对于软件来说,都是一样的。10。4串口发送(重定向printf)10。4。1串口发送实现
  下面笔者就用标准库来操作串口0。
  1。串口配置串口0时钟使能
  串口1是挂载在APB2下面的外设,所以使能函数为:rcuperiphclockenable(RCUUSART0);
  值得注意的是,不仅要打开串口的时钟,还需要打开相应GPIO的时钟,最终的代码如下:rcuperiphclockenable(RCUGPIOA);配置串口GPIO
  这个比较简单,前面的章节已经讲过了,只需要注意的是,这里的GPIO不再是普通GPIO,要配置成复用功能,因此TX和RX分别配置成GPIOMODEAFPP和GPIOMODEINFLOATING。串口复位
  当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。复位的是在函数usartdeinit()中完成:voidusartdeinit(uint32tusartperiph);
  比如我们要复位串口0,方法为:usartdeinit(USART0);串口参数初始化
  串口初始化是以下函数设置:voidusartbaudrateset(uint32tusartperiph,uint32tbaudval);设置波特率voidusartwordlengthset(uint32tusartperiph,uint32twlen);设置传输字长voidusartstopbitset(uint32tusartperiph,uint32tstblen);设置停止位voidusartparityconfig(uint32tusartperiph,uint32tparitycfg);设置校验位voidusarthardwareflowrtsconfig(uint32tusartperiph,uint32trtsconfig);设置RTS流控voidusarthardwareflowctsconfig(uint32tusartperiph,uint32tctsconfig);设置CTS流控voidusartreceiveconfig(uint32tusartperiph,uint32trxconfig);设置接收使能voidusarttransmitconfig(uint32tusartperiph,uint32ttxconfig);设置发送使能
  从上面的初始化格式可以看出初始化需要设置的参数为:波特率,字长,停止位,奇偶校验位,硬件数据流控制,模式(收,发)。我们可以根据需要设置这些参数。串口使能
  串口使能是通过函数usartenable()来实现的,这个很容易理解,使用方法是:usartenable(USART0);
  到此,串口初始化的基本配置就算完成了,完整初始化代码如下:briefconfigureCOMportparam〔in〕comtypedefenumcomid,uint32tbaudvalparam〔out〕noneretvalnonevoidcominit(comtypedefenumcomid,uint32tbaudval){enableGPIOclockrcuperiphclockenable(COMGPIOCLK〔comid〕);enableUSARTclockrcuperiphclockenable(COMCLK〔comid〕);connectporttoUSARTxTxgpioinit(COMGPIOPORT〔comid〕,GPIOMODEAFPP,GPIOOSPEED50MHZ,COMTXPIN〔comid〕);connectporttoUSARTxRxgpioinit(COMGPIOPORT〔comid〕,GPIOMODEINFLOATING,GPIOOSPEED50MHZ,COMRXPIN〔comid〕);USARTconfigureusartdeinit(COMUSART〔comid〕);usartbaudrateset(COMUSART〔comid〕,baudval);usartwordlengthset(COMUSART〔comid〕,USARTWL8BIT);usartstopbitset(COMUSART〔comid〕,USARTSTB1BIT);usartparityconfig(COMUSART〔comid〕,USARTPMNONE);usarthardwareflowrtsconfig(COMUSART〔comid〕,USARTRTSDISABLE);usarthardwareflowctsconfig(COMUSART〔comid〕,USARTCTSDISABLE);usartreceiveconfig(COMUSART〔comid〕,USARTRECEIVEENABLE);usarttransmitconfig(COMUSART〔comid〕,USARTTRANSMITENABLE);usartenable(COMUSART〔comid〕);}
  2。数据发送与接收
  GD32的发送与接收是通过数据寄存器USARTDATA来实现的,这是一个双寄存器。当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时候,也是存在该寄存器内。
  GD32库函数操作USARTDATA寄存器发送数据的函数是:voidusartdatatransmit(uint32tusartperiph,uint16tdata);
  通过该函数向串口寄存器USARTDR写入一个数据。
  GD32库函数操作USARTDATA寄存器读取串口接收到的数据的函数是:uint16tusartdatareceive(uint32tusartperiph);
  通过该函数可以读取串口接受到的数据。
  3。串口状态
  串口的状态可以通过状态寄存器USARTSTAT0读取。
  状态寄存器的其他位我们这里就不做过多讲解,大家需要可以查看中文参考手册。
  在我们固件库函数里面,读取串口状态的函数是:FlagStatususartflagget(uint32tusartperiph,usartflagenumflag);
  这个函数的第二个入口参数非常关键,它是标示我们要查看串口的哪种状态,比如上面讲解的TBE(读数据寄存器非空)以及TC(发送完成)。例如我们要判断读寄存器是否非空(TBE),操作库函数的方法是:usartflagget(USART0,USARTFLAGTBE);
  我们要判断发送是否完成(TC),操作库函数的方法是:usartflagget(USART0,USARTFLAGTC);
  这些标识号是通过枚举类型定义的:USARTflagstypedefenum{flagsinSTAT0registerUSARTFLAGCTSFUSARTREGIDXBIT(USARTSTAT0REGOFFSET,9U),!CTSchangeflagUSARTFLAGLBDFUSARTREGIDXBIT(USARTSTAT0REGOFFSET,8U),!LINbreakdetectedflagUSARTFLAGTBEUSARTREGIDXBIT(USARTSTAT0REGOFFSET,7U),!transmitdatabufferemptyUSARTFLAGTCUSARTREGIDXBIT(USARTSTAT0REGOFFSET,6U),!transmissioncompleteUSARTFLAGRBNEUSARTREGIDXBIT(USARTSTAT0REGOFFSET,5U),!readdatabuffernotemptyUSARTFLAGIDLEFUSARTREGIDXBIT(USARTSTAT0REGOFFSET,4U),!IDLEframedetectedflagUSARTFLAGORERRUSARTREGIDXBIT(USARTSTAT0REGOFFSET,3U),!overrunerrorUSARTFLAGNERRUSARTREGIDXBIT(USARTSTAT0REGOFFSET,2U),!noiseerrorflagUSARTFLAGFERRUSARTREGIDXBIT(USARTSTAT0REGOFFSET,1U),!frameerrorflagUSARTFLAGPERRUSARTREGIDXBIT(USARTSTAT0REGOFFSET,0U),!parityerrorflagflagsinSTAT1registerUSARTFLAGBSYUSARTREGIDXBIT(USARTSTAT1REGOFFSET,16U),!busyflagUSARTFLAGEBUSARTREGIDXBIT(USARTSTAT1REGOFFSET,12U),!endofblockflagUSARTFLAGRTUSARTREGIDXBIT(USARTSTAT1REGOFFSET,11U)!receivertimeoutflag}usartflagenum;
  另外,笔者在此给出输出格式的说明,请读者朋友参考。
  表1输出格式说明
  格式
  说明
  d
  按照十进制整型数打印
  6d
  按照十进制整型数打印,至少6个字符宽
  f
  按照浮点数打印
  6f
  按照浮点数打印,至少6个字符宽
  。2f
  按照浮点数打印,小数点后有2位小数
  6。2f
  按照浮点数打印,至少6个字符宽,小数点后有2位小数
  x
  按照十六进制打印
  c
  打印字符
  s
  打印字符串
  接下来就可以实现串口的发送了,这里对发送函数进行封装。brief串口发送一个字节数据paramch:待发送字符retvalNonevoidusartsendbyte(uint8tch){发送一个字节数据到USARTusartdatatransmit(USART0,ch);等待发送完毕while(usartflagget(USART0,USARTFLAGTBE)RESET);}brief串口发送指定长度的字符串paramstr:待发送字符串缓冲器strlen:指定字符串长度retvalNonevoidusartsendStrlength(uint8tstr,uint32tstrlen){unsignedintk0;do{usartsendbyte((strk));k;}while(kstrlen);}brief串口发送字符串,直到遇到字符串结束符paramstr:待发送字符串缓冲器retvalNonevoidusartsendstring(uint8tstr){unsignedintk0;do{usartsendbyte((strk));k;}while((strk)!);}
  这样就方便多了,然后再主函数中调用发送函数。briefmainfunctionparam〔in〕noneparam〔out〕noneretvalnoneintmain(void){charstr〔20〕;systickinitsysTickinit();usartinit1152008N1cominit(COM1,115200);usartsendstring((uint8t)ThisisCOM1r);sprintf函数把格式化的数据写入某个字符串sprintf(str,2002d02d02d,22,05,15);usartsendstring((uint8t)str);while(1){}}
  下面笔者还要介绍一种常用的串口打印方式IO重定向,也就是使用printf打印数据到终端,但是我们的裸机系统没有终端,因此如果想让printfscanf向USART0发送、获取数据,需要通过代码指定C标准库输入输出函数的控制终端设备,也就是使用功能IO重定向。
  在stdio。h有相应的接口。dynamicallyallocatesabufferoftherightsizefortheformattedstring,andreturnsitin(strp)。Formalreturnvalueisthesameasanyotherprintfvariant,exceptthatitreturns1ifthebuffercouldnotbeallocated。(ThefunctionswithARMprefixednamesareidenticaltotheoneswithout,butareavailableinallcompilationmodeswithoutviolatingusernamespace。)externARMABIintfgetc(FILEstream)attribute((nonnull(1)));readsatmostonelessthanthenumberofcharactersspecifiedbynfromthestreampointedtobystreamintothearraypointedtobys。Noadditionalcharactersarereadafteranewlinecharacter(whichisretained)orafterendoffile。Anullcharacteriswrittenimmediatelyafterthelastcharacterreadintothearray。Returns:sifsuccessful。Ifendoffileisencounteredandnocharactershavebeenreadintothearray,thecontentsofthearrayremainunchangedandanullpointerisreturned。Ifareaderroroccursduringtheoperation,thearraycontentsareindeterminateandanullpointerisreturned。externARMABIintfputc(intc,FILEstream)attribute((nonnull(2)));
  下面我们以实现printf打印数据到USART(即重定义fputc函数)的实现过程。brief重定向c库函数printf到USART1paramNoneretvalintfputc(intch,FILEf){清除标志位usartflagclear(USART0,USARTFLAGTC);发送一个字节数据到USART0usartdatatransmit(USART0,(uint8t)ch);等待发送完毕while(usartflagget(USART0,USARTFLAGTC)RESET);return(ch);}
  scanf同理。brief重定向c库函数scanf到USART0paramNoneretvalNoneintfgetc(FILEf){等待串口0输入数据while(usartflagget(USART0,USARTFLAGRBNE)RESET);return(int)usartdatareceive(USART0);}
  接下来就可使用printf和scanf函数了。briefmainfunctionparam〔in〕noneparam〔out〕noneretvalnoneintmain(void){charstr〔20〕;systickinitsysTickinit();usartinit1152008N1cominit(COM1,115200);printf(ThisisCOM1r);sprintf函数把格式化的数据写入某个字符串sprintf(str,2002d02d02d,22,05,15);printf(s,str);while(1){}}
  完整代码请查看配套程序,另外还需添加微库以便支持printf。具体设置参看本节后文的小贴士部分。
  我们来总结下串口发送的流程:
  1。初始化硬件,时钟;
  2。USART的GPIO初始化,USART参数初始化;
  3。重定向printf
  4。打印输出10。4。2实验现象
  将程序编译好下载到板子中,打开串口助手,按下图设置相应参数,按下板子的复位按键,在接收区可以看到如下信息。
  图12串口发送实验结果10。5串口接收数据(中断方式)10。5。1串口接收实现
  中断方式相对于与普通方式,还需要开启中断并且初始化NVIC以及中断服务函数。开启中断
  在接收到数据的时候(RBNE读数据寄存器非空),我们要产生中断,那么我们开启中断的方法是:usartinterruptenable(USART0,USARTINTRBNE);使能串口0接收中断
  在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是:usartinterruptenable(USART0,USARTINTTBE);
  开启NVIC中断以及优先级。nvicirqenable(USART0IRQn,0,0);中断服务函数!briefthisfunctionhandlesUSART0exceptionparam〔in〕noneparam〔out〕noneretvalnonevoidUSART0IRQHandler(void){uint8tch;if(RESET!usartinterruptflagget(USART0,USARTINTFLAGRBNE)){readonebytefromthereceivedataregisterch(uint8t)usartdatareceive(USART0);printf(c,ch);将接受到的数据直接返回打印}}
  在中断服务程序中,接收到数据后立即输出。
  主函数代码如下:briefmainfunctionparam〔in〕noneparam〔out〕noneretvalnoneintmain(void){charstr〔20〕;systickinitsysTickinit();usartinit1152008N1cominit(COM1,115200,0,1);printf(ThisisCOM1r);sprintf函数把格式化的数据写入某个字符串sprintf(str,2002d02d02d,22,05,15);printf(sr,str);while(1){}}
  总结下串口接收的编程流程:
  1。硬件初始化,时钟初始化;
  2。串口GPIO初始化,串口参数配置;
  3。在main()函数中使能中断接收;
  4。编写中断回调函数,处理接收的数据,
  【注】中断接收函数只能触发一次接收中断,所以我们需要在中断回调函数中再次调用中断接收函数。这里可以对比下标准库的流程。10。5。2实验现象
  将程序编译好下载到板子中,打开串口助手,按下图设置相应参数,按下板子的复位按键,在接收区可以看到如下信息。
  图13串口接收实验结果

火车上的排泄物到哪去了?车上源源不断的水,又是从哪来的?想来一场说走就走的旅行,相信不少人会选择火车作为交通工具,比起大巴,火车上既能够上厕所,又能够接热水,非常的便利。火车是便利的代步工具那么有没有人想过,火车上的水是……兰纳足贴保质期多久?兰纳足贴保质期几年?兰纳足贴是很出名的药贴,很多人买得多放在家里屯着,不知道保质期多久,下面5号网的小编为你们介绍兰纳足贴保质期多久?兰纳足贴保质期几年?兰纳足贴保质期多久纳兰足贴的保质期在……谷爱凌丁真何以被网暴?爱凌被网暴,始于一张再寻常不过的照片。4月底,为参加全球女性体育峰会,谷爱凌坐上活动方准备的公务飞机,由旧金山飞往纽约。当她在微博分享视频时,恶语海啸般袭来。营销号……CBA三消息山东宣布最新外援,陶汉林打爆广州,首钢留争议球员大家好呀,我是北柠,各位小伙伴们要养成先赞后看的习惯哦!山东队是现在CBA联赛里中游水平的一支球队,他们的实力其实是不错的,只不过这个赛季在徐长锁指导的带领下山东队没有将……日本无比滴有激素吗?无比滴含有激素吗?日本无比滴是治疗驱蚊、止痒效果很好的一款药品!在大众口碑中,非常不错。那么不少人困惑,日本无比滴有激素吗?关于,日本无比滴有激素吗?无比滴含有激素吗?5号网小编来为您一一解答!……未来中国发展唯一赢家大城市,中小城市逐渐萎缩将来的城市发展,会有明显的马太效应,强者愈强,弱者愈弱。大城市可能会成为唯一的赢家!今天咱们聊一聊中国城市的发展趋势。随着我国经济的发展,城镇化的推进不断深入,大城市开始……电商平台窜货如何打击(分享厂家有效抵制窜货的方法)大家好,这里是纪白谈知识产权。随着电商圈得快速发展,品牌与品牌之间,代理与代理之间得竞争日趋激烈。总会有部分商家因为无法通过正规渠道进行销售而做出违反市场规定的行为。窜货就是这……避孕药哪种最好最安全避孕药有哪几种虽说两个人在一起的时候是很美好,很浪漫的一件事,但是有些防范措施该准备还是要准备的,就比如说避孕药有没有一种避孕药是安全有效的?避孕药哪种最好最安全避孕药没有最好一说,只……新车纯电帕萨特?Model3和它你选谁?大众ID。AERO概文:懂车帝原创许博大众ID。AERO概念车〔懂车帝原创产品〕近日,大众汽车正式发布了旗下全新纯电动概念车大众ID。AERO。新车是大众ID家族的一位新成员,虽然还是……从老好人到塌房,何炅为何落得今天这个下场《快乐大本营》还一个多月的时间就停播一周年了,不少人为这档节目可惜。每周六晚上,何炅与谢娜,李维嘉,吴昕和杜海涛,给观众带来无数的欢乐和笑声。现在再也看不到,虽然何……上夜班吃什么好对身体好上夜班什么时候补觉好上夜班对人的身体伤害真的很大,经常上夜班的人很容易得病,那么上夜班吃什么好对身体好呢,上夜班什么时候补觉好好呢,来看看吧。上夜班吃什么好对身体好1、滋阴润燥的食物中……黑头可以用粉刺针挤吗?黑头可以去医院治吗?黑头是经常容易长的一种皮肤病,黑头也比较顽固不好去除,下面5号网的小编为你们介绍黑头可以用粉刺针挤吗?黑头可以去医院治吗?黑头可以用粉刺针挤吗有不少姑娘喜欢用粉刺针……
生育流程产检,新手科普和我的踩坑经验总结上一篇文章介绍了母子健康手册办理、建档以及生产医院选择的一些关注点。从后台数据看文章获得了大量的收藏和转发,足以证明这些文章对于一些读者来说具有一定的价值,这也激发了我继续整理……EDG夺冠后首次全员直播,暗示下赛季阵容已定?相信很多英雄联盟的玩家们今年一定都非常开心和兴奋,因为在今年英雄联盟S11的比赛当中来自LPL赛区的EDG战队在面对LCK众敌的时候没有被击败,反而在重重包围下击败了去年的世界……中美欧日一季度GDP报日本1。16万亿,欧盟4。27万亿,中作为全球前四大经济体,中美欧一季度都交出了一份不错的成绩单,唯独日本,似乎在沉沦的道路上走到底。一季度,日本交出了一份相当难看的成绩单,消费萎靡、投资乏力,出口不振,连续……父爱如山温暖相伴吴堡二幼父亲节主题活动在父亲节即将到来之际,为宣传和弘扬中华民族传统美德,感恩天下父母,2022年6月17日,吴堡县第二幼儿园开展了感恩父亲节主题教育活动,活动以绘画、手工、歌唱等多种形式展开,教育……谷歌恶意公布俄敏感设施高清图!面对信息泄密,我们要如何应对?谁还敢说科技无国界?谷歌地图从4月18日开始以最大分辨率提供俄罗斯所有军事和战略设施的清晰卫星图像。目前,包括洲际弹道导弹发射井、海军军港、军用机场等在内的俄战略要地均可以以每……外媒老美的相关限制,已经对中芯国际失去作用了外媒:老美的限制对中芯国际失去作用了!作为国内最先进的代工厂,想必大家对于中芯国际都不陌生,在有了梁孟松的加入之后,仅仅用了三年的时间,就完成了此前三星十年才有的成就,成……你好星期六取代快乐大本营开播,处境尴尬的只有吴昕一个吴昕曾经也是别人口中的佼佼者。从小就学习成绩优秀,为人又乖巧听话,吴昕一直都是别人家的孩子的代表。大学时吴昕考入大连外国语大学的法语系,除了在成绩上名列前茅外,吴昕……探索元宇宙明日方舟风雪过境BI1孤兵攻略知彼知己,百战不殆由于敌方有三个冰原猎人队长,全地图攻击防御力最低的目标。可能是由于我的干员练度不高的原因,先锋,高台部署后,很快就会被狙击掉。这就注定了是一场艰苦的战斗……夏日似糖,moresweet卡地亚新近推出的LesBerlingotsdeCartier珠宝系列的投放都刷到了吧?简洁的几何线条、个性的铆钉元素,还有明艳甜蜜的色彩,光是这个充满冲突的组合就足以令这个系列……60岁以后每天要坚持两勤两懒六十岁以后,健康的身体才是最重要的。要把养生的提上日程了,人到了60岁一定要做到两勤两懒三不要一、衣服要勤换洗,勤增减随着四季啊,寒暑冬夏呀,特别是秋冬季节,天气会……六月购机推荐这三款骁龙870机型跌至千元,超低价格不容错过六月底了,各大品牌的优惠活动已经来到了尾声,不知道近期有换手机打算的朋友有没有,买到心仪的手机呢?如果还是不知道购买哪款机型较好,不妨看看今天提到的这三款骁龙870机型,超低价……云南旅游买了翡翠如何退货最近有很多全国各地的翠友找我们101热卖,让我们帮忙对闲置翡翠估价,以及变现闲置翡翠。我们101热卖发现很多翠友,在旅游市场以高于市场价1020倍的价格购买了旅游店翡翠,我们1……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网