普冉(PUYA)单片机开发笔记 [完结篇]:使用体会
失败的移植:FreeRTOS
当使用了 PY32F003 的各种接口和功能后,手痒痒想把 FreeRTOS 也搬到这个 MCU 上,参考 STM32 和 GD32 对 FreeRTOS 的移植步骤,把 FreeRTOS v202212.00 版本的源码搬到了 Keil 工程中,编译倒是通过了,程序尺寸大约是 20K 字节的样子,下载到板子上肯定是装得下的。但上烧录之后却运行不起来。对 SysTick_Init 改来改去也无法正常运行,修改了 startup_py32f003xx.s 的中断向量表也不行。在 py32_f0xx_hal_conf.h 将 USE_RTOS 改为 1 后,编译报错,..\Drivers\PY32F0xx_HAL_Driver\Inc\py32f0xx_hal_def.h(xxx): error: #35: #error directive: "USE_RTOS should be 0 in the current HAL release",只好作罢。
使用体会
对 PY32F003 单片机这样一颗 Cortex-M0+ 内核的 MCU,最高工作频率高达 32MHz,这颗芯片的运算速度可以说是相当快了。FLASH 容量高达 128K 字节,ROM 高达 8K 字节,使用 HAL 库编程,可以完成相当复杂的协议解析功能。在实用过程中,采用 9600 波特率,单字节接收数据,能够完成多达 18 条报文,每条报文 6 个域的通信协议规程,运行稳定,快速高效。实用的串口协议规程解析代码量近一千行(C语言),每一次运行的分支代码量为 150 行左右,在 9600 波特率,8数据位(等效于 9.6Kbps)时,平均每一个字节的接收间隔是 312.5us(微秒),实用中未发现在下一个字节到达的中断服务程序激活之前处理不完的情况。
PY32F003 具有单周期乘法器,厂家库函数中还提供了多种数学运算的库函数,使得 PY32F003 方便地使用8字节实数运算、复数(ComplexFunctions)运算、矩阵(MatrixFunctions),提供的数学运算库函数中甚至包括旋转因子生成、SIN()/COS() 函数和 FFT。这些数学运算函数可以用在同步式的,运算密集型的准实时场合。
PY32F003 的 HAL 库是高效的。每一个部件——例如 UART,I2C,GPIO,TIM,ADC,EXTI 等——的运行效率很高,初始化均在 1us 内完成,GPIO 输入输出操作和 EXTI 捕获的操作都是单周期的,这一点 PY32F003 在实测中的表现令人满意。
PY32F003 的 DMA 也是高效的,256 字节的内存搬运几乎瞬时完成。
我觉得 PY32F003 最适合的应用场合是
- 1:物联网的数据采集点,
- 2:设备按钮控制接口。
PY32F003 的接口种类齐全,但管脚之间存在复用,并不适合做多种功能的集成,更适合完成一种特定功能的节点,然后利用一种通信方式和上位机交互。作为数据采集点时,ADC 的通道最多可以有 8 个,可单独使用的 GPIO 管脚数量也可以做到 10 个以上,可以定义为外部中断输入,也可定义为按钮/按键输入,这个密度可以满足大多数场合的数据采集需要。
芯片的 ADC 在 239.5 采样时,经过校准的 ADC,其采样值是相当准确的,实测 0~VCC 量程中的最大采样误差可以控制在 2‰ 以内(也就是5mV左右)。实测中,在 ADC 入口使用电压跟随器,采样误差可以控制在 1‰ 以内,在 0~1.2V 采样时,做到了 1mV 的精度,这可以满足绝大多数应用的需求。
这颗 MCU 的上游通信接口种类比较齐全,最常用的是 UART 接口、I2C 接口和 SPI 接口在这颗 MCU 上都可以正常使用。实用中往往只采用其中一种,数种上位机通信方式同时使用的场景并不多见。
虽然它的内部时钟不是很准,但一般实用中都会配备 24MHz 的外部时钟,维持 PY32F003 的高速运行。相比起 PY32F003 的价格,配备外部晶振的成本和主芯片相当了。如果对时钟要求不是很高(多数中低速上行通信都属于这种情况),使用 PY32F003 的最小系统倒是很合算的。
如果需要微秒级的控制精度,PY32F003 的 GPIO 工作在高速模式下,可以胜任,但实测精度一般。
这个专栏的实现代码已经打包上传,有兴趣的可以点击下载:https://download.csdn.net/download/Tomcat0130/88640929
厂家发布的 HAL 库的当前版本不支持移植 RTOS,期待厂家的更新。
愿国产单片机越来越强,应用越来越广。
相关文章:
普冉(PUYA)单片机开发笔记 [完结篇]:使用体会
失败的移植:FreeRTOS 当使用了 PY32F003 的各种接口和功能后,手痒痒想把 FreeRTOS 也搬到这个 MCU 上,参考 STM32 和 GD32 对 FreeRTOS 的移植步骤,把 FreeRTOS v202212.00 版本的源码搬到了 Keil 工程中,编译倒是通过…...
Elasticsearch:生成 AI 中的微调与 RAG
在自然语言处理 (NLP) 领域,出现了两种卓越的技术,每种技术都有其独特的功能:微调大型语言模型 (LLM) 和 RAG(检索增强生成)。 这些方法极大地影响了我们利用语言模型的方式,使它们更加通用和有效。 在本文…...
ip静态好还是dhcp好?
选择使用静态 IP 还是 DHCP(动态主机配置协议)取决于您的网络需求和环境。下面是它们的一些特点和适用场景: 静态 IP: 固定的 IP 地址:静态 IP 是手动配置在设备上的固定 IP 地址,不会随时间或网络变化而改…...
PolarDB-X、OceanBase、CockroachDB、TiDB二级索引写入性能测评
为什么要做这个测试 二级索引是关系型数据库相较于NoSQL数据库的一个关键差异。二级索引必须是强一致的,因此索引的写入需要与主键的写入放在一个事务当中,事务的性能是二级索引性能的基础。 目前市面上的分布式数据库中,从使用体验的角度看…...
Convolutional Neural Network(CNN)——卷积神经网络
1.NN的局限性 拓展性差 NN的计算量大性能差,不利于在不同规模的数据集上有效运行若输入维度发生变化,需要修改并重新训练网络容易过拟合 全连接导致参数量特别多,容易过拟合如果增加更多层,参数量会翻倍无法有效利用局部特征 输入…...
鸿蒙开发基本概念
1、开发准备 1.1、UI框架 HarmonyOS提供了一套UI开发框架,即方舟开发框架(ArkUI框架)。方舟开发框架可为开发者提供应用UI开发所必需的能力,比如多种组件、布局计算、动画能力、UI交互、绘制等。 方舟开发框架针对不同目的和技术…...
Open CV 图像处理基础:(二)从基本概念到实践操作
Open CV 图像处理基础:从基本概念到实践操作 一、引言 图像处理是计算机视觉领域的一个重要分支,它涉及对图像的各种操作和处理。了解图像的基本概念、读取和显示方法以及基本操作是图像处理的基础。本文将通过示例文章的形式,帮助初学者逐…...
【MAC】M2 安装docker 与 mysql
一、docker下载地址 下载地址 二、安装docker完成 罗列一下docker常用命令 # 查看docker版本 docker --version# 拉取镜像 docker pull 镜像名# 查看当前所有镜像 docker images# 查看运行中的容器 docker ps -a docker ps grep| 镜像名#镜像启动操作: sudo dock…...
轻量级web开发框架Flask本地部署及无公网ip远程访问界面
文章目录 前言1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 前言 本篇文章讲解如何在本地安装Flask,以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架,采用P…...
用最通俗的语言讲解 TCP “三次握手,四次挥手”
目录 一. 前言 二. TCP 报文的头部结构 三. 三次握手 3.1. 三次握手过程 3.2. 为什么要三次握手 四. 四次挥手 4.1. 四次挥手过程 4.2. 为什么要四次挥手 五. 大白话说 5.1. 大白话说三次握手 5.2. 大白话说四次挥手 六. 总结 一. 前言 TCP 是一种面向连接的、可靠…...
使用RedisCacheWriter#clean在线异步地批量扫描匹配删除缓存数据-spring-data-redis
1.背景 生产环境,某云的某个业务Redis实例,触发内存使用率,连续 3 次 平均值 > 85 %告警。 运维同学告知,看看需要怎么优化或者升级配置?分享了其实例RDB的内存剖析链接。 通过内存剖析详情发现,存在某…...
机器视觉:AI赋能缺陷检测,铸就芯片产品的大算力与高能效
导言:近年来,国内芯片行业快速发展,市场对芯片需求的不断增大,芯片的缺陷检测压力也越来越大。芯片产品在生产制造过程中,需要经历数道工序,每个生产环节的材料、环境、工艺参数等都有可能造成产品缺陷。不…...
(9)Linux Git的介绍以及缓冲区
💭 前言 本章我们先对缓冲区的概念进行一个详细的探究,之后会带着大家一步步去编写一个简陋的 "进度条" 小程序。最后我们来介绍一下 Git,着重讲解一下 Git 三板斧,一般只要掌握三板斧就基本够用了。 缓冲区ÿ…...
华为云之ECS云产品快速入门
华为云之ECS云产品快速入门 一、ECS云服务器介绍二、本次实践目标三、创建虚拟私有云VPC1.虚拟私有云VPC介绍2.进入虚拟私有云VPC管理页面3.创建虚拟私有云4.查看创建的VPC 四、创建弹性云服务器ECS——Linux1.进入ECS购买界面2.创建弹性云服务器(Linux)——基础配置步骤3.创建…...
tcp 的限制 (TCP_WRAPPERS)
#江南的江 #每日鸡汤:青春是打开了就合不上的书,人生是踏上了就回不了头的路,爱情是扔出了就收不回的赌注。 #初心和目标:拿到高级网络工程师 TCP_WRAPPERs Tcp_wrappers 对于七层模型中是位于第四层的安全工具,他…...
如何保证架构的质量
1. 如何保证架构的质量: ①. 稳定性、健壮性(1). 系统稳定性: ①. 定义:a. 当一个实际的系统处于一个平衡的状态时,如果受到外来作用的影响时,系统经过一个过渡过程仍然能够回到原来的平衡状态.b. 可以说这个系统是稳定的,否则系统不稳定c. 如一根绳子绑着小球,处于垂直状态,…...
JavaWeb笔记之前端开发JavaScript
一、引言 1.1 简介 JavaScript一种解释性脚本语言,是一种动态类型、弱类型、基于原型继承的语言,内置支持类型。 它的解释器被称为JavaScript引擎,作为浏览器的一部分,广泛用于客户端的脚本语言,用来给HTML网页增加…...
SCAU:18063 圈中的游戏
18063 圈中的游戏 时间限制:1000MS 代码长度限制:10KB 提交次数:0 通过次数:0 题型: 编程题 语言: G;GCC;VC Description 有n个人围成一圈,从第1个人开始报数1、2、3,每报到3的人退出圈子。编程使用链表找出最后留下的人。输入格式 输入一个数n&a…...
.NET Core中鉴权 Authentication Authorization
Authentication: 鉴定身份信息,例如用户有没有登录,用户基本信息 Authorization: 判定用户有没有权限 使用框架提供的Cookie鉴权方式 1.首先在服务容器注入鉴权服务和Cookie服务支持 services.AddAuthentication(options > {options.DefaultAuthe…...
PyTorch深度学习实战(26)——卷积自编码器(Convolutional Autoencoder)
PyTorch深度学习实战(26)——卷积自编码器 0. 前言1. 卷积自编码器2. 使用 t-SNE 对相似图像进行分组小结系列链接 0. 前言 我们已经学习了自编码器 (AutoEncoder) 的原理,并使用 PyTorch 搭建了全连接自编码器,但我们使用的数据…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...
自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...
关于疲劳分析的各种方法
疲劳寿命预测方法很多。按疲劳裂纹形成寿命预测的基本假定和控制参数,可分为名义应力法、局部应力一应变法、能量法、场强法等。 1名义应力法 名义应力法是以结构的名义应力为试验和寿命估算的基础,采用雨流法取出一个个相互独立、互不相关的应力循环&…...
开源 vGPU 方案:HAMi,实现细粒度 GPU 切分
本文主要分享一个开源的 GPU 虚拟化方案:HAMi,包括如何安装、配置以及使用。 相比于上一篇分享的 TimeSlicing 方案,HAMi 除了 GPU 共享之外还可以实现 GPU core、memory 得限制,保证共享同一 GPU 的各个 Pod 都能拿到足够的资源。…...
