普冉(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

相关文章

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版