STM32-USART串口通信【USART和UART的区别】

发布者:真诚相伴最新更新时间:2022-05-26 来源: eefocus关键字:STM32  USART  串口通信  UART 手机看文章 扫描二维码
随时随地手机看文章

USART简介

USART(Universal Synchronous/Asynchronous Receiver/Transmitter),即通用同步/异步串行接收/发送器。


所谓同步通信和异步通信的主要区别是前者有公共时钟,总线上的所有设备按统一的时序、统一的传输周期进行信息传输。后者没有公共时钟,没有固定的传输周期,采用应答方式通信。简单的说,“同步”就是发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。 “异步”就是发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。异步通信发送方式下,在每一个字符的开始和结束分别加上开始位和停止位,以便使接收端能够正确地将每一个字符接收来。


我们用的最多的UART(Universal Asynchronous Receiver/Transmitter)就是异步通信方式,也就是说,虽然STM32支持USART,但是就一般使用而言,很少使用同步模式,多是使用异步模式。


STM32的USART异步通信

STM32支持多路串口,具体支持多少串口可以到相应的数据手册查看。比如F103ZET6支持5路串口(USART1~USART5),F103VBT6支持三个串口(USART1~USART3)。STM23的USART模块的框图如下

USART寄存器

常用的寄存器如下,主要用途如括号中所示


USART_SR 状态寄存器 (发送寄存器空、发送完成、接受寄存器非空等)


USART_DR 数据寄存器  (存放发送和接收的数据)


USART_BRR 波特率寄存器  (设置波特率参数,BAUD = f/(16*DIV))


USART_CR1 控制寄存器  (发送使能、接受使能、一些关于串口接受和发送的中断使能)


状态寄存器USART_SR(state reg)

这里主要用到的是一下三个位(发送寄存器空、发送完成、接受寄存器非空):


TXE(Transmit data register empty) 发送数据寄存器空标志位

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

0 表示数据还没有被转移到移位寄存器;

1 表示数据已经被转移到移位寄存器。

注意:单缓冲器传输中使用该位。


TC (Transmission complete) 发送完成标志位

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

0 表示发送还未完成

1 表示发送完成。


关于TXE和TC的区别:


顾名思义,TXE是发送数据寄存器空,而TC是发送完成标志位。那这个时候我们就要搞清楚两个概念:

1.什么是发送数据寄存器?

2.发送完成是什么意思?

前文的框图中可以看到,发送和接收过程是由一个数据寄存器和一个移位寄存器来完成的。


数据寄存器是内核接收和发送串口数据的直接缓存单元,用于临时存放接收到的数据和将要发送的数据。


我们知道串口数据是串行数据,接收的时候不可能同时将一个字节全部写入数据寄存器,发送的时候也不可能同时将数据寄存器中的数据发送出去,这时候就需要移位寄存器将接收的串行数据通过移位的方式写到接收数据寄存器中,或将发送寄存器中的数据通过移位的方式变成串行数据发送出去。


总之,在发送的过程中,内核首先将数据写入发送数据寄存器TDR,然后移位寄存器将发送寄存器中的数据一位一位地发送出去,接收的过程与此相反。此外,我们需要明白,移位寄存器的工作是需要时间的!


搞明白了这个过程,我们再回头看TXE和TC的名字就应该比较清楚了。TXE就是发送数据寄存器空,发送寄存器里没有数据(被移位寄存器取走)的时候就会置位。那发送完成就是发送移位寄存器里的数据发送完成,即空的时候!


举个形象的例子,有个一大水缸,水缸下边有一个小水龙头可以放出水缸里的水,你有一个水桶,一桶水一桶水地忘水缸里倒水,水缸里的水不停地往外流。你每次倒一桶水你的水桶就会空一次,但是只要你持续地倒水,水缸就不会空,直到,你不倒水了,等水缸里的水流完水缸就空了。这里的水桶就是数据寄存器,水缸就是移位寄存器。TXE空表示的就是水桶空、TC空表示的就是水缸空了。


RXNE(Read data register not empty)  读数据寄存器非空

当RDR移位寄存器中的数据被转移到USART_DR寄存器中,该位被硬件置位。如果USART_CR1寄存器中的RXNEIE为1,则产生中断。对USART_DR的读操作可以将该位清零。RXNE位也可以通过写入0来清除,只有在多缓存通讯中才推荐这种清除程序。

0 表示数据没有收到;

1 表示收到数据,可以读出。


此外该寄存器还有以下标志位,均是为1时表示错误发生。

IDLE(IDLE line detected) 监测到总线空闲标志位 

ORE(Overrun error) 过载错误标志位

NE(Noise error flag) 噪声错误标志

FE(Framing error) 帧错误标志位

PE(Parity error) 校验错误标志位

配合USART_CR1寄存器,IDLE、ORE和PE可以直接触发中断。NE和FE也可以间接地触发相应的中断,因为它和读数据寄存器非空位RXNE一起出现,硬件会在设置RXNE标志时产生中断。


数据寄存器USART_DR(data reg)

该寄存器只是用了其中的低八位,包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接收

用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。


波特率寄存器(USART_BRR)

DIV_Mantissa[11:0] 这12位定义了USART分频器除法因子(USARTDIV)的整数部分。


DIV_Fraction[3:0] 这四位按比例定义了USART分频器除法因子(USARTDIV)的小数部分,具体的值为DIV_Fraction / 16。


比如 Fraction (USARTDIV) = 12/16 = 0.75,小数部分就是0.75,而整数部分是多少就是多少。


波特率寄的计算公式方法如下,在调用库函数的时候并不需要自己计算,只需要配置波特率就行了,所以这里了解就行。

这里的f_{CK}是USART的时钟源,在文章《STM32-GPIO的配置和使用》第二节中提到过“APB1上连接的是低速外设,包括电源接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3(如果有USART4和USART5,也在APB1下)等等。APB2上连接的是高速外设,包括UART1、SPI1、Timer1、ADC1、ADC2、GPIO、第二功能IO口等”。所以,USART1是在PCLK1时钟下,而USART2~5(有的芯片没有USART4和5)是在PCLK2下,分别来自APB1分频器(一般输出36M)和APB分频器(一般输出72M)。这里非常重要,因为使用一个外设必须要使能他的时钟源!

控制寄存器 1(USART_CR1)

STM32 的每个串口都有 3 个控制寄存器 USART_CR1~3,用来对USART模块的一些功能的使能操作。其中基本功能的使用的话只会涉及到CR1,毕竟一般我们使用串口最多的可能就是用来打印log。而在CR1中最需要了解的位在下方都进行了加粗,这些位关系到串口的基本收发功能能不能使用。

UE 串口使能位,通过该位置 1,以使能串口。


M 字长选择位,当该位为 0 的时候数据为8 个数位和n 个停止位,停止位的个数(n)是根据 USART_CR2 的[13:12]位设置来决定的。


WAKE 唤醒方法选择位,为0的时候表示被空闲总线唤醒,为1的时候表示被地址标记唤醒。(详细了解这部分参考《STM32中/英参考手册》25.3.6节)


PCE 校验使能位,0时禁止校验,1时使能校验。


PS 校验位选择,当PCE为1,该位才有效。PS为0 是偶校验,否则为奇校验。


PEIE PE(校验错误)中断使能,如果该位为1,当USART_SR中的PE为’1’(校验错误)时,产生USART中断,


TXIE 发送缓冲区空中断使能位,设置该位为 1,当USART_SR 中的 TXE 位为1 时产生串口中断。


TCIE 发送完成中断使能位,设置该位为 1,当 USART_SR 中的 TC位为 1 时产生串口中断。


RXNEIE 接收缓冲区非空中断使能,设置该位为 1,当 USART_SR中的 ORE 或者 RXNE 位为 1 时产生串口中断。


IDLEIE 检测到总线空闲中断使能位,如果该位为1,当USART_SR中的IDLE为’1’时(检测到总线空闲),产生USART中断


TE 发送使能位,为 1时使能发送功能。


RE 接收使能位,与TE类似。


控制寄存器 2(USART_CR2)、控制寄存器 3(USART_CR3)

CR2和CR3和CR1相同,它们控制着USART模块的一些相对复杂的功能,这些功能对于一般用户而言用到的很少。


我们知道使用串口发送数据是比较占用CPU时间的,STM32支持DMA方式发送和接收串口数据,以解放CPU,提高串口的效率,而USART的DMA模式发送和接收信息的使能位是在CR3中。


USART的库函数应用

配置步骤

将涉及到的模块时钟使能(USARTn和GPIO)

USART1和GPIO都在APB2(PCLK2)时钟下,USART2~5都在APB1(PCLK1)时钟下。

使用到的函数:


RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

 

//比如:使能USART1和GPIOA(USART1默认使用PA9和PA10,所以使能GPIOA)

//RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);

 


GPIO的端口配置

对用到的GPIO端口进行配置,比如USART1在默认情况下使用的是PA9和PA10。当然可以重映射到其他引脚,如果需要重映射,可以查看《STM32中/英文参考手册》8.3.8节和所用型号芯片的datasheet。需要注意的是,输出引脚(TX)一般设为推挽输出,输入引脚(RX)一般设为浮空输入。

使用到的函数主要是


GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

就是基本的GPIO配置而已


串口参数的初始化

主要设置波特率、数据字长、停止位个数、校验位、收发模式等

主要用到的函数


USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct)

举例:


USART_InitTypeDef USART_InitStructure;

 

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式

USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位

USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式

 

USART_Init(USART1, &USART_InitStructure); //初始化串口1

 


开启中断并初始化NVIC

任何时候使用到中断都要对中断进行优先级配置,USART串口中断并没有什么特别之处。前文《STM32-NVIC中断嵌套优先级管理器》已经进行了介绍。


这里只贴一个例子:


NVIC_InitTypeDef NVIC_InitStructure;

 

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//开启串口1中断

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2 ;//抢占优先级3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子优先级3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根据指定的参数初始化VIC寄存器

这里只是开启了USART1模块的中断,但还没有配置是USART1哪个功能的中断。


需要用中断配置函数进行配置,比如,下方是开启了USART1的接收中断。


USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启串口接受中断

另外,注意在主函数中设置中断优先级分组!


使能串口

一切配置好之后,就是使能串口模块了。

USART_Cmd(USART1, ENABLE);                    //使能串口1 

编写串口中断服务函数

串口中断函数的名称不能随便起,在系统的启动文件中,已经定义好了各种中断函数的名称



中断服务函数只能以此命名,以此编写中断服务函数,在中断函数中要检查是哪个功能触发的中断,以执行相应的操作。


查看中断状态的函数为


ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)

用以查看哪个中断标志位被置位,参数有以下选项,在状态寄存器部分已经写到,其中常用的就是发送完成中断标志位USART_IT_TC、发送数据寄存器空中断标志位USART_IT_TXE、接收数据寄存器非空中断标志位USART_IT_RXNE。


#define IS_USART_GET_IT(IT) (((IT) == USART_IT_PE) || ((IT) == USART_IT_TXE) ||

                            ((IT) == USART_IT_TC) || ((IT) == USART_IT_RXNE) ||

                            ((IT) == USART_IT_IDLE) || ((IT) == USART_IT_LBD) ||

                            ((IT) == USART_IT_CTS) || ((IT) == USART_IT_ORE) ||

                            ((IT) == USART_IT_NE) || ((IT) == USART_IT_FE))

该函数的返回值为查询位的状态,为SET(非0)或RESET(0)。


串口数据的收发

数据接收


使用以下函数,在中断服务函数中判断接收数据寄存器非空中标标志位被置位时调用,以读取数据寄存器中的数据,返回值就是该数据。


uint16_t USART_ReceiveData(USART_TypeDef* USARTx);


中断服务函数接收数据举例:


u8 Res;//如需外部访问,定义为全局变量

void USART1_IRQHandler(void)                //串口1中断服务程序

{

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收数据寄存器非空标志位置位

{

    Res =USART_ReceiveData(USART1); //读取接收到的数据

    }

 } 

数据接收中断函数里获取了中断标志位,再读取完之后,为什么没有清除中断标志位呢?


因为通过读数据寄存器USART_DR可以将数据寄存器非空中断标志位清零,也可以向该位写 0,直接清除。同理,清除发送完成中断标志位(TC)也可以通过写数据寄存器USART_DR的方式,此外读USART_SR也可以清除TC中断标志位。


数据发送


数发送只需要调用USART_SendData()函数就行,发送数据之后,要等待发送完成(USART_FLAG_TC被置位)。


void SendData(u8 data)

{

USART_SendData(USART1,data);

while(USART_GetFlagStatus(USART1,USART_FLAG_TC) != SET);

}

这里只是简单地等待置位,在串口出现异常的时候容易导致程序死在这里。为了保险起见,最好设置一个等待时长,超过一定时间就退出while循环的等待。


串口传输数据状态查看

以下分别为获取状态标志位、清除状态标志位、获取中断状态标志位、清除中断状态标志位。

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

常用函数

所有关于USART的函数基本都在stm32f10x_usart.h文件中声明


void USART_DeInit(USART_TypeDef* USARTx);

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

void USART_StructInit(USART_InitTypeDef* USART_InitStruct);

void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);

void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);

void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);

void USART_SetAddress(USART_TypeDef* USARTx, uint8_t USART_Address);

void USART_WakeUpConfig(USART_TypeDef* USARTx, uint16_t USART_WakeUp);

void USART_ReceiverWakeUpCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_LINBreakDetectLengthConfig(USART_TypeDef* USARTx, uint16_t USART_LINBreakDetectLength);

void USART_LINCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

void USART_SendBreak(USART_TypeDef* USARTx);

void USART_SetGuardTime(USART_TypeDef* USARTx, uint8_t USART_GuardTime);

void USART_SetPrescaler(USART_TypeDef* USARTx, uint8_t USART_Prescaler);

void USART_SmartCardCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_SmartCardNACKCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_HalfDuplexCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_OverSampling8Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_OneBitMethodCmd(USART_TypeDef* USARTx, FunctionalState NewState);

void USART_IrDAConfig(USART_TypeDef* USARTx, uint16_t USART_IrDAMode);

void USART_IrDACmd(USART_TypeDef* USARTx, FunctionalState NewState);

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

[1] [2]
关键字:STM32  USART  串口通信  UART 引用地址:STM32-USART串口通信【USART和UART的区别】

上一篇:STM32-一个例子搞懂EXTI外部中断/事件系统
下一篇:STM32-NVIC中断嵌套优先级管理器

推荐阅读最新更新时间:2024-11-11 13:59

STM32F103程序设计-1-STM32开发环境的建立
STM32开发环境的建立需要使用的软件有两个,一个是编写单片机程序的软件Keil MDK,另一个是串口下载程序时要使用的软件MCUISP。如果使用仿真器下载程序的话则需要安装仿真器的驱动程序,这个在以后的课程中将进行讲解。下面先看一下孟老师给大家的相关软件如下图所示。 其中mdk_513.exe为Keil MDK的安装包,该软件的安装一路点击Next,直到最后看到Finish安装结束。安装结束后打开软件,软件界面如下图所示。 点击上图中的按钮将弹出一个安装各种型号单片机所需包的界面,如下图所示。 Keil5与之前版本不同的是要单独安装你所使用单片机的相应安装包。如果在线联网不成功,有很大的可能是软件没能连到相关网站上,
[单片机]
STM32F103程序设计-1-STM32开发环境的建立
STM32模拟IIC读写AT24CXX
以前只用51做过AT24C02,后来才接触到容量更大的型号,发现了很多和以前的不一致的东西,现总结如下。 在上一篇博客中已经写好了STM32用IO口模拟IIC的基本驱动代码,下面结合数据手册用上一篇博客提到的函数编写AT24CXX全系列通用的驱动代码。 我们先来看AT24CXX的中文手册。 这是写操作的步骤。 而上面提到的从器件的地址信息由下图所示。 不同的容量的AT24CXX的从器件地址位是不同的。这在后面的基本的读写函数的关于器件的不同就有所体现。 下面先初始化AT24CXX: void AT24CXX_Init() { IIC_Init(); } 这里只需要初始化IIC总线即可。 下面写出AT24CXX基本
[单片机]
<font color='red'>STM32</font>模拟IIC读写AT24CXX
STM32_EXIT中断
今天的软件工程下载地址(360云盘): https://yunpan.cn/cPhvyer3vIwXh 访问密码 57e1 STM32F10x的资料可以在我360云盘下载: https://yunpan.cn/crBUdUGdYKam2 访问密码 ca90 工程概要说明:定义一个按键(可自己定义),每按键一次,响应中断一次,在中断函数中LED提示灯变化一次,用户可更加实际情况在中断函数做出相应操作,这里只是一个模板。 关于“STM32F103 EXIT中断” 我把重要的几点在下面分别讲述,若不明白,请关注微信公众号“EmbeddDeveloper”查阅或留言。 一、RCC时钟配置 该函数位于在bsp.c
[单片机]
STM32_EXIT中断
STM32定时器原理与使用
1.定义 设置等待时间,到达等待时间之后执行指定的硬件操作。 定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集AD数据,也可以产生PWM方波等,定时器产生PWM控制电机状态是工业控制的普通。 ----------------------------------------------------------------------------------------------------------------------------------------------------------- 2、STM32F4xx系列的芯片:2个高级控制定时器(TIM1和TIM8)、10个通用定时器(10TIM2
[单片机]
<font color='red'>STM32</font>定时器原理与使用
LPC824-串口USART(续二)
通过前面的分析知道,在LPC824中,USART所拥有的配置寄存器有很多,但在一般情况下,如果只是简单地使用收发功能,则只需要使用到配置寄存器CFG、波特率发生器寄存器BRG、中断使能读取和置位寄存器INTENSET、中断状态寄存器INTSTAT、接收器数据寄存器RXDAT、发送器数据寄存器TXDAT等6个主要寄存器,其余的寄存器取默认值即可。下面就来看一个实例。 例子:要求LPC824把USART接收到的数据原样发送回去,波特率115200,8位数据位,1位停止位。 完整代码如下。 #include LPC82x.h //************************串口初始化*********************
[单片机]
LPC824-串口<font color='red'>USART</font>(续二)
Stm32RS232串口通信——中断接收发送数据
main.c配置: /* *说明: *PA0:KEY1;PA1:KEY2; *PA2:LED1;PA3:LED2; *PA9:USART1_TX;PA10:USART1_RX */ #include stm32f10x.h #include stm32f10x_rcc.h #include stm32f10x_gpio.h #include stm32f10x_usart.h #include stm32f10x_exti.h #include system_stm32f10x.h #include misc.h void RCC_Configurati
[单片机]
STM32中单独设置GPIO端口高8位/低8位的方法
stm32的IO端口都是16位的, 如果要单独操作某高8位或低8位, 则不是那么简单, 先看两张BSRR/BRR寄存器的图: 据官方数据手册上面说, 这两个寄存器用于专门对ODR进行原子操作的位操作, 都是在置1的时候对某位有影响. 举例说下怎么对IO端口赋值: 1.对高8位/低8位/全部清零 很明显, 这个只需要操作BRR寄存器即可: 对高8位清零:GPIOA- BRR = 0xFF00 对低8位清零:GPIOA- BRR = 0x00FF 全部清零: GPIOA- BRR = 0xFFFF 或 GPIOA- ODR = 0x0000 当然了, 使用下面2,3的两个宏也可以完全该清零操作~ stm
[单片机]
<font color='red'>STM32</font>中单独设置GPIO端口高8位/低8位的方法
STM32 FOC SDK 上电电机自动旋转
默认的STM32F FOC SDK提供的工程文件下载到STM32以后不会电机不会自动转,想要让电机转,必须通过串口上位机ST Motor Control Workbench这个软件 若想脱离上位机让电机上电自动旋转,需要在main函数里面调用电机启动函数 UI_ExecCmd (oUI, MC_PROTOCOL_CMD_START_MOTOR); 根据UM1052 User manual STM32F PMSM single/dual FOC SDK v4.2手册中描述的可以利用FOC提供的UI函数来屏蔽底层驱动,直接在用户层编写程序 提供的函数定义在 UserInterfaceClass.c 中,
[单片机]

推荐帖子

KiCAD 6 快发布了,牛人整了一份与 5 的对比说明
KiCAD6快要发不了(到底多近了大家也不知道...大概率在今年的二季度和三季度交替时)彼得在他的的Blog上公布了两者的对比,改进还是蛮多了,支持弧线和一些新的走线辅助工具等等...===========================KiCad6.0预计将在2021年第二或第三季度发布,并且是自2018年以来的第一个主要版本。我花了1月的大部分时间来玩KiCad5.99夜间版本的KiCad夜间构建,最终将成为KiCad6.0。
qwqwqw2088 PCB设计
传感器网络操作系统TINYOS关键技术分析
摘要:在传感器网络中,作为上层协议和应用程序的运行基础的操作系统有别于传统的嵌入式操作系统,针对一个典型的传感器网络操作系统TinyOs,从其特点出发,采用与具体的组件代码相结合的方式,对其体系结构、运行机制和通讯机制等关键技术进行分析。传感器网络操作系统TINYOS关键技术分析..................
吸铁石上 RF/无线
简易智能液体加注装置
本帖最后由paulhyde于2014-9-1509:30编辑有人做过这个吗?求助啊谁有相关的资料好心人帮帮忙吧~简易智能液体加注装置本帖最后由paulhyde于2014-9-1509:30编辑需要机械支持。
yulipa520 电子竞赛
关于定时器的分频问题 求助
我想让定时器tim2实现1s一次中断但是不知道为什么代码下载到板子上发现非常快检查了时钟tim2的时钟频率是72M那么预分频系数设定为36000重装载为2000但是不管用代码如下:#includestm32f10x.hvoidttttt(void);voidGPIO_Configuration(void);voiddelay(u32t);inti=0;intmain(){RCC_APB2PeriphClockCmd(RCC_APB2Peri
cyhssw12 stm32/stm8
微波、射频电路设计
微波、射频电路设计东南大学毫米波国家重点实验室微波、射频电路设计谢谢楼主!!!!!!!!!!!!!!!!!!好东西回复楼主xtss的帖子学习谢谢分享东南大学(原来的南京工学院)是我国在RF领域的研究走在最前列的大学之一。那里的几个教授出的书相当经典谢谢楼主!!!!!!!!!!!!!!!!!!过段时间去面试,先补习一下,呵呵下载看看,好不好下载看看:rose:谢谢看看。。。下了,谢谢楼主好高深的样子,看不懂啊~谢楼主多谢楼主分享
xtss RF/无线
散热第一步是导热
本期给大家带来的是关于导热材料相关技术的研究内容,希望对大家有帮助。随着电子产品,材料、结构、空间尺寸等限制,功率密度越来越大,对发热元器件的散热带来了挑战,所以有很多更高效的解决方案被挖掘,诸如热管、VC、叶脉冷泵系统等,能更快的将系统整体发热量带到外部。根据整个散热系统路径,可以看出,最底层也是最基础的一环,其实是在元器件的导热部分,如果发热元器件的发热量不能有效的传递给散热端,即使外部散热能力再好,最终也会形成热堆积,导致元器件过热,影响其工作稳定性,甚至缩短使用寿命。
aoqi PCB设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved