STM32的串口的理解(库函数)
串口设置的一般步骤
1、串口的时钟使能
例:RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
2、串口复位
当外设出现异常的时候可以通过复位设置实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。复位函数是在函数USART_DeInit()
中完成:void USART_DeInit(USART_TypeDef * USARTx);
例:USART_DeInit(USART1);
3、串口参数初始化
串口初始化是通过USART_Init()函数实现的,void USART_Init(USART_TypeDef * USARTx, USART_InitTypeDef * USART_InitStruct);
这里函数的第一个入口参数是指定初始化的串口标号,这里选USART1。第二个入口参数是一个USART_InitTypeDef类型的结构体指针,一般实现格式为:
USART_InitStructure.USART_BaudRate=bound; //波特率设置
USART_InitStructure.USART_WordLength=USART_WordLength_8b; //字长为8位数据格式
USART_InitStructure.USART_StopBits=USART_StopBits_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); //初始化串口
4、数据发送与接收
STM32的发送与接收是通过数据寄存器USART_DR来实现,这是一个双寄存器,包含了TDR和RDR。当向该寄存器写数据的时候,串口就会自动发送;当收到数据的时候,也是存在该寄存器内。
STM32库函数操作USART_DR寄存器发送数据的函数是:
void USART_SendData(USART_TypeDef * USART x,uint16_t DATA);
通过该函数向串口寄存器USART_DR写入一个数据。
unit16_t USART_ReceiveData(USART_TypeDef * USARTx,uint16_t Data);
通过该函数可以读取串口接收到的数据。
5、串口状态
串口状态可以通过状态寄存器USART_SR读取。寄存器的第5,6位RXEN(读数据寄存器非空)和TC(发送完成)重要。
判断读寄存器是否非空,操作库函数的方法是:
USART_GetFlagStatus(USART1,USART_FLAG_RXNE);
判断发送是否完成(TC),操作库函数的方法是:
USART_GetFlagStatus(USART1,USART_FLAG_TC);
6、串口使能
USART_Cmd(USART1,ENABLE);
7、开启串口响应中断
比如接收到数据的时候(RXEN读数据寄存器非空)要产生中断,那么开启中断的方法是:
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE);
在发送数据结束的时候(TC,发送完成)要产生中断,那么方法是:
USART_ITConfig(USART1,USART_IT_TC,ENABLE);
8、获取相应的中断状态
我们可以在中断处理函数中调用这个函数阿来判断串口发送完成中断。
USART_GetITStatus(USART1,USART_IT_TC);
返回值是SET说明串口完成中断。
更详细的介绍可以参考《STM32参考手册》第516~548页。