当前位置: 首页 > news >正文

【W800】UART 的使用与问题

1.开发环境

  • OS: Windows 11
  • 开发板:海凌科 HLK-W800-KIT-PRO
  • SDK: W80X_SDK_v1.00.10
  • IDE: CSKY Development Kit

2.UART 使用

在 SDK 中创建文件 uart_test.huart_test.c,然后在 CDK 项目中添加这两个文件,CDK 会自动 include 头文件。
在这里插入图片描述
uart_test.h

#ifndef UART_TEST_H
#define UART_TEST_H#include "wm_include.h"void uart_echo_test(void);#endif // UART_TEST_H

uart_test.c

#include "uart_test.h"
#include "wm_gpio_afsel.h"u8 rx_buf[1024];
u16 rx_buf_len;void uart_test_rx_callback(u16 len, void *priv_data)
{printf("%d\n", len);rx_buf_len += len;
}void uart_echo_test(void)
{wm_uart1_tx_config(WM_IO_PB_06);wm_uart1_rx_config(WM_IO_PB_07);tls_uart_options_t uart_opt;uart_opt.baudrate = TLS_UART_BAUDRATE_115200;uart_opt.charlength = TLS_UART_CHSIZE_8BIT;uart_opt.paritytype = TLS_UART_PMODE_DISABLED;uart_opt.flow_ctrl = TLS_UART_FLOW_CTRL_NONE;uart_opt.stopbits = TLS_UART_ONE_STOPBITS;tls_uart_port_init(TLS_UART_1, &uart_opt, 0);tls_uart_rx_callback_register(TLS_UART_1, (s16(*)(u16, void *))uart_test_rx_callback, NULL);while (1){if (rx_buf_len > 0){u8 rx_cb_len = tls_uart_read(TLS_UART_1, rx_buf, rx_buf_len);tls_uart_write(TLS_UART_1, rx_buf, rx_cb_len);rx_buf_len -= rx_cb_len;}}
}

最后在 UserMain() 中调用 uart_test() 就行了,记得 include。

3. 解释

W800 的 UART 流程图(RX)
在这里插入图片描述
uart fifo 接收不固定,比如一次性接收的数据超过 16 bytes,就会被分成多个,例如 28 bytes 就会被分成 16,8,4 bytes(奇怪的特性)。
如果想要获取接收的数据,就必须通过 tls_uart_read() 从 receive buffer 中读取,它会返回 uart fifo 接收的数据长度。

遇到的问题

SDK 给的 UART API 很奇怪,中断会去调用 callback function,所以你需要先注册。根据源码

// wm_uart.c
......rxlen = rx_fifocnt;while (rx_fifocnt-- > 0){ch = (u8)port->regs->UR_RXW;recv->buf[recv->head] = ch;recv->head = (recv->head + 1) & (TLS_UART_RX_BUF_SIZE - 1);if (port->rx_callback != NULL && rx_byte_cb_flag){port->rx_callback(1, port->priv_data);}}
......

可以看到是 fifo_cnt 递减然后装进 recv->buf 里,但是这里是不会调用 port->rx_callback 的,因为 rx_byte_cb_flag 一直是 0,最后调 callback 的其实是这个

        if (rxlen && port->rx_callback != NULL && !rx_byte_cb_flag){port->rx_callback(rxlen, port->priv_data);}

如果是超过 16 byte,那么每次 callback 的 rxlen 就会出现这种情况
在这里插入图片描述

相关文章:

【W800】UART 的使用与问题

1.开发环境 OS: Windows 11开发板:海凌科 HLK-W800-KIT-PROSDK: W80X_SDK_v1.00.10IDE: CSKY Development Kit 2.UART 使用 在 SDK 中创建文件 uart_test.h 和 uart_test.c,然后在 CDK 项目中添加这两个文件,CDK 会自动 include 头文件。 …...

UART串口数据分析

串口基础知识详细介绍: 该链接详细介绍了串并行、单双工、同异步、连接方式 https://blog.csdn.net/weixin_43386810/article/details/127156063 该文章将介绍串口数据的电平变化、波特率计算、脉宽计算以及数据传输量的计算。 捕获工具:逻辑分析仪&…...

NFS 组件容器化部署实战指南

文章目录 前言部署NFS服务器K8S部署NFS问题记录 前言 使用nfs-client-provisioner这个应用,利用nfs server给kubernets提供作为持久化后端,并且动态提供pv。所有节点需要安装nfs-utils组件,并且nfs服务器与kubernets worker节点都能网络连通…...

嵌入式软件C语言面试常见问题及答案解析(三)

嵌入式软件C语言面试常见问题及答案解析(三) 上一篇已经足够长了,再长也就有点不礼貌了,所以在这儿继续来总结分享那个面试中遇到的题目,文中的问题和提供的答案或者代码均代表个人的理解,如有不合理或者错误的地方,欢迎大家批评指正。 本文中题目列表 1. 编码实现子串定…...

nvm安装教程

Node Version Manager (NVM) 是一个用来管理多个 Node.js 版本的命令行工具。使用 NVM,你可以在同一台机器上轻松安装和切换不同的 Node.js 版本。以下是针对 Unix 类系统(如 Linux 和 macOS)的 NVM 安装教程: 安装 NVM 更新系统…...

单片机-定时器中断

1、相关知识 振荡周期1/12us; //振荡周期又称 S周期或时钟周期(晶振周期或外加振荡周期)。 状态周期1/6us; 机器周期1us; 指令周期1~4us; ①51单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之为定时器…...

Hadoop 实战笔记(一) -- Windows 安装 Hadoop 3.x

环境准备 安装 JAVA 1.8 Java环境搭建之JDK下载及安装下载 Hadoop 3.3.5 安装包 Hadoop 下载:https://archive.apache.org/dist/hadoop/common/ 一、JAVA JDK 环境检查 二、Hadoop(HDFS)环境搭建 1. 解压安装文件 hadoop-3.3.5.tar 2. 配置环境变量 HADOOP_HO…...

AI中的神经元与权重矩阵之间的关系;神经元连接角度看行和列的意义

AI中的神经元与权重矩阵之间的关系 目录 AI中的神经元与权重矩阵之间的关系神经元连接角度看行和列的意义AI中的神经元概念 在人工智能领域,特别是神经网络中,神经元是基本的计算单元,它是对生物神经元的一种抽象模拟。就像生物神经元接收来自其他神经元的电信号,经过处理后…...

mysql、postgresql、druid链接池踩坑记录

The last packet successfully received from the server wIs 10,010 milliseconds ago. The last packet sent successfully to the server was 10,010 milliseconds ago.### The error may exist in URL mysql 链接字符串没有 &connectTimeout600000&socketTimeout6…...

NRF24L01模块STM32通信-通信初始化

目录 前言 一、IO口初始化 二、模拟SPI的基础代码 1.一些代码的宏定义 2.起始信号 3.CS,SCK,MOSI操作 4.MISO,IRQ操作 三.中间层代码 1.字节的输入和读取 2.写操作 3.读操作 四.应用层代码 1.24L01的检测 2.在main函数进行简单验证 3.24L01宏定义的代码 总结 前…...

高比例压缩:Linux 中的压缩命令与技巧

文章目录 高比例压缩:Linux 中的压缩命令与技巧1. 压缩格式的选择2. gzip 命令示例:压缩文件示例:解压文件 3. bzip2 命令示例:压缩文件示例:解压文件 4. xz 命令示例:压缩文件示例:解压文件 5.…...

LabVIEW软件Bug的定义与修改

在LabVIEW软件开发过程中,bug(程序错误或缺陷)指的是程序中导致不符合预期行为的任何问题。Bug可能是由于编码错误、逻辑漏洞、硬件兼容性问题、系统资源限制等因素引起的。它可能会导致程序崩溃、功能无法正常执行或输出结果不符合预期。理解…...

基于Springboot + vue实现的办公用品管理系统

🥂(❁◡❁)您的点赞👍➕评论📝➕收藏⭐是作者创作的最大动力🤞 💖📕🎉🔥 支持我:点赞👍收藏⭐️留言📝欢迎留言讨论 🔥🔥&…...

B+树的原理及实现

文章目录 B树的原理及实现一、引言二、B树的特性1、结构特点2、节点类型3、阶数 三、B树的Java实现1、节点实现2、B树操作2.1、搜索2.2、插入2.3、删除2.4、遍历 3、B树的Java实现示例 四、总结 B树的原理及实现 一、引言 B树是一种基于B树的树形数据结构,它在数据…...

(四)结合代码初步理解帧缓存(Frame Buffer)概念

帧缓存(Framebuffer)是图形渲染管线中的一个非常重要的概念,它用于存储渲染过程中产生的像素数据,并最终输出到显示器上。简单来说,帧缓存就是计算机图形中的“临时画布”,它储存渲染操作生成的图像数据&am…...

python注意事项:range遍历越索引现象、列表边遍历边修改出现的问题

文章目录 前言一、range遍历越索引现象QS1:遍历range(2,2)会发生什么?不会报错,但是也不会遍历到任何内容QS1:遍历range(3,2)会发生什么?不会报错,但是也不会遍历到任何内容 二、列表边遍历边修改注意事项(Java的List系…...

【C++】模板与泛型编程(三):重载与模板

16.3 重载与模板 函数模板可以被另一个模板或一个普通分模板函数重载。与往常一样,名字相同的函数必须具有不同数量或类型的参数(这样才可以完成重载)。 如果设计模板,则函数的匹配规则与普通函数的重载有所不同,具体…...

JavaScript字符串拓展:实用方法与示例全解析

一、引言:为什么要学习 JS 字符串拓展 在前端开发的世界里,JavaScript 如同基石般支撑着网页的交互与动态呈现。而字符串作为我们日常操作中最频繁接触的数据类型之一,其原生方法在面对复杂多变的业务需求时,有时难免显得捉襟见肘…...

基于html5实现音乐录音播放动画源码

源码介绍 基于html5实现音乐录音播放动画源码是一款类似Shazam的UI,点击按钮后,会变成为一个监听按钮。旁边会有音符飞入这个监听按钮,最后转换成一个音乐播放器。 效果预览 源码获取 基于html5实现音乐录音播放动画源码...

初学stm32 --- ADC模拟/数字转换器工作原理

目录 常见的ADC类型 并联比较型工作示意图 逐次逼近型工作示意图 ADC的特性参数 STM32各系列ADC的主要特性 ADC框图简介 参考电压/模拟部分电压 输入通道( F1为例) 转换序列(F1为例) 规则组和注入组执行优先级对比 规则…...

深入解析航顺HK32F030C8T6与STM32F030的兼容性差异及实战调优

1. 航顺HK32F030C8T6与STM32F030的硬件差异解析 第一次拿到航顺HK32F030C8T6这颗国产MCU时,我下意识以为它和STM32F030可以完全互换。但实际在智能家居项目中踩坑后才发现,两者的硬件差异远比想象中多。最明显的区别就是主频——STM32F030最高只能跑到48…...

09 华夏之光永存:带领华为盘古大模型走向世界巅峰

09 华夏之光永存:带领华为盘古大模型走向世界巅峰 小标题:鸿蒙生态深度协同:端侧大模型原生融合方案 文章摘要 本文作为系列专栏第九篇,聚焦华为盘古大模型与鸿蒙生态端侧原生适配、端边云全域协同核心痛点,针对当前端…...

最新的稿费到账了!

最新的稿费到账了,很多老铁可能很好奇到底有多少稿费! 今天和大家简单说一下, 我和出版社签订的合同是8个点,我的书定价是xx一本, 所以每出售一本书,我实际能拿到7块多钱, 我这本书是技术类&…...

【无限视距】:R3nzSkin的MOBA视野增强技术原理与实战指南

【无限视距】:R3nzSkin的MOBA视野增强技术原理与实战指南 【免费下载链接】R3nzSkin Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3n/R3nzSkin 在MOBA游戏的对抗中,视野控制往往决定战局走向。R3nzSkin…...

【Kali Linux】 2026.1 新功能详解

2026年3月24日发布,基于 2025.4 的更新,带来全新视觉体验和多项新工具!🎨 2026 年度主题更新每年惯例的主题大换血,覆盖全流程:组件更新内容引导动画修复了实时镜像卡在第一帧的问题,循环更流畅…...

2026年AI风口!掌握这3项技能,年薪百万不是梦!大厂疯招,你还在等什么?

文章指出,2026年AI行业的最大机会在于应用层,字节跳动、腾讯等大厂纷纷布局Agent大模型,相关岗位需求激增,年薪可达百万。文章强调,真正的AI应用开发需要掌握RAG、Agent智能体和微调三项核心能力,这些领域的…...

2026就业新风口:AI、新能源、半导体领跑高薪时代,掌握这些技能让你年薪百万!

2026年中国就业市场呈现新质产业领跑、高薪向技术岗集中、城市梯度分化明显的核心特征,AI、新能源、半导体等赛道爆发式增长,一线城市依旧是高薪高地,新一线城市则凭借产业优势快速追赶。与此同时,AI已成为职场核心竞争力&#xf…...

在昇腾Atlas 800I A2上,用vLLM-Ascend 0.9.1-dev部署Qwen2.5-7B的保姆级避坑指南

昇腾Atlas 800I A2实战:vLLM-Ascend部署Qwen2.5-7B的深度避坑手册 当你在Atlas 800I A2服务器上首次尝试用vLLM-Ascend部署Qwen2.5-7B模型时,可能会遇到各种官方文档未曾提及的"暗礁"。本文将从实战角度,拆解那些让开发者夜不能寐的…...

Matlab串口通信上位机开发:从零搭建实时数据采集系统(附完整代码)

Matlab串口通信上位机开发实战:从零构建工业级数据采集系统 在工业自动化、物联网设备调试和科研实验数据采集领域,串口通信作为最基础也最可靠的数据传输方式,至今仍发挥着不可替代的作用。Matlab凭借其强大的数值计算能力和丰富的可视化工具…...

财税合规数字化建设与税务师事务所行业实践

随着企业监管趋严与数字化不断深入,财税合规已成为企业经营管理中的重要环节。无论是中小企业还是集团公司,都需要建立规范的财务流程,完善纳税申报机制,强化风险自查能力,以实现合法合规,稳定经营。财税合…...