普冉MS32C001单片机,国产32位单片机,芯片特性和功能介绍

MS32C001是普冉半导体(Puya)推出的基于 ARM® Cortex®-M0+ 内核 的 32 位微控制器,专为高性能、低功耗的嵌入式应用设计。工作频率最高24MHz,具有18KB的Flash存储器和1.5KB的SRAM。支持1.7V至5.5V宽工作电压范围,-40℃ ~ 85℃工作温度,可适用于多种低功耗应用场景,如工业控制、手持设备等。有Sleep(典型电流 0.5~0.8 mA)、Stop (典型电流 1.5~1.7 μA)两种低功耗模式。

MS32C001外设资源:

  • ADC
    • 12 位精度,支持 8 个外部通道 + 3 个内部通道(温度传感器、VCC/3、内部参考电压)。
    • 四种参考源:内置1.5 V/2.048 V/2.5V参考电压,电源电压Vcc。
  • 定时器
    • TIM1(16 位高级定时器):支持 PWM、输入捕获、互补输出。
    • TIM14(16 位通用定时器):基本计时与 PWM 生成。
    • LPTIM(低功耗定时器):支持 Stop 模式唤醒。
    • IWDG(独立看门狗):由 LSI 驱动,确保系统可靠性。
  • 通信与调试
    • SWD 接口:支持 ARM 串行调试。
    • GPIO:所有 I/O 均可配置为外部中断源,支持复用功能(如定时器、ADC、事件输出等)。

MS32C001应用场景:

  • 工业控制:传感器数据采集、电机控制(PWM 驱动)。
  • 消费电子:手持设备、PC 外设、游戏配件。
  • 低功耗场景:电池供电设备(如 GPS 终端、物联网节点)。
### 关于单片机 PY32C643 使用 USART LL 库 对于单片机PY32C643系列微控制器,使用LL库来配置操作USART接口可以提供更底层的控制能力以及更高的灵活性。下面展示如何通过LL库实现基本的串口通信功能。 #### 初始化系统时钟与GPIO端口设置 为了使能USART外设的工作,在进入具体USART配置之前先要完成必要的准备工作: ```c #include "py32f0xx_ll_usart.h" #include "py32f0xx_ll_rcc.h" #include "py32f0xx_ll_bus.h" #include "py32f0xx_ll_gpio.h" void SystemClock_Config(void); static void MX_GPIO_Init(void); int main(void){ /* Reset of all peripherals, Initializes the Flash interface and Systick. */ HAL_Init(); /* Configure the system clock */ SystemClock_Config(); /* Initialize GPIOs */ MX_GPIO_Init(); } ``` 上述代码片段展示了初始化过程中的关键部分[^1]。这里调用了`SystemClock_Config()`用于设定系统的主频;而`MX_GPIO_Init()`负责配置通用输入/输出引脚作为USART的数据线信号线。 #### 配置USART参数并启动传输接收 接着定义具体的USART初始化函数如下所示: ```c #define BAUDRATE 9600U #define UARTx_CLK_ENABLE() __HAL_RCC_USART2_CLK_ENABLE() #define UARTx_TX_PIN LL_GPIO_PIN_2 #define UARTx_RX_PIN LL_GPIO_PIN_3 #define UARTx_PORT GPIOA #define UARTx_INSTANCE USART2 static void MX_USART2_UART_Init(void){ /* Enable clocks for USART module and related GPIO port */ UARTx_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /* Configure TX/RX pins as alternate function push-pull */ LL_GPIO_SetPinMode(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_MODE_ALTERNATE); LL_GPIO_SetAFIO(UARTx_PORT,UARTx_TX_PIN,LL_GPIO_AF_1); LL_GPIO_SetPinSpeed(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_SPEED_FREQ_HIGH); LL_GPIO_SetPinOutputType(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_OUTPUT_PUSHPULL); LL_GPIO_SetPinPull(UARTx_PORT, UARTx_TX_PIN, LL_GPIO_PULL_NO); LL_GPIO_SetPinMode(UARTx_PORT, UARTx_RX_PIN, LL_GPIO_MODE_INPUT); LL_GPIO_SetPinPull(UARTx_PORT, UARTx_RX_PIN, LL_GPIO_PULL_UP); /* Set baud rate to desired value */ LL_USART_SetBaudRate(UARTx_INSTANCE, SystemCoreClock , LL_USART_OVERSAMPLING_16,BAUDRATE); /* Other configurations such as word length, stop bits etc...*/ LL_USART_ConfigCharacter(UARTx_INSTANCE, LL_USART_DATAWIDTH_8B, LL_USART_STOPBITS_1); LL_USART_SetTransferDirection(UARTx_INSTANCE, LL_USART_DIRECTION_TX_RX); LL_USART_EnableHalfDuplex(UARTx_INSTANCE); /* Finally enable the USART peripheral */ LL_USART_Enable(UARTx_INSTANCE); } /* Call this initialization routine inside your main program loop after other initializations */ MX_USART2_UART_Init(); ``` 这段代码实现了对USART模块的基本配置,包括但不限于波特率、数据宽、停止数等重要属性,并启用了半双工模式下的发送接收方向[^2]。 #### 发送字符到指定USART设备 当完成了硬件层面的基础搭建之后就可以着手准备实际的消息传递工作了。下面给出了一种简单的字符串打印方式供参考: ```c void SendString(const char *str){ while(*str != '\0'){ /* Wait until TXE flag is set by hardware */ while(LL_USART_IsActiveFlag_TC(UARTx_INSTANCE)== RESET){} /* Write character into data register */ LL_USART_TransmitData8(UARTx_INSTANCE,*str++); } } ``` 此段程序会逐字节地向目标USART实例写入待传送的信息直到遇到终止符为止。每次写入前都会等待上一次的操作结束以确保不会发生冲突或丢失数据的情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值