stm32_ota/ABM开发板(BOOT源码)/BOOTV2.0/HARDWARE/RS232/rs232.c
2024-12-17 20:03:43 +08:00

71 lines
2.9 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "rs232.h"
#include <string.h>
#include <stdbool.h>
#include "sysport.h"
#include "usart.h"
#include "io.h"
/********************************************************************************
* @file rs232.c
* @author 晏诚科技 Mr.Wang
* @version V1.0.0
* @date 11-Dec-2018
* @brief 提供主板rs232接口外设驱动
******************************************************************************
* @使用方法:
* 先调用RS232Init()对RS232_COM初始化应用层通过RS232SendData()函数调用RS485发送
* 数据通过读取sRS232Queue帧缓冲区的数据来处理RS232接收到的数据
*******************************************************************************/
/*****************************************
*驱动内部使用常变量
****************************************/
/*****************************************
*驱动可供外部使用的常变量
****************************************/
FrameQueue_s sRS232Queue ; //RS232 接收数据帧数据环形缓冲区上层只需要在初始化RS232后处理该缓冲区数据即可
/**************************************************************************************************
* 名 称: void RS232Init(uint32_t baudrate)
* 功能说明: 1、初始化RS232接收帧缓冲区sRS232Queue
* 5、注册RS232串口接收帧回调函数
***************************************************************************************************/
void RS232Init(uint32_t baudrate)
{
InitQueueMem(&sRS232Queue) ; //初始化RS485接收帧缓冲区sRS232Queue
UARTx_Init(RS232_COM, baudrate, USART_Mode_Rx | USART_Mode_Tx, INT_RANK_5) ;//初始化RS485映射的串口RS232_COM设置为收发模式中断优先级为INT_RANK_5
Uart_RegHookCallback(RS232_COM, Rs232RecFrameCallback) ; //注册RS485接收帧中断回调函数
}
/**************************************************************************************************
* 名 称: void Rs232RecFrameCallback(char *recvBuf, uint16_t recvLen)
* 功能说明: 当RS485串口接收到数据帧时会回调此函数此函数将数据帧插入到“帧环形缓冲区”sRS232Queue中
* 应用层无需关注如何接收只需要在初始化RS232后处理sRS232Queue帧数据即可。
**************************************************************************************************/
void Rs232RecFrameCallback(char *recvBuf, uint16_t recvLen)
{
if( RW_OK != InsertQueueMemData(&sRS232Queue, recvBuf, recvLen) )
{
ErrorLogPrintf("sRS232Queue溢出") ;
}
}
/****************************************************************************
* 名 称void RS232SendData(char* sendData, uint16_t dataLen)
* 功 能通过RS232_COM端口输出dataLen长度的数据 sendData
* 入口参数:
* @param *sendData 输出的数据指针
* @param dataLen 输出数据的长度
****************************************************************************/
void RS232SendData(char* sendData, uint16_t dataLen)
{
UARTx_SendData(RS232_COM, sendData, dataLen) ;
}