此部分内容建立在U1 阿里云Coap接入例程的基础上。
使用必读:
按本文的做法,串口必须选择U1,选择其他串口编译可以过,但会报CPU运行错误,原因不明。
上云数据不能选择太多,选太多了会报push error错误,多了会频繁掉线,原因不明。
AT PARSER的方法使用串口可以编译成功,但运行会报oob创建失败错误,原因不明。
USART1串口波特率必须是921600.
串口初始化部分
代码如下:
aos_dev_t* usart_handle; //串口句柄,全局变量
int main(void)
{
board_yoc_init();
drv_pinmux_config(GP07, GP07_FUNC_U1TXD);
drv_pinmux_config(GP08, GP08_FUNC_U1RXD);
int32_t err;
usart_handle = csi_usart_initialize(1, handler);
err=csi_usart_config_baudrate(usart_handle, 921600);
csi_usart_config_mode(usart_handle, USART_MODE_ASYNCHRONOUS);
csi_usart_config_databits(usart_handle, USART_DATA_BITS_8);
csi_usart_config_stopbits(usart_handle, USART_STOP_BITS_1);
csi_usart_config_parity(usart_handle, USART_PARITY_NONE);
csi_usart_config_flowctrl(usart_handle,USART_FLOWCTRL_NONE);
csi_usart_control_tx(usart_handle, 1);
csi_usart_control_tx(usart_handle, 1);
csi_usart_set_interrupt(usart_handle, USART_INTR_READ, 1);
LOGI(TAG, "USART INIT %d",err);
}
注意,串口设置必须在 board_yoc_init(); 函数后,这样的作用是禁用CLI,否则串口发来数据会被当做命令,然后报错。
串口回调函数
代码如下,这是上面代码usart_handle = csi_usart_initialize(1, handler);中handler的具体实现。
void handler(int32_t idx, usart_event_e event){
if(idx==1){
if(event==USART_EVENT_RECEIVED){
uint8_t ch;
csi_usart_getchar(usart_handle, &ch);
// ch就是获取到串口发来的数据,可以接入自己的实现处理
}
}
}
总结
使用上面两部分配置,U1板子的usart1串口就可以用来与其他硬件通信接收数据,但是无法使用CLI,不过LOG仍然可以正常使用。上传效果如下
文章来源:芯片开放社区
原文链接:https://occ.t-head.cn/community/post/detail?spm=a2cl5.14300636.0.0.1b87180flNT4Fc&id=3805394150393262080