普冉PY32系列(一) PY32F0系列32位Cortex M0+ MCU简介

目录

PY32F0系列上市其实相当长一段时间了, 样品已经吃灰很久, 因为工作原因11月12月都很忙一直没时间, 最近终于有一点时间把功课做了.

PY32F0 简介

PY32F0 是普冉生产的 32位 ARM M0/M0+ 内核MCU, 价格在市场上非常有竞争性. 根据外设的丰富程度分为三个系列:

  • PY32F002B 系列, 24KF/3KR, 主频24MHz和48MHz, 通用定时器只有两个, 资源较少, 特点是低功耗, stop模式1.7uA, 型号 PY32F002B
  • PY32F0XX 系列, 型号有 PY32F002A, PY32F003X, PY32F030X, 资源较丰富, 容量最高到64KF+8KR
  • PY32F07X 系列, 型号有 PY32F040X, PY32F071X, PY32F072X, 增加了CAN和USB外设, 容量最高到128KF+16KR

开发上, 因为是通用的 32位 M0内核, 可以在Keil5, IAR, VScode 等IDE上开发, 使用 STLink, DAPLink 或 JLink 烧录和调试.

从资料仓库可以下载最新的资料包, 资料包里包含全部型号的数据手册, 使用手册, 以及代码库, 代码示例.

芯岭科技 XL32F003, XL32F001

芯岭的 XL32F003 系列与 PY32F003 属于同内核产品. XL32F003 提供 4x4 脚间距0.4mm 的QFN32封装, 这个封装在 PY32F0 系列中没有, 如果需要超小封装的可以考虑. 芯岭还提供PY32与2.4G收发芯片的合封方案.

PY32F0 各系列具体配置对比

从对寄存器的读写测试看, PY32F002A, PY32F003, PY32F030属于同一个内核的产品, 寄存器设置是通用的, 而 PY32F072 属于另一种内核, 因为在002A/003/032上读写072的寄存器地址无效. PY32F002B也属于另一个内核的产品.

每个系列的封装变化很多, 就算一个TSSOP20, 都有三四种引脚布局, 这里不按型号介绍了, 大致看一下各系列的容量和外设区别.

PY32F002B 系列

  • 24K Flash, 3K RAM
  • Internal 24 MHz RC Oscillator (HSI)
  • Internal 32.768 KHz RC Oscillator (LSI)
  • 32.768 KHz low speed crystal oscillator(LSE)
  • External clock input 注意没有外置高速晶振
  • Operating voltage:1.7 V ~ 5.5 V
  • 1 x 12 bits ADC
    • Support up to 8 external input channels and 2 internal channels
  • Timer
    • A 16 bits advanced control timer (TIM1)
    • A general purpose 16-bit timer (TIM14)
    • A low-power timer (LPTIM),supports wake-up form stop mode
    • An Independent Watching Timer (IWDT)
    • A SysTick timer
  • RTC
  • A Serial Peripheral Interface (SPI)
  • A Universal Synchronous/Asynchronous Transceiver (USART) with automatic
  • A I2C interface
  • Hardware CRC-32 module
  • Two comparators
  • Unique UID
  • Serial wire debug (SWD)

PY32F002A 系列

  • 32-bit ARM® Cortex® - M0+ CPU
  • Up to 32 MHz operating frequency
    • Internal 8 / 24 MHz RC Oscillator (HSI)
    • Internal 32.768 KHz RC oscillator (LSI)
    • 4 to 24 MHz crystal oscillator (HSE)
  • Maximum 20 Kbytes of flash memory
  • Up to 3 Kbytes SRAM
  • 1 x 12-bit ADC
    • Supports up to 9 external input channels
  • 1 x 16bit advanced control timer (TIM1)
  • 1 x general purpose 16-bit timers (TIM16)
  • 1 x low-power timer (LPTIM), supports wake-up from stop mode
  • 1 x Independent Watchdog Timer (IWDT)
  • 1 x SysTick timer
  • 1 x Serial Peripheral Interface (SPI)
  • 1 x Universal Synchronous / Asynchronous Transceivers (USARTs) with automatic baudrate detection
  • 1 x I2C interface , supports standard mode (100kHz) , Fast mode (400 kHz) , supports 7-bit addressing mode
  • Hardware CRC-32 module
  • Comparator * 2
  • Unique UID
  • Serial wire debug (SWD)
  • Operating voltage: 1.7V to 5.5V
  • Working temperature: -40℃ to 85℃
  • Package: SOP8, SOP16, ESSOP10, TSSOP20, QFN16

大致的资源描述: 宽电压1.7V到5.5V, 最高支持32MHz时钟, 内建24MHz, 最高20KB的flash, 3KB的SRAM, 带ADC, TIM, 低功耗TIM, WDT, SPI, UART, I2C, 还带两个比较器.

  • 宽电压这点很强, 3.3V和5V都覆盖了
  • 存储也还不错, 相比 HK32F030MF4P6 和 CH32V003 的 16KB flash + 2KB RAM 容量更高
  • 该有的外设都有, 如果能带个I2S就更好(😄)
  • 比较器在有些场景下很有用, 省了外接了.

和 PY32F002 的区别:

  • 增加了比较器
  • 少了TIM6? 从启动文件比较看不出区别, 这个不确定

PY32F003 系列

  • 32-bit ARM® Cortex® - M0+ CPU
  • Up to 32 MHz operating frequency
    • Internal 4 /8/16/ 22.12 / 24 MHz RC Oscillator (HSI)
    • Internal 32.768 KHz RC oscillator (LSI)
    • 4 to 32 MHz crystal oscillator (HSE)
  • Maximum 64 Kbytes of flash memory
  • Up to 8 Kbytes SRAM
  • 3-channel DMA controller
  • 1 x 12-bit ADC
    • Supports up to 10 external input channels
  • 1 x 16bit advanced control timer (TIM1)
  • 4 x general purpose 16-bit timers (TIM3/TIM14/TIM16/TIM17)
  • 1 x low-power timer (LPTIM), supports wake-up from stop mode
  • 1 x Independent Watchdog Timer (IWDT)
  • 1 x Window Watchdog Timer (WWDT)
  • 1 x SysTick timer
  • RTC
  • 1 x Serial Peripheral Interface (SPI)
  • 2 x Universal Synchronous / Asynchronous Transceivers (USARTs) with automatic baudrate detection
  • 1 x I2C interface , supports standard mode (100kHz) , Fast mode (400 kHz) , supports 7-bit addressing mode
  • Hardware CRC-32 module
  • 2 x comparators
  • Unique UID
  • Serial wire debug (SWD)
  • Operating voltage: 1.7V to 5.5V
  • Working temperature: -40℃ to 85℃
  • Package: SOP8, SOP16, TSSOP20, QFN20

和 PY32F002A 的区别

  • 频率增加到最高 32MHz
  • Flash容量增加到最高 64 KBytes
  • RAM容量增加到最高 8 KBytes
  • 增加了 DMA
  • 增加了 WWDG
  • 增加了 RTC
  • 增加了 TIM3, TIM14, TIM17
  • 增加了 USART2

XL32F003 系列

这是芯岭科技出的一个型号系列, 放在这里是因为这个系列本质上和PY003系列是一样的, 但是只有64KF, 8KR的规格, 当前有三种封装:

  • TSSOP20: XL32F003TS20, 引脚布局和 PY32F003F2xP 系列一致
  • QFN20: XL32F003Q20, 引脚布局和 PY32F003F1xU, PY32F030F2xU 系列一致
  • QFN32: XL32F003Q32, 引脚布局和 PY32F030K2xM 系列一致, 封装更小, 是4x4的QFN, 脚间距0.4mm

PY32F030 系列

  • 32-bit ARM® Cortex® - M0+
  • Up to 48 MHz operating frequency
    • Internal 4/8/16/ 22.12/24 MHz RC oscillator (HSI)
    • Internal 32.768 KHz RC oscillator (LSI)
    • 4 to 32 MHz crystal oscillator (HSE)
    • 32.768KHz low speed crystal oscillator (LSE)
    • PLL (supports 2 frequency multiplication of HSI or HSE)
  • Up to 64 Kbytes flash memory
  • Up to 8 Kbytes SRAM
  • 3-channel DMA controller
  • 1 x 12-bit ADC
    • Supports up to 10 external input channels
  • 1 x 16bit advanced control timer (TIM1)
  • 4 x general purpose 16-bit timers (TIM3/TIM14/TIM16/TIM17)
  • 1 x low-power timer (LPTIM), supports wake-up from stop mode
  • 1 x Independent Watchdog Timer (IWDT)
  • 1 x Window Watchdog Timer (WWDT)
  • 1 x SysTick timer
  • RTC
  • 2 x Serial Peripheral Interface (SPI)
  • 2 x Universal Synchronous / Asynchronous Transceivers (USARTs) with automatic baudrate detection
  • 1 x I2C interface , supports standard mode (100kHz) , Fast mode (400 kHz) , supports 7-bit addressing mode
  • Support 4-bit 7-segment common cathode LED digital tube
  • Hardware CRC-32 module
  • 2 x comparators
  • Unique UID
  • Serial wire debug (SWD)
  • Operating voltage: 1.7 to 5.5 V
  • Working temperature: -40℃ to 85℃
  • Package: LQFP32, QFN32, TSSOP24, TSSOP20, QFN20

和 PY32F003 系列的区别

  • 频率增加到最高 48MHz
  • 支持 两倍PLL
  • 增加了 SPI2
  • 增加了 4位7段 LED数码管驱动

PY32F072 系列

从数据手册看, 与030系列相比Flash和RAM容量提升, 增加了LCD, CTC, TIM2, TIM6, TIM7, TIM15, I2C2, CAN, USB等外设. 根据手册上的寄存器测过002A/003/032, 应该是单独的核心, 与前面的三个型号不一样.

文末的彩蛋

  • PY32F002A 标称是20KB Flash + 3KB SRAM, 但是实际上现在买到的都是 32KB Flash + 4KB SRAM
  • 开发上, 直接使用PY32F030F16的设置就可以了, PY32F030的外设在 PY32F002A 上都有, 已经在 TSSOP20 封装的 PY32F002AF15P 上验证

相关链接

<think>好的,我现在需要帮用户生成个针对PY32F002B微控制器的代码示例,配置PA4为开漏输出,使用HAL库。首先,我得确认自己对这个芯片和HAL库的了解程度。 首先,我应该回忆PY32F002B的GPIO结构。这个芯片是的产品,属于ARM Cortex-M0+内核,所以它的HAL库可能和ST的HAL库类似,但可能有自己的特定函数和结构。用户提到使用HAL库,所以需要确认是否提供了类似的库函数,或者是否有其他命名方式。 接下来,配置GPIO为开漏输出。开漏输出通常需要设置模式为开漏,并且可能需要使能上拉电阻,因为开漏输出如果不接上拉的话,无法主动输出高电平。因此,在配置的时候,除了设置模式,还要确认是否要配置上拉或下拉。 然后,查找HAL库中相关的函数。通常,HAL库中配置GPIO的函数是HAL_GPIO_Init,需要先定义个GPIO_InitTypeDef结构体,设置Pin、Mode、Pull、Speed等参数。例如,Mode应该设置为GPIO_MODE_OUTPUT_OD,Pull可能需要选择GPIO_PULLUP,以确保有上拉。 但是,我需要确认的HAL库中这些常量的具体名称是否正确。有些厂商可能会有不同的命名习惯,比如GPIO_MODE_OPEN_DRAIN而不是OUTPUT_OD。这时候可能需要查阅PY32F002B的HAL库文档或头文件,但假设用户无法提供这些资料,可能需要根据常见的命名方式来推测。 另外,时钟配置是关键的步。在使用任何外设之前,必须使能对应的时钟。PA4属于GPIOA,因此需要启用GPIOA的时钟。在HAL库中,通常使用__HAL_RCC_GPIOA_CLK_ENABLE()宏来开启时钟。需要确认这个宏是否存在,或者是否有其他函数,比如HAL_RCC_GPIOA_CLK_ENABLE()。 接下来,代码的结构应该是这样的:先开启时钟,然后定义GPIO初始化结构体,填充参数,最后调用初始化函数。可能需要包含相关的头文件,比如#include "py32f0xx_hal.h"之类的。 用户可能需要完整的代码示例,所以需要写出具体的main函数中的初始化部分,或者至少是配置PA4的部分。需要注意,如果用户没有提供完整的工程框架,可能需要假设他们已经有了基本的HAL初始化,比如系统时钟配置。 可能遇到的疑问点:是否需要在初始化之前调用其他的HAL初始化函数?比如HAL_Init(),系统时钟配置等。这部分可能需要用户自行处理,但代码示例中应该提到这些前提条件。 另外,需要提醒用户注意,开漏输出模式下,如果需要输出高电平,必须外接上拉电阻,或者启用内部上拉(如果支持的话)。因此,在配置时设置Pull为GPIO_PULLUP可能很重要,否则引脚可能无法正确输出高电平。 总结步骤: 1. 启用GPIOA的时钟。 2. 定义GPIO_InitTypeDef结构体,设置Pin为PA4,Mode为开漏输出,Pull为上拉,Speed根据需求设置。 3. 调用HAL_GPIO_Init进行初始化。 可能的错误点:HAL库的函数或宏名称可能与ST的标准库不同,需要确认正确的名称。例如,GPIO_MODE_OUTPUT_OPEN_DRAIN或者类似的命名方式。如果用户提供的代码无法编译,可能需要检查这些常量的实际定义。 此外,还需要考虑编译环境和库版本的问题。不同版本的HAL库可能会有差异,用户需要根据实际使用的库进行调整。 最后,提供个示例代码,并添加必要的注释,解释每个步骤的作用,以及需要注意的事项,比如上拉电阻的配置,时钟使能的重要性等。这样用户可以根据示例调整自己的代码,并在遇到问题时进行排查。</think>以下是基于PY32F002B HAL库配置PA4为开漏输出的代码示例及步骤解析: ```c #include "py32f0xx_hal.h" void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; // 1. 使能GPIOA时钟 __HAL_RCC_GPIOA_CLK_ENABLE(); // 2. 配置PA4引脚参数 GPIO_InitStruct.Pin = GPIO_PIN_4; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; // 开漏输出模式 GPIO_InitStruct.Pull = GPIO_PULLUP; // 使能内部上拉 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 低速模式 // 3. 应用配置 HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } int main(void) { // HAL库初始化(需提前配置系统时钟) HAL_Init(); SystemClock_Config(); // 需要用户根据实际时钟配置实现 // GPIO配置 GPIO_Config(); while (1) { // 使用示例:控制PA4输出高低电平 HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_SET); // 输出高电平(需外接上拉) HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 输出低电平 } } ``` **关键点说明:** 1. **时钟使能** - 使用 `__HAL_RCC_GPIOA_CLK_ENABLE()` 宏启用GPIOA时钟 - 时钟使能是操作外设的前置必要条件 2. **模式选择** - `GPIO_MODE_OUTPUT_OD` 表示开漏输出模式 - 开漏模式下: - 输出0时:主动拉低电平 - 输出1时:高阻态,需靠外部/内部上拉电阻维持高电平 3. **上拉配置** - `GPIO_PULLUP` 启用内部上拉电阻(建议在开漏模式下启用) - 若禁用上拉(`GPIO_NOPULL`),需外接物理上拉电阻 4. **速度选择** - `GPIO_SPEED_FREQ_LOW` 适用于低频信号,可降低EMI - 高速场合可选用 `GPIO_SPEED_FREQ_HIGH` **注意事项:** 1. 系统时钟配置 - 确保已正确配置 `SystemClock_Config()` 函数 - 时钟配置影响GPIO操作时序 2. 实际应用 - 开漏输出常用于I2C总线、电平转换等场景 - 驱动能力取决于上拉电阻值(典型值4.7kΩ) 3. 引脚复用 - 若PA4被复用为其他功能(如ADC),需先解除复用 - 检查相关复用寄存器配置 **验证方法:** 1. 用万用表测量PA4电压 2. 输出高电平时应测量到约VDD电压 3. 输出低电平时应接近0V 建议在实际硬件测试时配合逻辑分析仪或示波器观察波形。若遇到配置不生效的情况,可重点检查时钟使能状态和复用功能配置。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值