选择特殊符号
选择搜索类型
请输入搜索
USART收发模块一般分为三大部分:时钟发生器、数据发送器和接收器。控制寄存器为所有的模块共享。
时钟发生器由同步逻辑电路(在同步从模式下由外部时钟输入驱动)和波特率发生器组成。发送时钟引脚XCK仅用于同步发送模式下,
发送器部分由一个单独的写入缓冲器(发送UDR)、一个串行移位寄存器、校验位发生器和用于处理不同帧结构的控制逻辑电路构成。使用写入缓冲器,实现了连续发送多帧数据无延时的通信。
接收器是USART模块最复杂的部分,最主要的是时钟和数据接收单元。数据接收单元用作异步数据的接收。除了接收单元,接收器还包括校验位校验器、控制逻辑、移位寄存器和两级接收缓冲器(接收UDR)。接收器支持与发送器相同的帧结构,同时支持帧错误、数据溢出和校验错误的检测。
与UART兼容性
AVR USART 和AVR UART 兼容性 USART 在如下方面与AVR UART 完全兼容:
· 所有USART 寄存器的位定义。
· 波特率发生器。
· 发送器操作。
· 发送缓冲器的功能。
· 接收器操作。
然而,接收器缓冲器有两个方面的改进,在某些特殊情况下会影响兼容性:
· 增加了一个缓冲器。两个缓冲器的操作好象是一个循环的FIFO。因此对于每个接收到的数据只能读一次!更重要的是错误标志FE 和DOR,以及第9 个数据位RXB8与数据一起存放于接收缓冲器。因此必须在读取UDR 寄存器之前访问状态标志位。否则将丢失错误状态。
· 接收移位寄存器可以作为第三级缓冲。在两个缓冲器都没有空的时候,数据可以保存于串行移位寄存器之中( 参见 Figure 61),直到检测到新的起始位。从而增强了 USART 抵抗数据过速(DOR) 的能力。
下面的控制位的名称做了改动,但其功能和在寄存器中的位置并没有改变:
· CHR9改为UCSZ2。
· OR改为DOR。
时钟产生时钟产生逻辑为发送器和接收器产生基础时钟。USART 支持4 种模式的时钟: 正常的异步模式,倍速的异步模式,主机同步模式,以及从机同步模式。USART 控制位UMSEL和状态寄存器C (UCSRC) 用于选择异步模式和同步模式。倍速模式( 只适用于异步模式) 受控于UCSRA 寄存器的U2X。使用同步模式 (UMSEL = 1) 时,XCK 的数据方向寄存器 (DDR_XCK)决定时钟源是由内部产生(主机模式)还是由外部生产(从机模式)。仅在同步模式下XCK 有效。
片内时钟产生-波特率发生器内部时钟用于异步模式与同步主机模式。
USART 的波特率寄存器UBRR 和降序计数器相连接,一起构成可编程的预分频器或波特率发生器。降序计数器对系统时钟计数,当其计数到零或UBRRL 寄存器被写时,会自动装入UBRR 寄存器的值。当计数到零时产生一个时钟,该时钟作为波特率发生器的输出时钟,输出时钟的频率为fosc/(UBRR 1)。发生器对波特率发生器的输出时钟进行2、8或16 的分频,具体情况取决于工作模式。波特率发生器的输出被直接用于接收器与数据恢复单元。数据恢复单元使用了一个有2、8或16个状态的状态机,具体状态数由UMSEL、U2X 与 DDR_XCK 位设定的工作模式决定。
STM32 USART的使用(基于库函数版本)
对中断需要用到的的默认的两个管脚PA9和PA10的模式进行设置.
* 注意:不要忘记RCC的设置!STM32的结构决定了用任何一个外设 * 就必须设置相应的使能时钟。USART1的使能时钟位是在APB2中的 * 本例中对应函数UART1_GPIO_Configuration()
* 2: 对USART的数据格式进行设置,即发送数据的数据位、校验位等.
* 本例对应函数为UART1_GPIO_Configuration()
* 注:对于数据是以上升沿还是下降沿有效,可以设置也可以不设 * 置,如果不设置,则系统采用默认值。本例中将其屏蔽。 * 3: 在主函数中调用以上两个函数,然后用库函数USART_SendData()
* 发送数据,用USART_GetFlagStatus(USART1, USART_FLAG_TXE) * 查询中断即可。
#include
void delay(u32 x) //延时函数,u32是库函数中定义好的宏,意为无符号32位整数 {
while(x--);}
/********************************************************************** * Name : UART1_GPIO_Configuration * Deion : Configures the uart1 GPIO ports. * Input : None * Output : None * Return : None
void UART1_GPIO_Configuration(void) //注意:不是库函数,而是自己定义的GPIO初始化函数,
{
GPIO_InitTypeDef GPIO_InitStructure;
//定义GPIO管脚初始化结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
//本函数(使能时钟)参数中,RCC_APB2Periph_USART1是必不可少的,有人会问,对于串口用到的PA9和
//PA10不用使能时钟吗?其实由于USART1默认的就是PA9和PA10,所以这一个就行了,当然你要是加上 //这个|RCC_APB2Periph_GPIOA也是不报错的,只是重复了。
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
//选中串口默认输出管脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//定义输出最大速率
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //定义管脚9的模式
GPIO_Init(GPIOA, &GPIO_InitStructure); //调用函数,把结构体参数输入进行初始化
// Configure USART1_Rx as input floating
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //同上
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//设置上浮模式
GPIO_Init(GPIOA, &GPIO_InitStructure);
//同上
* Name : UART1_Configuration * Deion : Configures the uart1 * Input : None * Output : None * Return : None
*******************************************************************************/ void USART_Configuration(void) {
USART_InitTypeDef USART_InitStructure; //定义串口初始化结构体
/*USART_ClockInitTypeDef USART_ClockInitStructure;//定义串口模式初始化结构体
USART_ClockInitStructure.USART_Clock = USART_Clock_Enable;// USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low; USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; USART_ClockInit(USART1,&USART_ClockInitStructure); */
USART_InitStructure.USART_BaudRate = 9600; //设置串口通信时的波特率9600
USART_InitStructure.USART_WordLength = USART_WordLength_8b;//设置数据位的长度8个位 USART_InitStructure.USART_StopBits = USART_StopBits_1; //设置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);
//将以上赋完值的结构体带入库函数USART_Init进行初始化
USART_Cmd(USART1, ENABLE);//开启USART1,注意与上面RCC_APB2PeriphClockCmd()设置的区别
}
int main(void)
UART1_GPIO_Configuration(); //调用GPIO初始化函数 USART_Configuration(); //调用USART配置函数 while(1)
//大循环
{
USART_SendData(USART1, 'A'); //发送一位数据
while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET); //判断是否发送完毕 delay(0XFFFFF); //延时
2100433B
1. 全双工操作(相互独立的接收数据和发送数据);
2. 同步操作时,可主机时钟同步,也可从机时钟同步;
3. 独立的高精度波特率发生器,不占用定时/计数器;
4. 支持5、6、7、8和9位数据位,1或2位停止位的串行数据帧结构;
5. 由硬件支持的奇偶校验位发生和检验;
6. 数据溢出检测;
7. 帧错误检测;
8. 包括错误起始位的检测噪声滤波器和数字低通滤波器;
9. 三个完全独立的中断,TX发送完成、TX发送数据寄存器空、RX接收完成;
10.支持多机通信模式;
11.支持倍速异步通信模式。
UART与USART单片机串口通信的区别
UART与USART都是单片机上的串口通信,他们之间的区别如下:
首先从名字上看:
UART:universal asynchronous receiver and transmitter通用异步收/发器
USART:universal synchronous asynchronous receiver and transmitter通用同步/异步收/发器
从名字上可以看出,USART在UART基础上增加了同步功能,即USART是UART的增强型,事实也确实是这样。但是具体增强到了什么地方呢?
其实当我们使用USART在异步通信的时候,它与UART没有什么区别,但是用在同步通信的时候,区别就很明显了:大家都知道同步通信需要时钟来触发数据传输,也就是说USART相对UART的区别之一就是能提供主动时钟。如STM32的USART可以提供时钟支持ISO7816的智能卡接口。
任何一个微处理器都要与一定数量的部件和外围设备连接,但如果将各部件和每一种外围设备都分别用一组线路与CPU直接连接,那么连线将会错综复杂,甚至难以实现。为了简化硬件电路设计、简化系统结构,常用一组线路,配置以适当的接口电路,与各部件和外围设备连接,这组共用的连接线路被称为总线。采用总线结构便于部件和设备的扩充,尤其制定了统一的总线标准则容易使不同设备间实现互连。
微机中总线一般有内部总线、系统总线和外部总线。内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连;而系统总线是微机中各插件板与系统板之间的总线,用于插件板一级的互连;外部总线则是微机和外部设备之间的总线,微机作为一种设备,通过该总线和其他设备进行信息与数据交换,它用于设备一级的互连。
另外,从广义上说,计算机通信方式可以分为并行通信和串行通信,相应的通信总线被称为并行总线和串行总线。并行通信速度快、实时性好,但由于占用的口线多,不适于小型化产品;而串行通信速率虽低,但在数据通信吞吐量不是很大的微处理电路中则显得更加简易、方便、灵活。串行通信一般可分为异步模式和同步模式。
随着微电子技术和计算机技术的发展,总线技术也在不断地发展和完善,而使计算机总线技术种类繁多,各具特色。下面仅对微机各类总线中目前比较流行的总线技术分别加以介绍。
一、内部总线
1.I2C总线
I2C(Inter-IC)总线10多年前由Philips公司推出,是近年来在微电子通信控制领域广泛采用的一种新型总线标准。它是同步通信的一种特殊形式,具有接口线少,控制方式简化,器件封装形式小,通信速率较高等优点。在主从通信中,可以有多个I2C总线器件同时接到I2C总线上,通过地址来识别通信对象。
2.SPI总线
串行外围设备接口SPI(serialperipheralinterface)总线技术是Motorola公司推出的一种同步串行接口。Motorola公司生产的绝大多数MCU(微控制器)都配有SPI硬件接口,如68系列MCU。SPI总线是一种三线同步总线,因其硬件功能很强,所以,与SPI有关的软件就相当简单,使CPU有更多的时间处理其他事务。
3.SCI总线
串行通信接口SCI(serialcommunicationinterface)也是由Motorola公司推出的。它是一种通用异步通信接口UART,与MCS-51的异步通信功能基本相同。
4.CAN总线
属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通信网络。较之目前许多RS-485基于R线构建的分布式控制系统而言,基于CAN总线的分布式控制系统在以下方面具有明显的优越性。只有2根线与外部相连,并且内部集成了错误探测和管理模块。
二、系统总线
1.ISA总线
ISA(industrialstandardarchitecture)总线标准是IBM公司1984年为推出PC/AT机而建立的系统总线标准,所以也叫AT总线。它是对XT总线的扩展,以适应8/16位数据总线要求。它在80286至80486时代应用非常广泛,以至于现在奔腾机中还保留有ISA总线插槽。ISA总线有98只引脚。
2.EISA总线
EISA总线是1988年由Compaq等9家公司联合推出的总线标准。它是在ISA总线的基础上使用双层插座,在原来ISA总线的98条信号线上又增加了98条信号线,也就是在两条ISA信号线之间添加一条EISA信号线。在实用中,EISA总线完全兼容ISA总线信号。
3.VESA总线
VESA(videoelectronicsstandardassociation)总线是1992年由60家附件卡制造商联合推出的一种局部总线,简称为VL(VESAlocalbus)总线。它的推出为微机系统总线体系结构的革新奠定了基础。该总线系统考虑到CPU与主存和Cache的直接相连,通常把这部分总线称为CPU总线或主总线,其他设备通过VL总线与CPU总线相连,所以VL总线被称为局部总线。它定义了32位数据线,且可通过扩展槽扩展到64位,使用33MHz时钟频率,最大传输率达132MB/s,可与CPU同步工作。是一种高速、高效的局部总线,可支持386SX、386DX、486SX、486DX及奔腾微处理器。
4.PCI总线
PCI(peripheralcomponentinterconnect)总线是当前最流行的总线之一,它是由Intel公司推出的一种局部总线。它定义了32位数据总线,且可扩展为64位。PCI总线主板插槽的体积比原ISA总线插槽还小,其功能比VESA、ISA有极大的改善,支持突发读写操作,最大传输速率可达132MB/s,可同时支持多组外围设备。PCI局部总线不能兼容现有的ISA、EISA、MCA(microchannelarchitecture)总线,但它不受制于处理器,是基于奔腾等新一代微处理器而发展的总线。
5.CompactPCI
以上所列举的几种系统总线一般都用于商用PC机中,在计算机系统总线中,还有另一大类为适应工业现场环境而设计的系统总线,比如STD总线、VME总线、PC/104总线等。这里仅介绍当前工业计算机的热门总线之一——CompactPCI。
CompactPCI的意思是“坚实的PCI”,是当今第一个采用无源总线底板结构的PCI系统,是PCI总线的电气和软件标准加欧式卡的工业组装标准,是当今最新的一种工业计算机标准。CompactPCI是在原来PCI总线基础上改造而来,它利用PCI的优点,提供满足工业环境应用要求的高性能核心系统,同时还考虑充分利用传统的总线产品,如ISA、STD、VME或PC/104来扩充系统的I/O和其他功能。
三、外部总线
1.RS-232-C总线
RS-232-C是美国电子工业协会EIA(ElectronicIndustryAssociation)制定的一种串行物理接口标准。RS是英文“推荐标准”的缩写,232为标识号,C表示修改次数。RS-232-C总线标准设有25条信号线,包括一个主通道和一个辅助通道,在多数情况下主要使用主通道,对于一般双工通信,仅需几条信号线就可实现,如一条发送线、一条接收线及一条地线。RS-232-C标准规定的数据传输速率为每秒50、75、100、150、300、600、1200、2400、4800、9600、19200波特。RS-232-C标准规定,驱动器允许有2500pF的电容负载,通信距离将受此电容限制,例如,采用150pF/m的通信电缆时,最大通信距离为15m;若每米电缆的电容量减小,通信距离可以增加。传输距离短的另一原因是RS-232属单端信号传送,存在共地噪声和不能抑制共模干扰等问题,因此一般用于20m以内的通信。
2.RS-485总线
在要求通信距离为几十米到上千米时,广泛采用RS-485串行总线标准。RS-485采用平衡发送和差分接收,因此具有抑制共模干扰的能力。加上总线收发器具有高灵敏度,能检测低至200mV的电压,故传输信号能在千米以外得到恢复。RS-485采用半双工工作方式,任何时候只能有一点处于发送状态,因此,发送电路须由使能信号加以控制。RS-485用于多点互连时非常方便,可以省掉许多信号线。应用RS-485可以联网构成分布式系统,其允许最多并联32台驱动器和32台接收器。
3.IEEE-488总线
上述两种外部总线是串行总线,而IEEE-488总线是并行总线接口标准。IEEE-488总线用来连接系统,如微计算机、数字电压表、数码显示器等设备及其他仪器仪表均可用IEEE-488总线装配起来。它按照位并行、字节串行双向异步方式传输信号,连接方式为总线方式,仪器设备直接并联于总线上而不需中介单元,但总线上最多可连接15台设备。最大传输距离为20米,信号传输速度一般为500KB/s,最大传输速度为1MB/s。
4.USB总线
通用串行总线USB(universalserialbus)是由Intel、Compaq、Digital、IBM、Microsoft、NEC、NorthernTelecom等7家世界著名的计算机和通信公司共同推出的一种新型接口标准。它基于通用连接技术,实现外设的简单快速连接,达到方便用户、降低成本、扩展PC连接外设范围的目的。它可以为外设提供电源,而不像普通的使用串、并口的设备需要单独的供电系统。另外,快速是USB技术的突出特点之一,USB的最高传输率可达12Mbps比串口快100倍,比并口快近10倍,而且USB还能支持多媒体。
系列:ATMEGA
闪存容量:32KB
EEPROM存储器容量:1KB
存储器容量,:RAM 2KB
输入/输出线数:32
模数转换器输入数:7
计时器数:3
PWM通道数:4
时钟频率:16MHz
接口类型:JTAG, SPI, USART
电源电压:2.7V to 5.5V
封装类型:QFP
针脚数:44
工作温度范围:-40°C to 85°C