串口通信实验

一.参考资料

  • 探索者STM32F4开发板:

《STM32F4开发指南库函数版本》- 5.3小节usart文件夹介绍

​ 第9章串口通信实验

  • stm32F4xx官方资料:

《stm32F4xx中文参考手册》 -第26章 通用同步异步收发器

二.STM32串口常用 库函数

1.u串口操作相关库函数(省略入口参数):

void USART_Init(); //串口初始化:波特率,数据字长,奇偶校验,硬件流控以及收发使能
void USART_Cmd();//使能串口
void USART_ITConfig();//使能相关中断

void USART_SendData();//发送数据到串口,DR
uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

FlagStatus USART_GetFlagStatus();//获取状态标志位
void USART_ClearFlag();//清除状态标志位
ITStatus USART_GetITStatus();//获取中断状态标志位
void USART_ClearITPendingBit();//清除中断状态标志位

三.串口配置一般步骤

  1. 串口时钟使能:RCC_APBxPeriphClockCmd();

GPIO时钟使能:RCC_AHB1PeriphClockCmd();

  1. 引脚复用映射:GPIO_PinAFConfig();
  2. GPIO端口模式设置:GPIO_Init(); 模式设置为GPIO_Mode_AF
  3. 串口参数初始化:USART_Init();
  4. 开启中断并且初始化NVIC(如果需要开启中断才需要这个步骤)

NVIC_Init();

USART_ITConfig();

  1. 使能串口:USART_Cmd();
  2. 编写中断处理函数:USARTx_IRQHandler();
  3. 串口数据收发:

void USART_SendData();//发送数据到串口,DR

uint16_t USART_ReceiveData();//接受数据,从DR读取接受到的数据

  1. 串口传输状态获取:

FlagStatus USART_GetFlagStatus();

void USART_ClearITPendingBit();

四.Printf支持

//加入以下代码,支持printf函数,而不需要选择use MicroLIB      
#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ int handle; 
}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_sys_exit(int x) 
{ x = x; } 

//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
   return ch;
}
#endif 

五.实验原理

  1. define USART_REC_LEN 200 //定义最大接收字节数200

  2. u8 USART_RX_BUF[USART_REC_LEN];

//接收缓冲,最大USART_REC_LEN个字节。末字节为换行符。

  1. u16 USART_RX_STA; //接收状态标记
USART_RX_STAUSART_RX_STAUSART_RX_STA
bit15bit14bit13~0
接收完成标志(0X0A)接收到0X0D标志接收到的有效数据个数

程序要求,发送的字符是以回车换行结束(0x0D,0x0A)

即ABCDEFGHI…….(0x0D),(0x0A)

最后修改:2020 年 02 月 06 日 11 : 52 AM
如果觉得我的文章对你有用,请随意赞赏