|
//串口的设置
1.串口使能,GPIO时钟使能
2.串口复位
3.GPIO端口模式设置
4.串口参数初始化
5.开启中断并且初始化NVIC(如果需要开启中断)
6.使能串口
7.编写中断处理函数
//串口时钟使能(APB2)
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1);
//串口复位
void USART_DeInit(USART_TypeDef* USARTx);
//串口参数初始化
void USART_Init(USART_TypeDef* USARTx,USART_InitTypeDef* USART_InitStruct);
//实现格式
1.波特率 2.字长 3.停止位 4.奇偶校验位 5.硬件数据控制 6.模式
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); //初始化
//数据发送与接收(USART_DR包括TDR和RDR)
发送数据:void USART_SendData(USART_TypeDef* USARTx,uint16_t Date);
读出数据:uint16_t USART_ReceiveData(USART_TypeDef* USARTx);
//串口状态(USART_SR)
RXNE(读数据寄存器非空),置1表示数据接收到,读取,清零
TC(发送完成)
读取串口状态的函数
FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx,uint16_t USART_FLAG);
1.判断寄存器是否为非空
USART_GetFlagStatus(USART1,USART_FLAG_RXNE); //USART_FLAG_RXNE是(uint16_t)0x0525 //typedefint int16_t; typedefunsigned int uint16_t;
2.判断发送是否完成
USART_GetFlagStatus(USARTI,USART_FLAG_TC); //USART_FLAG_TC是(uint16_t)0x0727
//串口使能
USART_Cmd(USART1,ENABLE);
//开启串口响应中断
USART_ITConfig(USART1,USART_IT_RXNE,ENABLE); //接收到数据的时候就中断
USART_ITCinfig(USART1,USART_IT_TC,ENABLE); //发送数据结束的时候产生中断
//获取相应中断状态
USART_GetITStatus(USART1,USART_IT_TC); //返回值是set说明是串口发送完成中断
--------------------- |
|