STM32的USART操作

来源:本站
导读:目前正在解读《STM32的USART操作》的相关信息,《STM32的USART操作》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《STM32的USART操作》的详细说明。
简介:通用同步异步收发器(USART)提供了一种灵活的方法来与使用工业标准NR 异步串行数据格式的外部设备之间进行全双工数据交换。USART利用分数波特率发生器提供宽范围的波特率选择。

通用同步异步收发器支持同步单向通信和半双工单线通信。它也支持LIN(局部互连网),智能卡协议和IrDA(红外数据组织)SIRENDEC规范,以及调制解调器(CTS/RTS)操作。它还允许多处理器通信。用于多缓冲器配置的DMA方式,可以实现高速数据通信。

主要特性:

全双工的,异步通信

NR 标准格式

分数波特率发生器系统

-发送和接收共用的可编程波特率,最高到4.5Mbits/s

可编程数据字长度(8位或9位)

可配置的停止位 -支持1或2个停止位

LIN主发送同步断开符的能力以及LIN从检测断开符的能力

- 当USART硬件配置成LIN时,生成13位断开符;检测10/11位断开符

发送方为同步传输提供时钟

IRDA SIR 编码器解码器

- 在正常模式下支持3/16位的持续时间

智能卡模拟功能

- 智能卡接口支持ISO7816 -3标准里定义的异步协议智能卡

- 智能卡用到的0.5和1.5个停止位

单线半双工通信

使用DMA的可配置的多缓冲器通信//

- 在保留的SRAM里利用集中式DMA缓冲接收/发送字节

单独的发送器和接收器使能位

检测标志

- 接收缓冲器满

- 发送缓冲器空

- 传输结束标志

校验控制

- 发送校验位

- 对接收数据进行校验

四个错误检测标志

- 溢出错误

- 噪音错误

- 帧错误

- 校验错误

10个带标志的中断源

- CTS改变

- LIN断开符检测

- 发送数据寄存器

- 发送完成

- 接收数据寄存器

- 检测到总线为空

- 溢出错误

- 帧错误

- 噪音错误

- 校验错误

多处理器通信 - - 如果地址不匹配,则进入静默模式

从静默模式中唤醒(通过空闲总线检测或地址标志检测)

两种唤醒接收器的方式

- 地址位(MSB)

- 空闲总

按以下步骤来配置USART

1.配置RXD TXD管脚参数

2.配置GPIOx时钟以及USART时钟

3.由于要使用串口接收中断,需要配置NVIC

4.串口相关参数配置,使能串口,使能中断以下是我写的一个简单的串口收发程序

USART_InitTypeDefUSART1_InitStruct={9600,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,

USART_Mode_Rx|USART_Mode_Tx,USART_HardwareFlowControl_None};

void USART1_GPIO_Init()

{//这样做的好处是不用初始化结构体内的每个值

GPIO_InitTypeDefGPIO_InitStructure;//定义GPIO_InitTypeDef类型的结构体成员GPIO_InitStructure

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_9; //PA9-TX1 引脚

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AF_PP; //复用推挽输出

GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin =GPIO_Pin_10; //PA10-RX1引脚//

GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //浮空输入

GPIO_Init(GPIOA,&GPIO_InitStructure);

}

void USART1_Init()

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE);//时钟配置

USART1_GPIO_Init();//配置串口1的管脚 //PA9-TX1 引脚(复用推挽输出),PA10-RX1引脚(浮空输入)

//GPIO_Init(GPIOA,&GPIOA_9_Init);

//GPIO_Init(GPIOA,&GPIOA_10_Init);

USART_DeInit(USART1);//复位串口1

USART_Init(USART1,&USART1_InitStruct);//初始化串口1的参数

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

USART_ITConfig(USART1, USART_IT_RXNE,ENABLE);

}

void UART1_Send_byte(USART_TypeDef* USARTx,u8 Data)

{

USART_SendData(USARTx,(u8)Data);

while(USART_GetFlagStatus(USART1, USART_FLAG_TXE)== RESET);

}

void NVIC_Configuration()

{

NVIC_InitTypeDef NVIC_InitStructure;

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);// 抢占式优先级别

NVIC_InitStructure.NVIC_IRQChannel=USART1_IRQChannel;//指定中断源

NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;// 指定响应优先级别1

NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;

NVIC_Init(&NVIC_InitStructure);

}

int main(void)

{

Stm32_Clock_Init(9); //系统时钟设置

delay_init(72); //延时初始化

USART1_Init();

NVIC_Configuration();

while(1)

{

if(flag_send)

{

UART1_Send_byte(USART1,0xce);

UART1_Send_byte(USART1,0xd2);

flag_send=0;

}

}

}

void USART1_IRQHandler(void)//

{

if(USART_GetFlagStatus(USART1,USART_IT_RXNE)==SET)

{

USART_ClearITPendingBit(USART1,USART_IT_RXNE);//清除中断标志

R[0]=USART_ReceiveData(USART1);

if(R[0]==0x32)flag_send=1;

}

}

提醒:《STM32的USART操作》最后刷新时间 2024-03-14 01:08:11,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《STM32的USART操作》该内容的真实性请自行鉴别。