比如说串口接收到"56"如何才能把5存到[0]把6存到[1]当中去呢?
首先存入缓冲区 char[],然后按照\0切割成字符串
char Rx[] = "56";
char buf[];
buf[0] = Rx[0];
buf[1] = Rx[1];
函数和定义主要分布在 stm32f10x_usart.h 和 stm32f10x_usart.c 文件中。
1.串口时钟使能 串口是挂载在 APB2 下面的外设,所以使能函数为:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
2.串口复位 当外设出现异常的时候可以通过复位设置,实现该外设的复位,然后重新配置
这个外设达到让其重新工作的目的。
复位的是在函数 USART_DeInit()中完成:
void USART_DeInit(USART_TypeDef* USARTx);//串口复位
复位串口 1,方法为:
USART_DeInit(USART1); //复位串口 1
3.串口参数初始化 串口初始化是通过 USART_Init()函数实现的,
void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);
第二个入口参数是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* USARTx, uint16_t Data);
STM32 库函数操作 USART_DR 寄存器读取串口接收到的数据的函数是:
uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
6.串口使能 串口使能是通过函数 USART_Cmd()来实现的
USART_Cmd(USART1, ENABLE); //使能串口
7.开启串口响应中断 使能串口中断的函数是:
void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState)
开启其中之一的中断的方法是:
USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启中断,接收到数据中断
发送数据结束的时候要产生中断:
USART_ITConfig(USART1,USART_IT_TC,ENABLE);
8.获取相应中断状态 在中断处理函数中,要判断该中断是哪种中断,使用的函数是:
ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT)
判断是否是串口发送完成中断:
USART_GetITStatus(USART1, USART_IT_TC)
返回值是 SET,说明是串口发送完成中断发生。