普冉(PUYA)单片机开发笔记 [完结篇]:使用体会

2023-12-19 03:20

本文主要是介绍普冉(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)单片机开发笔记 [完结篇]:使用体会的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/510732

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

redis中使用lua脚本的原理与基本使用详解

《redis中使用lua脚本的原理与基本使用详解》在Redis中使用Lua脚本可以实现原子性操作、减少网络开销以及提高执行效率,下面小编就来和大家详细介绍一下在redis中使用lua脚本的原理... 目录Redis 执行 Lua 脚本的原理基本使用方法使用EVAL命令执行 Lua 脚本使用EVALSHA命令

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

使用Python和Pyecharts创建交互式地图

《使用Python和Pyecharts创建交互式地图》在数据可视化领域,创建交互式地图是一种强大的方式,可以使受众能够以引人入胜且信息丰富的方式探索地理数据,下面我们看看如何使用Python和Pyec... 目录简介Pyecharts 简介创建上海地图代码说明运行结果总结简介在数据可视化领域,创建交互式地

Java Stream流使用案例深入详解

《JavaStream流使用案例深入详解》:本文主要介绍JavaStream流使用案例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录前言1. Lambda1.1 语法1.2 没参数只有一条语句或者多条语句1.3 一个参数只有一条语句或者多

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1