随着嵌入式技术的发展,灵动MM32系列微控制器以其高性能、低功耗、丰富的外设资源在市场上逐渐受到开发者的关注。MM32 MCU 系列不仅适用于消费类电子产品,还广泛应用于工业控制、智能家居等领域。本文将以 MM32F103 这一款常见的型号为例,展示如何使用该 MCU 实现 GPIO 控制、UART 通信和 PWM 输出,并分享详细的代码与功能分析,帮助开发者快速上手。
一、灵动 MM32F103 简介灵动 MM32F103 系列微控制器基于 ARM Cortex-M3 内核,具备高达 72MHz 的主频,支持多种低功耗模式。它内置丰富的外设资源,如 UART、SPI、I2C、ADC、PWM 等,能够满足不同场景下的需求,尤其适用于需要高性能计算与低功耗控制的应用场合。
二、项目配置及开发环境- 开发工具:MDK-ARM
- 开发板:MM32F103 核心板
- 使用模块:GPIO、UART、PWM
- 项目目标:使用按键控制 LED 的状态,通过 UART 进行串口通信,并使用 PWM 控制 LED 的亮度。
三、代码实现1. 系统初始化及 GPIO 控制#include "mm32f10x.h"
#include "mm32f10x_gpio.h"
#include "mm32f10x_rcc.h"
#include "mm32f10x_usart.h"
#include "mm32f10x_tim.h"
// 系统时钟初始化
void SystemInit(void) {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_USART1, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
}
// GPIO 初始化
void GPIO_Init(void) {
GPIO_InitTypeDef GPIO_InitStructure;
// LED 引脚配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);
// 按键引脚配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 上拉输入
GPIO_Init(GPIOA, &GPIO_InitStructure);
}
// UART 初始化
void UART_Init(void) {
USART_InitTypeDef USART_InitStructure;
// 配置 UART1
USART_InitStructure.USART_BaudRate = 9600;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
USART_Init(USART1, &USART_InitStructure);
// 使能 UART1
USART_Cmd(USART1, ENABLE);
}
// PWM 初始化
void PWM_Init(void) {
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
// 配置定时器2用于 PWM
TIM_TimeBaseStructure.TIM_Period = 999;
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
// PWM 配置
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_Pulse = 500; // 默认占空比 50%
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
// 使能定时器
TIM_Cmd(TIM2, ENABLE);
}
// 主函数
int main(void) {
SystemInit();
GPIO_Init();
UART_Init();
PWM_Init();
while (1) {
// 按键控制 LED
if (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0) == 0) {
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 点亮 LED
} else {
GPIO_SetBits(GPIOC, GPIO_Pin_13); // 熄灭 LED
}
// 通过串口发送调试信息
USART_SendData(USART1, 'H');
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);
}
}
四、功能分析- GPIO 控制:代码中使用 GPIO 控制 LED 的亮灭,按下按键时点亮 LED,松开按键时熄灭 LED。GPIO 引脚的初始化过程包括选择推挽输出模式(控制 LED)和上拉输入模式(读取按键状态)。
- UART 通信:配置 UART1 进行串口通信,波特率设置为 9600。通过 USART_SendData 函数,系统可以将字符或数据发送到串口进行调试或通信。
- PWM 控制:通过定时器 2 实现 PWM 输出,用于控制 LED 的亮度。PWM 初始化过程中设置了占空比为 50%,可以根据实际应用动态调整占空比,从而控制输出信号的占空比。
五、应用场景扩展- 工业控制:通过 GPIO 控制各种工业设备的开关状态,如控制继电器、驱动电机等。结合 PWM 功能,系统可以精确地控制电机的转速或 LED 亮度等应用。
- 物联网设备:通过 UART 与外部传感器或设备进行通信,发送或接收数据,结合无线通信模块可以实现远程控制与数据采集。
- 智能家居:使用 GPIO 结合传感器可以实现如灯光控制、门锁管理等功能,PWM 控制可以用于调节智能照明设备的亮度。
六、总结灵动 MM32 系列 MCU 具备丰富的外设资源和强大的处理能力,能够满足各种嵌入式开发需求。通过本文的代码示例,开发者可以快速掌握 GPIO 控制、UART 通信和 PWM 控制等基础功能的实现方法。这些功能可以广泛应用于工业控制、物联网和消费电子等领域。
|