stm32串口使用

stm32串口使用
stm32串口使用

stm32串口使用

查询方式使用串口

1、配置时钟,由于使用串口是在复用IO口,需要打开串口时钟和相应的IO口时钟。

2、配置IO口,串口相应的IO口需要配置,输出口配置成复用推挽输出,输出速度根据需

要配置,输入口配置为悬空输入。

3、配置串口,主要包括波特率、数据长度、停止位、奇偶校验、硬件流控制、接收发送模

式。

4、最后打开串口

例子

/*************************************************************

配置串口1,引脚为PA.09,PA.10,串口引脚配置,开启时钟,打开串口

功能:配置USART1,配置PA.09,PA.10,开启串口时钟,打开串口

入口参数:无

出口参数:无

**************************************************************/

void Config_Usart1(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

//配置USATR1时钟,同时打开引脚时钟和USART1时钟

RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

//配置USART1的TX,PA.09,推挽输出

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//配置USART1的RX,PA.10 为input floating

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure);

//USART1 模式配置9600 9位数据,偶校验,不使用硬件流控制,发送和接收

USART_https://www.360docs.net/doc/f38119710.html,ART_BaudRate = 9600;

USART_https://www.360docs.net/doc/f38119710.html,ART_WordLength = USART_WordLength_9b;

USART_https://www.360docs.net/doc/f38119710.html,ART_StopBits = USART_StopBits_1;

USART_https://www.360docs.net/doc/f38119710.html,ART_Parity = USART_Parity_Even;

USART_https://www.360docs.net/doc/f38119710.html,ART_HardwareFlowControl=USART_HardwareFlowControl_None;

USART_https://www.360docs.net/doc/f38119710.html,ART_Mode = USART_Mode_Rx | USART_Mode_Tx;

//初始化USART1,打开USART1

USART_Init(USART1, &USART_InitStructure);

USART_Cmd(USART1, ENABLE);

}

/****************************************************************

功能:接收一个字节的数据

入口参数:无

出口参数:返回收到的数据

*****************************************************************/

uint8_t error_evenflag = 0x01;//串口接收偶校验错误标志

uint8_t rxdata;//存储收到的数据

uint8_t Receive_OneByte(void)

{

//uint8_t rxdata;

if(USART_GetITStatus(USART1, USART_IT_RXNE)!= RESET)//串口收到数据

{

if(USART_GetITStatus(USART1, USART_FLAG_PE) == RESET)//偶校验正确

{

rxdata = USART_ReceiveData(USART1);

}

else

{

error_evenflag = 0x00;//偶校验错误时置0

return error_evenflag;

}

}

return rxdata;

}

/****************************************************************

USATR1 发送一个字节

功能:发送一个字节的数据

入口参数:发送到数据

出口参数:无

*****************************************************************/

void Send_OneByte(uint8_t onebyte)

{

while(RESET == USART_GetFlagStatus(USART1, USART_FLAG_TC));//等待发送完毕USART_SendData(USART1, onebyte);

}

相关主题
相关文档
最新文档