Files
fastbee/sdk/合宙/air780e/csdk/wu_mei/src/uart.c
2023-03-04 03:44:56 +08:00

128 lines
3.1 KiB
C

#include "uart.h"
#include "luat_gpio.h"
#include "platform_define.h"
#define RS485_PIN1 HAL_GPIO_22 //串口1
#define RS485_PIN2 HAL_GPIO_25 //串口2
static unsigned char uart1RxBuffer[1024];
static unsigned char uart2RxBuffer[1024];
static unsigned int uart1RxLength = 0;
static unsigned int uart2RxLength = 0;
static void uartRecvCb(int uart_id, uint32_t data_len)
{
if (uart_id == 1)
{
luat_uart_read(uart_id, uart1RxBuffer, data_len);
uart1RxLength = data_len;
LUAT_DEBUG_PRINT("luat_uart_cb uart_id:%d data:%s data_len:%d", uart_id, uart1RxBuffer, data_len);
}
if (uart_id == 2)
{
luat_uart_read(uart_id, uart2RxBuffer, data_len);
uart2RxLength = data_len;
LUAT_DEBUG_PRINT("luat_uart_cb uart_id:%d data:%s data_len:%d", uart_id, uart2RxBuffer, data_len);
}
}
static void uart1Init()
{
luat_gpio_cfg_t gpioCfg; //创建结构体
luat_gpio_set_default_cfg(&gpioCfg); //初始化结构体
gpioCfg.pull = LUAT_GPIO_PULLDOWN; //外部有三极管下拉 这里也配置成下拉
gpioCfg.mode = LUAT_GPIO_OUTPUT;
gpioCfg.output_level = LUAT_GPIO_LOW;
gpioCfg.pin = RS485_PIN1;
luat_gpio_open(&gpioCfg); //打开
luat_gpio_set(RS485_PIN1, 0); //输出低电平
luat_uart_t uart = {
.id = 1,
.baud_rate = 9600,
.data_bits = 8,
.stop_bits = 1,
.parity = 0 ,
// .pin485 = RS485_PIN1,
.delay = 50,
.rx_level = 0
};
luat_uart_setup(&uart);
luat_uart_ctrl(1, LUAT_UART_SET_RECV_CALLBACK, uartRecvCb);
}
static void uart2Init()
{
luat_gpio_cfg_t gpioCfg; //创建结构体
luat_gpio_set_default_cfg(&gpioCfg); //初始化结构体
gpioCfg.pull = LUAT_GPIO_PULLDOWN; //外部有三极管下拉 这里也配置成下拉
gpioCfg.mode = LUAT_GPIO_OUTPUT;
gpioCfg.output_level = LUAT_GPIO_LOW;
gpioCfg.pin = RS485_PIN2;
luat_gpio_open(&gpioCfg); //打开
luat_gpio_set(RS485_PIN2, 0); //输出低电平
luat_uart_t uart = {
.id = 2,
.baud_rate = 9600,
.data_bits = 8,
.stop_bits = 1,
.parity = 0 ,
//.pin485 = RS485_PIN2,
.delay = 50,
.rx_level = 0
};
luat_uart_setup(&uart);
luat_uart_ctrl(2, LUAT_UART_SET_RECV_CALLBACK, uartRecvCb);
}
void uartInit()
{
uart1Init();
uart2Init();
}
void uartSend(unsigned char nUartId, unsigned char* pnData, unsigned int nLength)
{
if (nUartId == 1)
{
luat_gpio_set(RS485_PIN1, 1);
luat_rtos_task_sleep(200);
luat_uart_write(1, pnData, nLength);
luat_rtos_task_sleep(200);
luat_gpio_set(RS485_PIN1, 0);
}
else if (nUartId == 2)
{
luat_gpio_set(RS485_PIN2, 1);
luat_rtos_task_sleep(200);
luat_uart_write(2, pnData, nLength);
luat_rtos_task_sleep(200);
luat_gpio_set(RS485_PIN2, 0);
}
}
unsigned char* getUartBuffer(unsigned char nUartId)
{
if(nUartId == 1)
return uart1RxBuffer;
else
return uart2RxBuffer;
}
unsigned int getUartRxLength(unsigned char nUartId)
{
if (nUartId == 1)
return uart1RxLength;
else
return uart2RxLength;
}