串口1初始化
void uart1_init(void)
{
uint8 I=0;
uart_Cfg_t cfg_user =
{
.tx_pin = GPIO_P31,
.rx_pin = GPIO_P32,
.rts_pin = GPIO_DUMMY,
.cts_pin = GPIO_DUMMY,
.baudrate = 115200,
.use_fifo = TRUE,
.hw_fwctrl = FALSE,
.use_tx_buf = FALSE,
.parity = FALSE,
.evt_handler = ProcessUartData,
};
hal_gpio_pin_init(GPIO_P31, OEN);
hal_gpio_pin_init(GPIO_P32, IE);
//m_uartCtx.enable = FALSE;
int ret = hal_uart_init(cfg_user, UART1); //uart init
if(ret == PPlus_SUCCESS)
LOG("uart1 init SUCCESS...\n");
else
LOG("uart1 init fail...\n");
}
串口中断回调
int cmdlen = 0;
#define AT_CMD_LENGTH_MAX 1024
uint8_t cmdstr[AT_CMD_LENGTH_MAX];
__ATTR_SECTION_SRAM__ static void ProcessUartData(uart_Evt_t* evt)
{
osal_memcpy((cmdstr + cmdlen), evt->data, evt->len);//µþ¼ӷţ¬´6ז½ڻᲺɺ¶എ¶ύ
cmdlen += evt->len;
osal_stop_timerEx( key_TaskID, KEY_DEMO_CYCLE_TIMER );
osal_start_timerEx( key_TaskID, KEY_DEMO_CYCLE_TIMER, 5);
}
在任务中初始化串口1
hal_uart_deinit(UART1);
uart1_init();
osal_start_reload_timer(key_TaskID, KEY_DEMO_ONCE_TIMER, 1000);//TX
串口1发送数据
if( events & KEY_DEMO_ONCE_TIMER)
{
int ret = hal_uart_send_buff(UART1, tx_data, sizeof(tx_data));
if(ret == PPlus_SUCCESS)
LOG("uart send ok\tsize==%d\n", sizeof(tx_data));
else
LOG("uart send fail\n");
return (events ^ KEY_DEMO_ONCE_TIMER);
}
串口1接收数据
串口1接收到的数据,用串口0打印出来验证数据是否完整且正确
if( events & KEY_DEMO_CYCLE_TIMER)
{
LOG("rx_data==");
for(int i = 0; i < cmdlen; i++)
LOG("%d", cmdstr[i]);
LOG("\rrx_data_len=%d\n", cmdlen);
cmdlen = 0;
osal_memset(cmdstr, 0, AT_CMD_LENGTH_MAX);
return (events ^ KEY_DEMO_CYCLE_TIMER);
}
实现效果
收发正常