微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > STM32串口寄存器操作

STM32串口寄存器操作

时间:11-09 来源:互联网 点击:

低功耗模式;通道号为0 - 4;*************************************************************************************************************************/void UARTx_PowerDown(u8 ch){if(ch > UART_ChMax)//判断端口是否超出范围return;((USART_TypeDef *)USARTxN[ch])->BRR = (1 < 13);//UE位写一,开启低功耗}/************************************************************************************************************************** 函数 : void UARTx_PowerOn(u8 ch)* 功能 : UART上电* 参数 : ch:通道选择* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20120403* 最后修改时间 : 20120403* 说明 : 退出低功耗模式;通道号为0 - 4;*************************************************************************************************************************/void UARTx_PowerOn(u8 ch){if(ch > UART_ChMax)//判断端口是否超出范围return;((USART_TypeDef *)USARTxN[ch])->BRR &= ~(1 < 13);//UE位清零,退出低功耗模式}/************************************************************************************************************************** 函数 : u8 GetUartNewFlag(u8 ch)* 功能 : 获取串口新数据标志* 参数 : ch:通道选择* 返回 : 1:有新数据,0:无新数据* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20120403* 最后修改时间 : 20120403* 说明 : 用于判断是否有新的数据,会清除掉新数据标志的*************************************************************************************************************************/u8 GetUartNewFlag(u8 ch){if(ch > UART_ChMax)//判断端口是否超出范围return 0;if(UartRx[ch].IntRx == SET)//开启了中断接收{if(UartRx[ch].NewDataFlag == SET) //有新数据{UartRx[ch].NewDataFlag = RESET;//清除标志return 1; //返回有新数据}elsereturn 0; //无新数据}else //没开启中断接收{if(((USART_TypeDef *)USARTxN[ch])->SR & BIT5)//RXNE=1,接收到新数据{((USART_TypeDef *)USARTxN[ch])->SR &= ~BIT5;//清除标志return 1;}else return 0;}}/************************************************************************************************************************** 函数 : u8 GetUartRxBuffFullFlag(u8 ch)* 功能 : 获取串口接收缓冲区满标志* 参数 : ch:通道选择* 返回 : 1:有新数据,0:无新数据* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20120403* 最后修改时间 : 20120403* 说明 : 用于判断接收缓冲区是否满,会清除标志*************************************************************************************************************************/u8 GetUartRxBuffFullFlag(u8 ch){if(ch > UART_ChMax)//判断端口是否超出范围return 0;if(UartRx[0].BuffFull == SET)//缓冲区已满{UartRx[0].BuffFull = RESET;//清除满标志return 1;}return 0;}/************************************************************************************************************************** 函数 : void UART_ClearRxInt(u8 ch)* 功能 : 清除串口接收中断标志* 参数 : ch:通道选择* 返回 : 物* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20120403* 最后修改时间 : 20120403* 说明 : 用于清除接收标志*************************************************************************************************************************/void UARTx_ClearRxInt(u8 ch){if(ch > UART_ChMax)//判断端口是否超出范围return;((USART_TypeDef *)USARTxN[ch])->SR &= ~BIT5;//清除标志}/************************************************************************************************************************** 函数 : u8 GetUartNewData(u8 ch)* 功能 : 获取串口新数据* 参数 : ch:通道选择* 返回 : 收到的数据* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20120403* 最后修改时间 : 20120403* 说明 : 用于接收一个字节数据*************************************************************************************************************************/u8 GetUartNewData(u8 ch){if(ch > UART_ChMax)//判断端口是否超出范围return 0;return (((USART_TypeDef *)USARTxN[ch])->DR);//返回数据}/************************************************************************************************************************** 函数 : void SetUartRxBuff(u8 ch,u16 RxBuffSize,u8 *RxBuff)* 功能 : 设置串口接收缓冲区* 参数 : ch:通道选择,RxBuffSize:缓冲区大小,RxBuff:缓冲区指针* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20120403* 最后修改时间 : 20120403* 说明 : 一定要设置,否则开启中断接收时可能会异常*************************************************************************************************************************/void SetUartRxBuff(u8 ch,u16 RxBuffSize,u8 *RxBuff){if(ch > UART_ChMax)//判断端口是否超出范围return;UartRx[ch].RxBuffSize = RxBuffSize; //设置缓冲区大小UartRx[ch].RxBuff = RxBuff;//设置缓冲区指针UartRx[0].UartRxCnt = 0;//计数器清零}/************************************************************************************************************************** 函数 : void USART1_IRQHandler (void)* 功能 : UART1中断接收函数* 参数 : 无* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20110611* 最后修改时间 : 20120403* 说明 : 无*************************************************************************************************************************/void USART1_IRQHandler (void){if((USART1->SR & BIT2) (USART1->SR & BIT1))//如果NE = 1发送噪声错误 //如果FE = 1,发送帧错误{if(USART1->SR);if(USART1->DR);//复位NE操作序列}else if(UartRx[0].RxBuffSize > 0)//接收缓冲区大于0{(UartRx[0].RxBuff)[(UartRx[0].UartRxCnt) ++] = USART1->DR;//将数据存放到缓冲区if(UartRx[0].UartRxCnt == UartRx[0].RxBuffSize)//缓冲区已满{UartRx[0].UartRxCnt = 0;//接收计数器清零UartRx[0].BuffFull = SET;//缓冲区已满标志} }UartRx[0].NewDataFlag = SET;//收到新数据标志UARTx_ClearRxInt(0); //清除串口接收中断标志}#if UART_ChMax > 0/************************************************************************************************************************** 函数 : void USART2_IRQHandler (void)* 功能 : UART2中断接收函数* 参数 : 无* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20110611* 最后修改时间 : 20120403* 说明 : 无*************************************************************************************************************************/void USART2_IRQHandler (void){if((USART2->SR & BIT2) (USART2->SR & BIT1))//如果NE = 1发送噪声错误 //如果FE = 1,发送帧错误{if(USART2->SR);if(USART2->DR);//复位NE操作序列}else if(UartRx[1].RxBuffSize > 0)//接收缓冲区大于0{(UartRx[1].RxBuff)[(UartRx[1].UartRxCnt) ++] = USART1->DR;//将数据存放到缓冲区if(UartRx[1].UartRxCnt == UartRx[1].RxBuffSize)//缓冲区已满{UartRx[1].UartRxCnt = 0;//接收计数器清零UartRx[1].BuffFull = SET;//缓冲区已满标志} }UartRx[1].NewDataFlag = SET;//收到新数据标志UARTx_ClearRxInt(1); //清除串口接收中断标志}#endif#if UART_ChMax > 1/************************************************************************************************************************** 函数 : void USART3_IRQHandler (void)* 功能 : UART3中断接收函数* 参数 : 无* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20110611* 最后修改时间 : 20120403* 说明 : 无*************************************************************************************************************************/void USART3_IRQHandler (void){if((USART3->SR & BIT2) (USART3->SR & BIT1))//如果NE = 1发送噪声错误 //如果FE = 1,发送帧错误{if(USART3->SR);if(USART3->DR);//复位NE操作序列}else if(UartRx[2].RxBuffSize > 0)//接收缓冲区大于0{(UartRx[2].RxBuff)[(UartRx[2].UartRxCnt) ++] = USART1->DR;//将数据存放到缓冲区if(UartRx[2].UartRxCnt == UartRx[2].RxBuffSize)//缓冲区已满{UartRx[2].UartRxCnt = 0;//接收计数器清零UartRx[2].BuffFull = SET;//缓冲区已满标志} }UartRx[2].NewDataFlag = SET;//收到新数据标志UART_ClearRxInt(2); //清除串口接收中断标志}#endif#if UART_ChMax > 2/************************************************************************************************************************** 函数 : void UART4_IRQHandler (void)* 功能 : UART4中断接收函数* 参数 : 无* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20110611* 最后修改时间 : 20120403* 说明 : 无*************************************************************************************************************************/void UART4_IRQHandler (void){if((UART4->SR & BIT2) (UART4->SR & BIT1))//如果NE = 1发送噪声错误 //如果FE = 1,发送帧错误{if(UART4->SR);if(UART4->DR);//复位NE操作序列}else if(UartRx[3].RxBuffSize > 0)//接收缓冲区大于0{(UartRx[3].RxBuff)[(UartRx[3].UartRxCnt) ++] = USART1->DR;//将数据存放到缓冲区if(UartRx[3].UartRxCnt == UartRx[3].RxBuffSize)//缓冲区已满{UartRx[3].UartRxCnt = 0;//接收计数器清零UartRx[3].BuffFull = SET;//缓冲区已满标志} }UartRx[3].NewDataFlag = SET;//收到新数据标志UART_ClearRxInt(3); //清除串口接收中断标志}#endif#if UART_ChMax > 3/************************************************************************************************************************** 函数 : void UART5_IRQHandler (void)* 功能 : UART5中断接收函数* 参数 : 无* 返回 : 无* 依赖 : 底层宏定义* 作者 : 陈鹏* 时间 : 20110611* 最后修改时间 : 20120403* 说明 : 无*************************************************************************************************************************/void UART5_IRQHandler (void){if((UART5->SR & BIT2) (UART5->SR & BIT1))//如果NE = 1发送噪声错误 //如果FE = 1,发送帧错误{if(UART5->SR);if(UART5->DR);//复位NE操作序列}else if(UartRx[4].RxBuffSize > 0)//接收缓冲区大于0{(UartRx[4].RxBuff)[(UartRx[4].UartRxCnt) ++] = USART1->DR;//将数据存放到缓冲区if(UartRx[4].UartRxCnt == UartRx[4].RxBuffSize)//缓冲区已满{UartRx[4].UartRxCnt = 0;//接收计数器清零UartRx[4].BuffFull = SET;//缓冲区已满标志} }UartRx[4].NewDataFlag = SET;//收到新数据标志UART_ClearRxInt(4); //清除串口接收中断标志}#endif#undef UART_ChMax

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top