拿到开发板是开心的,调试过程是苦涩的,完成了自己的期望值是美好的,我可能处于苦涩和美好之间。 一开始理想很美好,想基于EVB_AIoT做个智能家居中控BOX,但陷入调试LVGL的一个多月后,发现可能做不成自己想做的东西了,虽然最后没有成功,但也移植开发了一些功能,所以本篇幅主要介绍自己在使用基于TencentOS Tiny的 RT1062开发过程中的一些记录吧。 希望后续可以移植成功LVGL,做完自己想做的事情。
开发环境:MCUXpressoIDE_11.4.1_6260
SDK版本:sdk_2.x_evk-mimxrt1060_2.10.1.201911251446.zip
串口助手:有善 & 格西
与使用官方提供的ESP8266上云的方式一直,这里主要是移植L610和对于的串口,因为我一开始计划使用2个ESP8266,通过http通讯,并把数据通过WLAN 串口(LUART2)传给MCU,所以与L610通讯的串口我使用的是E53的串口(LUART5) 在云端创建设备这里不再赘述,网上有很多链接可以查看学习,简单说下移植过程
1) 通过mqtt\_config\_gen.py工具生成 mqtt的topic的一些宏定义,运行 python mqtt_config_gen.py
输入产品ID、设备名称、设备密钥,生成后,可以将这些内容拷贝到对应的代码处
2) 添加L610的头文件文件到includes
3) 修改AT串口初始化代码,增加支持LUART5的支持,代码如下,增加了LPUART5
UART_HandleTypeDef huart0;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart5;
__API__ int tos_hal_uart_init(hal_uart_t *uart, hal_uart_port_t port)
{
lpuart_config_t config;
if (!uart) {
return -1;
}
if (port == HAL_UART_PORT_0) {
uart->private_uart = &huart0;
huart0.channel = LPUART4;
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(LPUART4, &config, BOARD_DebugConsoleSrcFreq());
/* Enable RX interrupt. */
LPUART_EnableInterrupts(LPUART4, kLPUART_RxDataRegFullInterruptEnable);
EnableIRQ(LPUART4_IRQn);
} else if (port == HAL_UART_PORT_1) {
uart->private_uart = &huart1;
huart1.channel = LPUART1;
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(LPUART1, &config, BOARD_DebugConsoleSrcFreq());
/* Enable RX interrupt. */
LPUART_EnableInterrupts(LPUART1, kLPUART_RxDataRegFullInterruptEnable);
EnableIRQ(LPUART1_IRQn);
} else if (port == HAL_UART_PORT_2) {
uart->private_uart = &huart2;
huart2.channel = LPUART2;
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(LPUART2, &config, BOARD_DebugConsoleSrcFreq());
/* Enable RX interrupt. */
LPUART_EnableInterrupts(LPUART2, kLPUART_RxDataRegFullInterruptEnable);
EnableIRQ(LPUART2_IRQn);
} else if (port == HAL_UART_PORT_4) {
uart->private_uart = &huart4;
huart4.channel = LPUART4;
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(LPUART4, &config, BOARD_DebugConsoleSrcFreq());
/* Enable RX interrupt. */
LPUART_EnableInterrupts(LPUART4, kLPUART_RxDataRegFullInterruptEnable);
EnableIRQ(LPUART4_IRQn);
} else if (port == HAL_UART_PORT_5) {
uart->private_uart = &huart5;
huart5.channel = LPUART5;
LPUART_GetDefaultConfig(&config);
config.baudRate_Bps = BOARD_DEBUG_UART_BAUDRATE;
config.enableTx = true;
config.enableRx = true;
LPUART_Init(LPUART5, &config, BOARD_DebugConsoleSrcFreq());
/* Enable RX interrupt. */
LPUART_EnableInterrupts(LPUART5, kLPUART_RxDataRegFullInterruptEnable);
EnableIRQ(LPUART5_IRQn);
}
return 0;
}
4) 修改 mqttclient_iot_explorer.c
5)在使用AT指令联网时,发现传递的IP有问题,可能是解析IP错误导致的,这里直接修改AT代码(图方便,但不建议)
6)编译烧录查看日志 // 日志打印
Hello world from i.MX RT1060.
Welcome to TencentOS tiny
Init l610 ...
AT CMD:
AT
--->OK
AT CMD:
ATE0
--->ATE0
--->OK
AT CMD:
AT+CPIN?
--->+CPIN: READY
--->OK
AT CMD:
AT+CSQ
--->+CSQ: 31,0
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,3
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,3
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,3
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,3
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,3
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,3
--->OK
AT CMD:
AT+CREG?
--->+CREG: 0,1
--->OK
AT CMD:
AT+CGREG?
--->+CGREG: 0,1
--->OK
AT CMD:
AT+GTSET="IPRFMT",0
--->OK
AT CMD:
AT+MIPCALL?
--->+MIPCALL: 0
--->OK
AT CMD:
AT+MIPCALL=1,"CMNET"
--->OK
--->+MIPCALL
--->: 10.148.138.196
AT CMD:
AT+MIPCALL?
--->+MIPCALL: 1,10.148.138.196
--->OK
Init l610 ok
l610_sal_init
AT CMD:
AT+MIPDNS="12IK8SZTH3.iotcloud.tencentdevices.com"
--->+MIPDNS: "12IK8SZTH3.iotcloud.tencentdevices.com",49.233.106.190
--->OK
GOT IP: 49.233.106.190
AT CMD:
AT+MIPOPEN=1,,"111.230.189.156",1883,0
--->OK
--->+MIPOPEN
--->: 1,1
.mqttclient.c:985 mqtt_connect_with_results()... mqtt connect success...
AT CMD:
AT+MIPSEND=1,121
--->>
--->OK
--->+MIPPUSH: 1,0
--->+MIPSEND
--->: 1,0,2048
--->OK
7)连接成功
其实做物联网的,使用RTOS肯定离不开kv的使用,所以当时移植了kv,用来准备给移植完屏幕使用,谁知道,屏幕没有移植成功,欸,,,,,
1)PIN配置和使用IO
2) 将W25Qxx的驱动 从 TencentOS-tiny/board/TencentOS_tiny_EVB_AIoT/BSP/Hardware/W25QXX-SPI 拷贝到项目source中
从tencentos tiny/commonts/fs/kv 拷贝出来
3) kv接口移植
4) kv task实现和测试
5) 在main函数里调用
然后调用 osThreadCreate(osThread(kv_task), NULL);
6)移植成功,打印数据
使用的是SDK提供的demo进行的移植,参考了一个参加比赛的同学的移植记录,很感谢,这个地方,我对时钟、寄存器和屏幕的设置比较缺乏,但第一次跑LVGL,还是很开心的。
我参考的是这篇文章,虽然不认识,但很感谢,作者写的很详细,我就不多写了,写的不如作者好,放上链接
https://cloud.tencent.com/developer/article/1925828
https://gitee.com/hanxiaomo9527/nxp_rt1062_tencent-os_tiny_aiot.git
https://gitee.com/hanxiaomo9527/nxp_rt1062_tencentos_tiny_aiot_test.git
后续找到移植LVGL导致串口调试打印 hardfault的原因,完成LCD屏幕移植和GT911的触摸移植,希望成功!!
对于不熟悉嵌入式裸机的人,开始没有可以直接调用的库,专心负责应用层,有点吃亏。不过debug过程中也了解了写NXP MCU启动流程之类的一些知识点,同时也知道了自己后续要如何去学习裸机代码。
基于这个比赛的机会,认真的把TencentOS Tiny的内核好好看了一遍,感觉真的很简洁,代码风格很赞,可以从里面学到一些很好的设计思路,感谢汪神他们做的工作。因为自己也准备写一个RTOS,作为自己学习一个阶段的整理~
希望后续可以把开发板好好用起来,做一个有意思的产品,并自己layout增加网口,尝试做边缘网关,不要浪费掉这么强的性能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。