当前位置:
文档之家› 嵌入式_USART 串口通讯
嵌入式_USART 串口通讯
/* Loop until USARTy DR register is empty */
while(USART_GetFlagStatus(USARTy, USART_FLAG_TXE) == RESET)
{
}
/* Loop until the USARTz Receive Data Register is not empty */
LCD_Clear(White);
/* Set the LCD Text Color */
LCD_SetTextColor(Black);
printf(" STM3210C-EVAL \n");
printf("USART with interrupt\n");
/* Check the received data with the send ones */
USART_ART_WordLength = USART_WordLength_8b;
USART_ART_StopBits = USART_StopBits_1;
USART_ART_Parity = USART_Parity_Even;
3.储存池进行数据传输
即在RAM中定义了两个缓冲器一个为TXBuffer,一个为RXBuffer, TXBuffer用来存
储USART2要发送给USART3的数据,当USART3收到USART2发送的数据后,把数据存
入了RXBuffer这个缓冲器中,这就是利用存储池来进行数据传输。
【步骤与现象】
1.连接仿真器,打开目标板的电源开关。
int main(void)
{/* System Clocks Configuration */
RCC_Configuration();
/* Configure the GPIO ports */
GPIO_Configuration();
USART_ART_BaudRate = 230400;
智能卡协议和IrDA(红外数据组织)SIR ENDEC规范,以及调制解调器(CTS/RTS)操作。它还
允许多处理器通信。使用多缓冲器配置的DMA方式,可以实现高速数据通信。
2. USART特性
全双工的,异步通信
NRZ标准格式
分数波特率发生器系统
─发送和接收共用的可编程波特率,最高达4.5Mbits/s
USART
【实验目的】
学习USART的特性及功能
学习USART串口通讯的使用
【实验原理】
1. USART介绍
通用同步异步收发器(USART)提供了一种灵活的方法与使用工业标准NRZ异步串行
数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范
围的波特率选择。它支持同步单向通信和半双工单线通信,也支持LIN(局部互连网),
USART_Init(USARTy, &USART_InitStructure);
/* Configure USARTz */
USART_Init(USARTz, &USART_InitStructure);
/* Enable the USARTy */
USART_Cmd(USARTy, ENABLE);
if(Buffercmp(TxBuffer, RxBuffer, TxBufferSize))
printf("UART2 transmitted successful\n");
else
printf("UART2 transmitted failed\n");
/* TransferStatus = PASSED, if the data transmitted from USARTz and
USARTy和USARTz的参数配置如下
波特率= 230400 baud
字长= 8 Bits
一个停止位
偶校验
无硬件流控制
4.配置
连接USART2 Tx引脚(PD.05) to USART3 Rx引脚(PC.11)
连接USART2 Rx引脚(PD.06) to USART3 Tx引脚(PC.10)
观察LCD显示传输成功与否。
─智能卡用到的0.5和1.5个停止位
单线半双工通信
可配置的使用DMA的多缓冲器通信
─在SRAM里利用集中式DMA缓冲接收/发送字节
单独的发送器和接收器使能位
检测标志
─接收缓冲器满
─发送缓冲器空
─传输结束标志
校验控制
─发送校验位
─对接收数据进行校验
四个错误检测标志
─溢出错误通用同步异步收发器(USART)
USART_ART_HardwareFlowControl =
USART_HardwareFlowControl_None;
USART_ART_Mode = USART_Mode_Rx | USART_Mode_Tx;
/* Configure USARTy */
received by USARTy are the same */
/* TransferStatus = FAILED, if the data transmitted from USARTz and
received by USARTy are different */
while (1)
{ }}
传输完成后:
可编程数据字长度(8位或9位)
可配置的停止位-支持1或2个停止位
LIN主发送同步断开符的能力以及LIN从检测断开符的能力
─当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符
发送方为同步传输提供时钟
IRDA SIR编码器解码器
─在正常模式下支持3/16位的持续时间
智能卡模拟功能
─智能卡接口支持ISO7816-3标准里定义的异步智能卡协议
}
/* Enable the USART3 Pins Software Remapping */
GPIO_PinRemapConfig(GPIO_PartialRemap_USART3, DISABLE);
/* Initialize the LCD */
STM3210C_LCD_Init();
/* Clear the LCD */
3.程序说明:
该示例程序演示了通过数据池方式,在两个串口之间传递数据,对于STM3210C开
发板来说,这两个串口分别是USART2和USART3。
通过USARTy将TxBuffer发送给USARTz.然后USARTz读取接收到的数据,将他们存
放在RxBuffer.最后比较发送和接收的数据,检查传输是否正确。
while(USART_GetFlagStatus(USARTz, USART_FLAG_RXNE) == RESET)
{
}
/* Store the received byte in RxBuffer */
RxBuffer[RxCounter++] = (USART_ReceiveData(USARTz) & 0x7F);
传输完成前:
─噪音错误
─帧错误
─校验错LIN断开符检测
─发送数据寄存器空
─发送完成
─接收数据寄存器满
─检测到总线为空闲
─溢出错误
─帧错误
─噪音错误
─校验错误
多处理器通信--如果地址不匹配,则进入静默模式
从静默模式中唤醒(通过空闲总线检测或地址标志检测)
两种唤醒接收器的方式:地址位(MSB,第9位),总线空闲
/* Enable the USARTz */
USART_Cmd(USARTz, ENABLE);
while(TxCounter < TxBufferSize)
{
/* Send one byte from USARTy to USARTz */
USART_SendData(USARTy, TxBuffer[TxCounter++]);
2.打开示例程序工程
\basic_examples\STM32F10x_StdPeriph_Examples\16-USART\01-Polling\RVMDK,
选择进行程序的编译,然后选择,把程序烧进板里,按一下板上的复
位键,就可以运行程序了,当然你也可以进入调试模式按,然后按F10单
步调试,要想进入具体函数可以按F11。